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

Why is toString always running in strict mode?

我知道根据 ECMAScript 规范,非严格方法将 thisArg 转换为全局对象,如果 nullundefined 被传递给他们。 这就是此代码记录 window 对象(在浏览器中)而不是 null:

的原因
function x() {
    console.log(this);
}
x.call(null);

我不明白的是,为什么用 Object.prototype.toString.call(null) 做同样的事情,不会将 null 转换为全局对象,而是将其保留为 null 和 returns 字符串 [object Null].

是不是因为'use strict'默认实现了toString方法? 每个内置方法 运行 都是严格模式吗?

我在规范 a https://tc39.es/ecma262/multipage/fundamental-objects.html#sec-object.prototype.tostring 中找不到类似的内容。

Is every built-in method run in strict-mode?

是的。它在 §10.3 Built-in Function Objects:

中这样说

"ECMAScript 的内置函数 function objects must be strict functions"

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