ECMAScript基础(引用类型)

Object类 

ECMAScript中的Object类与Java中的java.lang.object相似,ECMAScript中的所有类都由这个类继承而来,Object类中的所有属性和方法都会出现在其他类中,所以理解了Object类,就可以更好地理解其他类。

Object类具有下列属性:

Constructor——对创建对象的函数的引用(指针)。对于Object类,该指针指向原始的object()函数。

Prototype——对该对象的对象原型的引用。对于所有的类,它默认返回Object对象的一个实例。

Object类还有几个方法:

HasOwnProperty(property)——判断对象是否有某个特定的属性。必须用字符串指定该属性(例如,o.hasOwnProperty("name"))。

IsPrototypeOf(object)——判断该对象是否为另一个对象的原型。

PropertyIsEnumerable(property)——判断给定的属性是否可以用for…in语句进行枚举。

ToString()——返回对象的原始字符串表示。对于Object类,ECMA-262没有定义这个值,所以不同的ECMAScript实现具有不同的值。

ValueOf()——返回最适合该对象的原始值。对于许多类,该方法返回的值都与toString()的返回值相同。

上面列出的每种属性和方法都会被其他类覆盖。

Boolean类

  1. var oFalseObject = new Boolean(false);
  2. var bResult = oFalseObject && true;//outputs "true"

在这段代码中,用false值创建Boolean对象。然后用这个值与原始值true进行AND操作。在Boolean运算中,falsetrue进行AND操作的结果是false。不过,在这行代码中,计算的是oFalseObject,而不是它的值false。正如前面讨论过的,在Boolean表达式中,所有对象都会被自动转换为true,所以oFalseObejct的值是true。然后true再与true进行AND操作,结果为true

Number类

Number类是Number原始类型的引用类型。

  1. var oNumberObject = new Number(55);//创建Number对象
  2. var iNumber = oNumberObject.valueOf();//得到数字对象的Number原始值
  3. var oNumberObject = new Number(99);
  4. alert(oNumberObject.toFixed(2));//outputs "99.00"
  5. //toFixed()方法返回的是具有指定位数小数的数字的字符串表示
  6. var oNumberObject = new Number(99);
  7. alert(oNumberObject.toExponential(1));//outputs "9.9e+1"
  8. //它返回的是用科学记数法表示的数字的字符串形式
  9. var oNumberObject = new Number(99);
  10. alert(oNumberObject.toPrecision(1));//outputs "1e+2"
  11. //toPrecision()方法根据最有意义的形式来返回数字的预定形式或指数形式。
  12. //它有一个参数,即用于表示数的数字总数(不包括指数)。

toFixed()toExponential()toPrecision()方法都会进行舍入操作以便用正确的小数位数正确地表示一个数。

String类

String类是String原始类型的对象表示法,它是以下列方式创建的:

  1. var oStringObject = new String("hello world");
  1. var oStringObject = new String("hello world");
  2. alert(oStringObject.length);//outputs "11" 
  3. //String类具有属性length,它是字符串中的字符个数 
  4. var oStringObject = new String("hello world");
  5. alert(oStringObject.charAt(1));//outputs "e" 
  6. //charAt()方法返回的是包含指定位置处的字符的字符串 
  7. var oStringObject = new String("hello world");
  8. alert(oStringObject.charCodeAt(1));//outputs "101" 
  9. //如果想得到的不是字符,而是字符代码,那么可以调用charCodeAt() 
  10. var oStringObject = new String("hello ");
  11. var sResult = oStringObject.concat("world");
  12. alert(sResult);      //outputs "hello world" 
  13. alert(oStringObject);//outputs "hello " 
  14. //concat()方法,用于把一个或多个字符串连接到String对象的原始值上 

 

  1. var oStringObject = new String("hello world");
  2. alert(oStringObject.indexOf("o"));//outputs "4"
  3. alert(oStringObject.lastIndexOf("o"));//outputs "7"
  4. //indexOf()方法是从字符串的开头(位置0)开始检索子串
  5. //lastIndexOf()则是从字符串的结尾开始检索子串的

