我知道,根据ECMAScript规范,如果将null
或undefined
传递给非严格方法,则将thisArg转换为全局对象。这就是这段代码记录window对象(在浏览器中)而不是null的原因:
function x() {
console.log(this);
}
x.call(null);
我不明白的是,为什么用Object.prototype.toString.call(null)
做同样的事情,不会将null
转换为全局对象,而是将其保留为null
并返回字符串[object Null]
。
是因为'use strict'
在toString
方法的默认实现中使用吗?是否每个内置方法都在严格模式下运行?
我在说明书中找不到这样的东西https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.prototype.tostring.
是否每个内置方法都在严格模式下运行?
是的。在§10.3内置函数对象中是这样说的:
">作为ECMAScript函数对象的内置函数必须是严格函数。">
这不仅意味着不草率地处理this
参数,而且还意味着这些函数没有.arguments
,.callee
和.caller
属性。