javascript封装对象的疑惑点

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

比如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》中卷

发表评论

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