我经常看到,当一个函数需要在没有特定上下文的情况下使用绑定参数调用时,undefined
通常比null
更适合作为上下文的选择,如:
f.call(undefined, param1, param2)
优先于:
f.call(null, param1, param2)
我想知道这是否有任何特殊原因?
答案 0 :(得分:6)
绑定到
undefined
而不是null
的好处是什么?
我认为没有。来自10.4.3 Entering Function Code:
- 如果功能代码为strict code,请将ThisBinding设置为 thisArg 。
- 如果 thisArg null 或未定义,则将ThisBinding设置为全局对象。
- ...
醇>
因此,如果代码不严格,则在this
两种情况下都将设置为全局对象。
但如果代码严格,this
实际上将是null
或undefined
。可以实施f
来区分这些案例,但这对我来说似乎不太可能。
答案 1 :(得分:1)
在javascript中,undefined超出了尚未设置值的场景。例如,如果要在不存在的模型上查找属性,则会产生未定义的属性。
拥有这样的代码并不奇怪:
var k;
//做某事(可能设置k)
警报(K);
如果尚未设置该值,则它将是未定义的而不是null。
长话短说,它仍然是一个偏好,但是通过使用undefined,您更有可能捕获尚未初始化值的情况或尝试访问不存在的对象的属性。
不确定这会回答你的问题。