为什么以下是ES5非严格模式的结果?
Object.prototype.toString.call(null);
=> [object Null]
鉴于
Object.prototype.toString.call(window);
=> [object global]
两条线在非严格模式下不应该相同,因为someFunction.call(null)
应该等同于someFunction()
,它应该等同于someFunction.call(window)
吗?
答案 0 :(得分:4)
根据ES5,entering function code处于非严格模式时:
否则如果thisArg为null或未定义,则将ThisBinding设置为全局对象。
所以是的,似乎this
应该默认为全局对象。 但在§15.3.4.4 Function.prototype.call中有:
thisArg值未经修改即作为此值传递。这是对第3版的更改,其中未定义或null thisArg替换为全局对象,ToObject应用于所有其他值,并将结果作为此值传递。
最后:
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]".