除对象之外,JavaScript有5个原始值类型:布尔值、数字、字符串、null和undefined。同时标准库提供了构造函数来封装布尔值、数字和字符串作为对象。你可以创建一个String对象,String对象是真正的对象。
var s = new String("hello");s + " world"; // hello worlds[4]; // "o"typeof "hello"; // "string"typeof s; // "Object"复制代码
由于每个String对象都是一个独立的对象,其总是只等于自身。
var s1 = new String("hello");var s2 = new String("hello");s1 == s2; // falses1 === s2; // false复制代码
当对原始值提取属性和进行方法调用时,它表现得就像已经使用了对应的对象封装了该值一样。
"hello".toUpperCase(); // "HELLO"复制代码
你可以对原始值设置属性,但是对其丝毫没有影响。
"hello".someProperty = 17;"hello".somProperty; // undefined复制代码
每次隐式封装都会产生一个新的String对象,更新第一个封装对象并不会造成持久的影响。对原始值设置属性是没有意义的。
提示
- 当做相等比较时,原始类型的封装对象与其原始值行为不一样。
- 获取和设置原始类型值的属性会隐式地创建封装对象。