javascript - 将绑定对象设置为 `undefined` 而不是 `null` 有什么好处
我经常看到,当一个函数需要在没有特定上下文的情况下使用绑定参数调用时,undefined 通常比 null 更常被作为上下文的选择,例如:
f.call(undefined, param1, param2)
优先于:
f.call(null, param1, param2)
我想知道这是否有特别的原因?
答案#1
将绑定对象设为
undefined而不是null有什么好处?
我认为没有。从 10.4.3 输入功能代码开始:
- 如果函数代码是严格代码,将 ThisBinding 设置为 thisArg。
- 否则,如果 thisArg 为 null 或 undefined,则将 ThisBinding 设置为全局对象。
- ...
所以,如果代码不是严格模式,在这两种情况下 this 都会被设置为全局对象。
但是如果代码是严格的,this 实际上要么是 null,要么是 undefined。f 可以被实现来区分这些情况,但在我看来,这似乎不是一个很可能的情况。
答案#2
在 JavaScript 中,undefined 的概念超出了值尚未被设置的场景。例如,如果你在一个模型上寻找一个不存在的属性,它将返回 undefined。
有这样的代码也不奇怪:
var k;
// 做某事(可能是设置 k)
alert(k);
如果值尚未设置,它将是未定义,而不是空值。
长话短说,这仍然是一种偏好,但使用 undefined 更有可能捕捉到值未被初始化或尝试访问不存在的对象属性的情况。
不确定这是否回答了你的问题。