处理JavaScript中undefined-和null-parameters之间的区别

Jak*_*kob 15 javascript

我非常清楚,在JavaScript中,null和undefined是不同的.但是,当我自己的函数被传递给其中一个作为其参数时,我似乎无法决定是否使用该事实.

或者,以不同的方式表达,应该myFoo(undefined)返回相同的东西myFoo(null)

或者,在另一种情况下,既然myBar(1, 2, 3)(几乎)是相同的myBar(1, 2, 3, undefined, undefined),应该myBar(1, 2, 3, null, null)返回相同的东西myBar(1, 2, 3)

我觉得在这两种情况下都存在混淆的可能性,并且在处理null/undefined时,库应该遵循约定.

我并不是真的要求个人意见(所以请将其表达为评论而非答案).我问是否有人知道在处理这种区别时是否应该坚持最佳做法.非常欢迎参考外部资源!

Ben*_*ank 11

我想说的是,虽然,大部分的时候,有两个区分价值不大,那里的情况值往往是相当有趣的.

举个例子,一个可以给出回调的函数. undefined可能表示应该使用某些默认回调(就好像没有指定参数),但null可能表明根本不应该进行回调:

function asyncWorker(data, callback, timeout) {
    if (typeof callback === "undefined") {
        callback = function() { $("#log").append("<p>Done!</p>"); };
    }

    // ...

    if (callback) callback();
}

asyncWorker([1, 2, 3]); // default callback, no timeout
asyncWorker([4, 5, 6], null); // no callback, no timeout
asyncWorker([7, 8, 9], undefined, 10000); // default callback, 10s timeout
Run Code Online (Sandbox Code Playgroud)

当然,false或者0可以代替null这里使用,但在更复杂的例子中可能不是这种情况.您的代码是否受益于额外的参数复杂性完全取决于您.:-)