一切皆对象
其他编程语言用栈储存原始类型,用堆储存引用类型,JavaScript 则完全不同:它是以一个变量对象追踪变量的生存期。原始值被直接保存在变量对象内,而引用值则作为一个指针保存在变量对象内,该指针指向实际对象在内存中的存储位置。
page 2
例如,所有的 JavaScript 对象都有一个方法 Object.prototype.valueOf()
,该方法返回指定对象的原始值。如果我们一个简单的赋值语句:
1 | var a = 1; |
那么我们会发现变量 a
上面其实有很多方法(当然,大部分都是来自于其原型)。这就是因为该变量是通过变量对象进行追踪的,并不仅仅只有一个值(这也涉及一个概念,“原始封装类型”)。这也是 JavaScript “一切皆为对象”的理念。