使用 Object.prototype.toString 函数和 undefined 和 null



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

在 Object.prototype.toString 的 MDN 参考页面中,它提到了

注意:从 JavaScript 1.8.5 开始,在空返回时调用 toString(( [对象 Null],未定义返回 [对象未定义],如 ECMAScript 第 5 版和随后的勘误表。

所以

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对象包装器(,那么为什么打印[object Null][object Undefined],而实际上null和undefined不是对象。

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

var a = undefined;
a.toString();

Chrome 会打印错误消息

Uncaught TypeError: Cannot read property 'toString' of undefined

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

undefined就是这样,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));

相关内容

  • 没有找到相关文章

最新更新