根据http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf ,
JavaScript 有 6 种类型:undefined
、null
、boolean
、string
、number
和对象
。
var und;
console.log(typeof und); // <-- undefined
var n = null;
console.log(typeof n); // <--- **object**!
var b = true;
console.log(typeof b); // <-- boolean
var str = "myString"
console.log(typeof str); // <-- string
var int = 10;
console.log(typeof int); // <-- number
var obj = {}
console.log(typeof obj); // <-- object
问题 1:
为什么object
类型是null而不是null
?
问题2:
函数呢?
var f = function() {};
console.log(typeof f); // <-- function
变量f
的类型为function
。为何规范中没有明确说明
作为一个单独的类型?
谢谢
最佳答案
关于typeof null == 'object'
,这是一个很早就出现的错误,不幸的是这个错误会伴随我们很长一段时间,它是too late将在 ECMAScript 第 5 版 版本规范中修复。
关于函数,它们只是对象,但它们有一个特殊的内部属性,名为 [[Call]]
调用函数时在内部使用。
typeof
运算符仅通过检查对象是否具有此内部属性来区分普通对象和函数。
关于JavaScript 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2518276/