使用带有undefined和null

时间:2017-07-21 00:36:36

标签: javascript object types null undefined

我目前正在研究javascript的Object.prototype.toString方法。

MDN reference page on Object.prototype.toString中,它提到了

  

注意:从JavaScript 1.8.5开始toString()调用null返回   [object Null]和undefined返回[object Undefined],如中所定义   第5版ECMAScript和随后的勘误表。

所以

var a = undefined;
Object.prototype.toString.call(a); //chrome prints [object Undefined]

var b = null;
Object.prototype.toString.call(b); //chrome prints [object Null]

但我认为nullundefined都是原始类型,没有相应的包装类型(不像例如string基本类型和String对象包装器),所以为什么{实际上null和undefined不是对象时打印{1}}和[object Null]

而且,我想像[object Undefined]这样的代码,它与Object.prototype.toString.call(a)相同(即使用a.toString()作为a this函数内部的toString() ,但是当我尝试

var a = undefined;
a.toString();

Chrome会输出错误消息

Uncaught TypeError: Cannot read property 'toString' of undefined

我的想法是undefinedObject.prototype没有任何原型关联,这就是a.toString()失败的原因,但Object.prototype.toString.call(a)怎么会成功?

1 个答案:

答案 0 :(得分:1)

undefined就是那样,未定义。 Null被视为一个对象,但不会继承全局对象的任何方法。

你可以在它们上面调用Object.prototype.toString.call而不是undefined.toString或null.toString的原因是第一个是简单的函数调用。第二个是尝试调用一个既没有的对象方法。根据Mozilla的说法,typeof null会因“遗留原因”返回对象。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/null

var a;
console.log(typeof a);
console.log(Object.prototype.toString.call(a)); //chrome prints [object Undefined]
console.log(typeof Object.prototype.toString.call(a));

var b = null;
console.log(typeof b);
console.log(Object.prototype.toString.call(b)); //chrome prints [object Null]
console.log(typeof Object.prototype.toString.call(b));