这里,第一个"o"字符串出现在位置4,即"hello"中的"o";最后一个"o"字符串出现在位置7,即"world"中的"o"如果该字符串中只有一个"o"字符串,那么indexOf()lastIndexOf()方法返回的位置相同。

下一个方法是localeCompare(),对字符串值进行排序。该方法有一个参数——要进行比较的字符串,返回的是下列3个值之一:

如果String对象按照字母顺序排在参数中的字符串之前,返回负数(最常见的是-1,不过真正返回的值是由实现决定的)。

如果String对象等于参数中的字符串,返回0

如果String对象按照字母顺序排在参数中的字符串之后,返回正数(最常见的是1,不过同样,真正返回的值是由实现决定的)。

示例如下:

  1. var oStringObject = new String("yellow");
  2. alert(oStringObject.localeCompare("brick")); //outputs "1"
  3. alert(oStringObject.localeCompare("yellow"));//outputs "0"
  4. alert(oStringObject.localeCompare("zoo"));   //outputs "-1"

ECMAScript提供了两种方法从子串创建字符串值,即slice()substring()。这两种方法返回的都是要处理的字符串的子串,都接受一个或两个参数。第一个参数是要获取的子串的起始位置,第二个参数(如果使用的话)是要获取子串终止前的位置(也就是说,获取终止位置处的字符不包括在返回的值内)。如果省略第二个参数,终止位就默认为字符串的长度。与concat()方法一样,slice()substring()方法都不改变String对象自身的值。它们只返回原始的String值,保持String对象不变。

  1. var oStringObject = new String("hello world");
  2. alert(oStringObject.slice(3));      //outputs "lo world"
  3. alert(oStringObject.substring(3));  //outputs "lo world"
  4. alert(oStringObject.slice(3,7));    //outputs "lo w"
  5. alert(oStringObject.substring(3,7));//outputs "lo w"

对于负数参数,slice()方法会用字符串的长度加上参数,substring()方法则将其作为0处理(也就是说将忽略它)。例如:

  1. var oStringObject = new String("hello world");
  2. alert(oStringObject.slice(-3));      //outputs "rld" 
  3. alert(oStringObject.substring(-3));  //outputs "hello world" 
  4. alert(oStringObject.slice(3,-4));    //outputs "lo w" 
  5. alert(oStringObject.substring(3,-4));//outputs "hel"

4种方法用于执行大小写转换,即toLower- Case()toLocaleLowerCase()toUpperCase()toLocaleUpperCase()。从名字上可以看出它们的用途,前两种方法用于把字符串转换成全小写的,后两种方法用于把字符串转换成全大写的。

  1. var oStringObject = new String("Hello World");
  2. alert(oStringObject.toLocaleUpperCase());//outputs "HELLO WORLD"
  3. alert(oStringObject.toUpperCase());      //outputs "HELLO WORLD"
  4. alert(oStringObject.toLocaleLowerCase());//outputs "hello world"
  5. alert(oStringObject.toLowerCase());      //outputs "hello world"

这段代码中,toUpperCase()toLocaleUpperCase()方法输出的都是"HELLO WORLD"toLowerCase()toLocaleLowerCase()方法输出的都是"hello world"。一般说来,如果不知道在以哪种编码运行一种语言,则使用区域特定的方法比较安全。

记住,String类的所有属性和方法都可应用于String原始值上,因为它们是伪对象。

instanceof 运算符

在使用typeof运算符时采用引用类型存储值会出现一个问题,无论引用的是什么类型的对象,它都返回"object"ECMAScript引入了另一个Java运算符instanceof来解决这个问题。

instanceof运算符与typeof运算符相似,用于识别正在处理的对象的类型。与typeof方法不同的是,instanceof方法要求开发者明确地确认对象为某特定类型。例如:

  1. var oStringObject = new String("hello world");
  2. alert(oStringObject instanceof String);//outputs "true"

这段代码问的是“变量oStringObject是否为String类的实例?”oStringObject的确是String类的实例,因此结果是"true"。尽管不像typeof方法那样灵活,但是在typeof方法返回"object"的情况下,instanceof方法还是很有用的。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值