JavaScript类型

Ale*_*yuv 24 javascript ecma262

按照http://www.ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf,JavaScript有6种:undefined,null,boolean,string,numberobject.

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
Run Code Online (Sandbox Code Playgroud)

问题1:

为什么类型为null object而不是null

问题2:

功能怎么样?

var f = function() {};
console.log(typeof f); // <-- function
Run Code Online (Sandbox Code Playgroud)

变量的f类型function.为什么在规范中没有将其指定为单独的类型?

谢谢,

CMS*_*CMS 13

关于typeof null == 'object',这是从早期开始的一个错误,不幸的是这个错误将在我们这里停留很长时间,在ECMAScript第5版规范中修复已经太晚了.

关于函数,它们只是对象,但它们有一个特殊的内部属性[[Call]],在调用函数时在内部使用.

typeof刚刚通过检查此对象是内部属性平原对象和功能之间操作者区分.


ken*_*ytm 5

这是因为typeof如果输入是null,则定义为返回"object" ,如果输入是可调用的,则返回"function".(见11.4.3 typeof运营商.)

我不知道为什么标准是这样定义的(Crockford说这是错的).也许向后兼容.