1.背景介绍
引用类型的值(对象)是一个引用类型的一个实例。在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起。它也通常称为类。
为了便于操作基本类型值,ECMAScript提供了3个特殊的引用类型:Boolean、Number和String。这些类型与其他引用类型相似,但同时也具有与各自的基本类型相应的特殊行为。实际上,每当读取一个基本类型值的时候,后台就会创建一个对应的基本包装类型的对象,从而能够调用一些方法来操作这些数据。
2.知识剖析
基本包装类型概述
var box = 'me';//定义一个字符串
var box2 = box.substring(2);//截掉字符串前两位
alert(box2);//输出新字符串
变量box是一个字符串类型,而box.substring(2)又说明它是一个对象(只有对象才会调用方法),最后把处理结果赋值给box2。
字面量写法:
var box = 'Mr. Lee';//字面量
box.name = 'Lee';//无效属性
box.age = function () {//无效方法
return 100;
};
alert(box);//Mr. Lee
alert(box.substring(2));//. Lee
alert(typeof box);//string
alert(box.name);//undefined
alert(box.age());//错误
new运算符写法:
var box = new String('Mr. Lee');//new运算符
box.name = 'Lee';//有效属性
box.age = function () {//有效方法
return 100;
};
alert(box);//Mr. Lee
alert(box.substring(2));//. Lee
alert(typeof box);//object
alert(box.name);//Lee
alert(box.age());//100
以上字面量声明和new运算符声明很好的展示了他们之间的区别。不管字面量形式还是new运算符形式,都可以使用它的内置方法。并且Boolean和Number特性与String相同,三种类型可以成为基本包装类型。
Boolean布尔对象类型:
Boolean类型是布尔值创建的引用类型。创建Boolean类型,可以使用Boolean构造函数去创建,并传入true或者
false参数。如:var booleanObject = new Boolean(true);
注意:在布尔表达式中使用Boolean对象,我们可能会出错的一些地方,如:
var booleanObj = new Boolean(false);
var result = booleanObj && true;
console.log(result);
结果是true,因为booleanObj是一个对象,在布尔表达式中,所有的对象都会被转换为true。记住:引用类型的布尔值,其实是对象。当然,我们不推荐这么用(不推荐用引用类型的布尔值来判断布尔表达式)
Number类型
Number类型是数字值创建的引用类型。创建Number类型,使用Number类型的构造函数,可以传递数字值参数,如:
var numberObj = new Number(1024);
numberObj.toFixed()方法:
可以接受一个数值,表示保留的小数的个数(会自动四舍五入)。如果要处理价格问题或者增长率问题,即保留多少为小数,用这个方法非常有效。
var numberObj = new Number(1024.153);
console.log(numberObj.toFixed(2));//1024.15
console.log(numberObj.toFixed(1));//1024.2
String类型
String类型是字符串值创建的引用类型。String类型创建的方式,使用String构造函数创建,可以传入字符串参数;如:
var stringOjb = new
String(“hello,1024idea”);
String类型的每个实例都有一个length属性,用于计算字符串的长度(即字符串中包含多少个字符)。
字符方法:charAt(),charCodeAt(),接受一个数字参数,返回某个数字索引位置的字符或字符编码。
var str = "hello,1024idea";
console.log(str.charAt(4));//o
console.log(str.charCodeAt(4));//111
console.log(str[4]);//o
字符串的操作方法:concat(),可以将多个字符串连接起来。返回得到的新字符串。实践中,我们平时用的多的还是用“+”去拼接字符串。
var str1 = "hello,";
var str2 = str1.concat("1024idea");
console.log(str2);//hello,1024idea
3.常见问题
引用类型与基本包装类型的区别?
在于对象的生命周期。使用new关键字创建的引用类型的实例,对象在当前作用域都存在。而基本包装类型自动创建的对象则在对象被调用的时刻存在,调用完毕后,就被销毁不存在了。
引用类型,也就是对象类型。创建好对象可以调用这个对象下的方法有Object类型,function类型等。
使用new关键字创建的构造函数与使用同名的转型函数的效果是不一样的。如:
//构造函数与转型函数返回值的区别
var str = "1024";
var strObj = new String(str);
console.log(typeof strObj);//object
var strNum = Number(str);
console.log(typeof strNum);//number
这个例子中,变量strObj保存的是object类型,而变量strNum保存的是number类型。一般情况下,是不建议手动的去创建基本包装类型的对象,因为这样经常造成的问题是,分不清自己是在处理基本包装类型还是引用类型。
4.参考文献
javaScript对象-基本包装类型的详解:
http://www.cnblogs.com/john-sr/p/5731247.html