【发布时间】:2023-04-01 02:43:01
【问题描述】:
在他的 Eloquent Javascript 中,Haverbeke 声称(第 16 页):
“在 JavaScript 系统中,大部分数据都被整齐地划分为称为值的东西。每个值都有一个类型,这决定了它可以扮演的角色。有六种基本类型的值:数字,字符串、布尔值、对象、函数和未定义的值。”
Javascript: The Good Parts 中的 Crockford 说:
“JavaScript 的简单类型是数字、字符串、布尔值(true 和 false)、null 和 undefined。所有其他值都是对象。数字、字符串和布尔值类似于对象,因为它们具有方法,但它们是不可变的。JavaScript 中的对象是可变键集合。在 JavaScript 中,数组是对象,函数是对象,正则表达式是对象,当然,对象也是对象。”
现在,至少在 V8 下我明白了:
> typeof function(){};
'function'
> typeof {};
'object'
我不明白对象是类型而函数是对象还是函数和对象都是类型。我想我错过了原始类型和其他类型(复合类型?)之间的区别。
【问题讨论】:
-
JS 中的一切都是对象。这就像说正方形是长方形,但长方形不是正方形。
-
@Derek:并非全部。 JS 有原语(非对象),其中一些有一个对象“包装器”,但不是全部。
-
最容易将函数视为一种特殊类型的对象,就像数组是一种特殊类型的对象一样。它们具有对象的功能,但也具有使它们成为不同类型对象的其他功能。
标签: javascript