本节书摘来自异步社区《JavaScript启示录》一书中的第1章,第1.11节,作者:【美】Cody Lindley著,更多章节内容可以访问云栖社区“异步社区”公众号查看
1.11 原始值(String、Number、Boolean)在被用做对象时就像对象
原始值被当作构造函数创建的一个对象来使用时,JavaScript会将其转换为一个对象,以便可以使用对象的特性(如方法),而后抛弃对象性质,并将它变回到原始值。下面的代码采用了原始值,并展示了将值作为对象使用时会发生什么事情。
<!DOCTYPE html><html lang="en"><body><script>
// 生成原始值
var myNull = null;
var myUndefined = undefined;
var primitiveString1 = "foo";
var primitiveString2 = String('foo'); // 没有使用new因此获得的是原始值
var primitiveNumber1 = 10;
var primitiveNumber2 = Number('10'); // 没有使用new,因此获得的是原始值
var primitiveBoolean1 = true;
var primitiveBoolean2 = Boolean('true'); // 没有使用new,因此获得的是原始值
/* 使用toString()方法(从object.prototype继承而来)来演示:当把原始值用作对象时,原始值就会转化成对象 */
// 输出 "string string"
console.log(primitiveString1.toString(), primitiveString2.toString());
// 输出 "number number"
console.log(primitiveNumber1.toString(), primitiveNumber2.toString());
// 输出 "boolean boolean"
console.log(primitiveBoolean1.toString(), primitiveBoolean2.toString());
// 因为null和undefined没有转化成对象,也没有构造函数,所以下面2条语句会抛出错误
console.log(myNull.toString());
console.log(myUndefined.toString());
</script></body></html>
上述代码示例中,所有的原始值(除null和undefined)都被转换为对象,以便充分利用toString()方法。一旦调用和返回该方法,对象就会转换成原始值。