让人迷惑的Javascript中的原始封装类型

81 阅读1分钟

众所周知,JS中的原始封装类型有三个,分别是StringNumberBoolean,它允许我们使用 new关键字来直接创建原始数据,这方便我们在编程的过程中不用对原始数据类型和引用类型做区分对待。

但是在使用 typeof的时候,却有一点点小的意外

var str = new String("Chinese");
typeof(str); // "object"

NumberBoolean 也是同样的结果,当你使用 new 创建出原始封装类型的字符串、布尔值或者数字的时候,使用 typeof 操作符得到的结果均是 "object"

而且,当你手动创建一个 Boolean(false) 时,也会给你的程序带来Bug,例如

var b = new Boolean(false);
if(b){
    console.log("That's a false");
}
// 结果会输出 That's a false

这是因为在条件判断的时候,直接默认 bobject ,所以条件成立。


综上,JS中的原始封装类型要慎用。