2

我知道根据 ECMAScript 规范,非严格方法会将thisArg转换为全局对象,如果null或被undefined传递给它们。这就是此代码记录窗口对象(在浏览器中)而不是 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

4

1 回答 1

5

每个内置方法都在严格模式下运行吗?

是的。它在§10.3 内置函数对象中这么说:

“作为 ECMAScript函数对象的内置函数必须是严格函数

这不仅意味着对this参数的非草率处理,而且这些函数没有.arguments,.callee.caller属性。

于 2021-09-26T12:55:14.927 回答