为什么toString在严格模式下总是运行?
Why is toString always running in strict mode?
我知道根据 ECMAScript 规范,非严格方法将 thisArg 转换为全局对象,如果 null
或 undefined
被传递给他们。
这就是此代码记录 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
属性。
我知道根据 ECMAScript 规范,非严格方法将 thisArg 转换为全局对象,如果 null
或 undefined
被传递给他们。
这就是此代码记录 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
属性。