原始值包装类型
boolean、number、string是三种特殊的引用类型
包含这三种原始值的变量并不是对象,但是它们却可以调用相应的方法,这是因为后台做了一些处理
let s1 = "some text";
let s2 = s1.substring(2); //原始值却调用了方法
以上代码,当第二行访问s1时,是以读模式访问的,也就是从内存中读取变量保存的值。
此时后台会执行以下3步骤:
- 创建一个string类型的实例
- 调用实例上的特定方法
- 摧毁实例
可以想象为一下的代码:
let s1 = new String("some text");
let s2 = s1.substring(2);
s1 = null;
引用类型与原始值包装类型的主要区别在于对象的生命周期
自动创建的原始值包装对象则只存在于访问它的那行代码执行期间
这意味着不能在运行时给原始值添加属性和方法
let s1 = "some text";
s1.color = "red";
console.log(s1.color); // undefined
代码执行到第二行时临时创建了一个string对象,但是到第三行的时候这个对象就被销毁了
第三行的代码创建了自己的临时对象,这与第二行的临时对象完全不同,所以没有color属性
global
大多数ECMAScirpt中无法直接访问,但是浏览器将其实现为window对象。
所有全局变量和函数都是global对象的属性。