typeof可区分原始值与包装对象:原始值返回小写类型名,包装对象均返回"object";===比较时原始值与对应包装对象恒不相等;原始值不可持久赋属性,包装对象可以;instanceof可判包装对象是否为对应构造函数实例。

直接用 typeof 和 === 就能快速区分,关键看类型标识和相等行为。
看 typeof 返回值
原始值返回对应的小写类型名;包装对象一律返回 "object":
-
typeof "abc"→ "string" -
typeof new String("abc")→ "object" -
typeof 42→ "number" -
typeof new Number(42)→ "object" -
typeof true→ "boolean" -
typeof new Boolean(true)→ "object"
用全等运算符 === 比较值
原始值与相同内容的包装对象永远不相等,因为一个是值,一个是引用:
-
"hello" === new String("hello")→ false -
123 === new Number(123)→ false -
false === new Boolean(false)→ false
检查是否为“真对象”(可添加属性)
原始值无法持久保存属性,包装对象可以(虽不推荐):
立即学习“Java免费学习笔记(深入)”;
-
let s = "hi"; s.test = 1; console.log(s.test)→ undefined -
let so = new String("hi"); so.test = 1; console.log(so.test)→ 1
用 instanceof 辅助判断
包装对象是对应构造函数的实例,原始值不是:
-
"abc" instanceof String→ false -
new String("abc") instanceof String→ true -
42 instanceof Number→ false -
new Number(42) instanceof Number→ true


















