2

为什么在 ES5 非严格模式下会出现以下结果?

Object.prototype.toString.call(null);
=> [object Null]

鉴于

Object.prototype.toString.call(window);
=> [object global]

在非严格模式下这两行不应该是相同的,因为someFunction.call(null)应该等于someFunction()which 应该等于someFunction.call(window)?

4

1 回答 1

4

根据 ES5,在非严格模式下输入函数代码时:

否则,如果 thisArg 为 null 或未定义,则将 ThisBinding 设置为全局对象。

所以是的,似乎this应该默认为全局对象。§15.3.4.4 Function.prototype.call中有:

thisArg 值作为 this 值不加修改地传递。这是对第 3 版的更改,其中 undefined 或 null thisArg 被替换为全局对象,并且 ToObject 应用于所有其他值,并且该结果作为 this 值传递。

最后:

15.2.4.2 Object.prototype.toString()

当调用 toString 方法时,会执行以下步骤:

If the this value is undefined, return "[object Undefined]".
If the this value is null, return "[object Null]".
于 2012-10-31T06:29:42.700 回答