javaScript基本包装类型及变量定义的区别


早在我的第一篇文章中就已经讲到了JavaScript中的变量及变量定义。这篇文章将会再拓展一些别的 。在开始之前我想你先回答我:
var number1 = new Number(10);
var number2 = 10;

的区别。


如果你没能够回答上来,那么就更应该读读这篇文章。下面开始正文:


基本包装类型


ECMAScripe提供了3个特殊的引用类型:BooleanNumberString。说好的基本类型呢,怎么突然就变了卦。我起初也是这么想的,可往往现实就是这么残酷。当我觉得javaScript中的类型我已经可以玩转自如的时候上天又告诉我这些类型还能拥有方法和属性。


var string1 = "string";
var string2 = string1.substring(2);



从逻辑上而言基本类型是不应该有方法的,但是在上面代码中string1调用了substring()方法,并将结果保存在了string2中。详细一点说:在执行第二行代码时,访问过程处于一种读取模式,也就是要从内存中读取这个字符串的值。而在读取模式中访问字符串时,后台都会自动完成下列处理。
1、创建String类型实例;
2、在实例上调用指定方法;
3、销毁实例;

这样基本类型的字符串值就变得跟对象一样。而且,这同样适用于Boolean和Number类型对应的布尔值和数字值。


引用类型与基本包装类型的主要区别就是对象的生存期。

var string1 = "string";
string1.student = "zhangsan";
alert(string1.student);    //undefined

第二行代码为string1添加了一个student属性。但是,在第三行的访问中student属性又不见了。原因就是在第二行代码执行完毕之后,创建的string对象已经被销毁了。第三行又重新创建了string对象,所以没有student属性。


Boolean类型


Boolean类型是与布尔值对应的引用类型。要创建Boolean对象,可以调用Boolean构造函数并传入true或false值。
var boolean1 = new Boolean(true);


Boolean类型的实例重写了valueOf()方法和toString()方法。valueOf()返回基本类型值true或false;toString()返回字符串"true"和"false"。


不推荐使用Boolean对象,请看下面这个例子:
var falseBoolean1 = new Boolean(false);
var boolean1 = falseBoolean1 && true;
alert(boolean1); //true


var falseBoolean2 = false;
var boolean2 = falseBoolean2 && true;
alert(boolean2); //false

在布尔表达式中的所有对象都会被转成true,因此falseBoolean1在表达式中表示的是true。结果,true && true最后结果还是true。而基本类型falseBoolean2在表达式中表示的是false,结果当然也大不相同。


基本类型与引用类型的不同之处还体现在typeof和instanceof操作符上。例如:
alert(typeof falseBoolean1);  //object
alert(typeof falseBoolean2);  //boolean
alert(falseBoolean1 instanceof Boolean);  //true
alert(falseBoolean2 instanceof Boolean);  //false

首先,typeof操作符对基本类型返回boolean,而对引用类型返回object。其次,由于Boolean对象是Boolean类型的实例,所以使用insatnceof操作符测试Boolean对象会返回true,而测试基本类型的布尔值则返回false。


Number类型


Number是与数字值对应的引用类型。和创建Boolean对象一样需要调用构造函数并向其中传递一个数值。
var number1 = new Number(10);


与Boolean类型一样,Number类型也重写了valueOf()、toLocaleString()和toString()方法。虽然Number对象也以后台方式为数值提供了重要的功能,但在typeof和instanceof操作符上与Boolean类型相同。
var number1 = new Number(10);
var number2 = 10;
alert(typeof number1); //"object"
alert(typeof number2); //"number"
alert(number1 instanceof Number); //true
alert(number2 instanceof Number); //false



是否还记得在文章开始时留下的问题,现在心里应该都有答案了吧。下一次会单独介绍一下String类型,这篇文章就到此结束了,谢谢。

猜你喜欢

转载自blog.csdn.net/hpljava/article/details/78520020
今日推荐