我目前正在学习javascript的Object.prototype.toString
方法。使用Object.prototype.toString函数与undefined和null
在MDN reference page on Object.prototype.toString,它提到
注:在JavaScript开始1.8.5的toString()称为上的空返回 [对象空],和未定义返回[对象未定义],如在 定义第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]
但我认为两者null
和undefined
是原始类型没有相应的包装类型(不像例如string
原语类型和String
对象包装),那么,为什么打印[object Null]
和[object Undefined]
在当事实上,null和undefined都不是对象。
还有,我想用代码等Object.prototype.toString.call(a)
,它是相同的a.toString()
(即使用a
作为this
内部toString()
功能),但是当我试图
var a = undefined;
a.toString();
铬输出错误消息
Uncaught TypeError: Cannot read property 'toString' of undefined
我的想法是undefined
没有以任何方式与Object.prototype
原型链接,这就是为什么a.toString()
失败,bu t怎么样Object.prototype.toString.call(a)
成功了?
'undefined'和'null'不能访问'.'。 'Object.prototype'可以。 – 4castle
只是因为一个值是原始的并不意味着它不能作为函数的'this'值传递。尝试做'Object.prototype.toString.call(1)' – 4castle
我想它错误考虑'Object.prototype.toString.call(a)',其中'a'可以是任何东西,等同于'a.toString( )'。也许把Object.prototype.toString.call(a)设置为Object.prototype.toString函数的内部'this'属性为'a'更准确。 – Thor