使用封装对象时有些地方需要特别注意。

比如Boolean:

var a = new Boolean( false );
if (!a) {
    console.log( "Oops" ); // 执行不到这里
}

我们为false 创建了一个封装对象,然而该对象是真值(“truthy”,即总是返回true,参见第4 章),所以这里使用封装对象得到的结果和使用false 截然相反。

如果想要自行封装基本类型值,可以使用Object(..) 函数(不带new 关键字):

var a = "abc";
var b = new String( a );
var c = Object( a );
typeof a; // "string"
typeof b; // "object"
typeof c; // "object"
b instanceof String; // true
c instanceof String; // true

Object.prototype.toString.call( b ); // "[object String]"
Object.prototype.toString.call( c ); // "[object String]"

再次强调,一般不推荐直接使用封装对象(如上例中的b 和c),但它们偶尔也会派上用场。

摘自 《你不知道的JavaScript》中卷

分类: Javascript

发表评论

电子邮件地址不会被公开。 必填项已用*标注