为什么toString总是在严格模式下运行?



我知道,根据ECMAScript规范,如果将nullundefined传递给非严格方法,则将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属性。

最新更新