jquery代码中的未定义变量

时间:2011-08-21 20:52:52

标签: jquery

我在几天前问了一个关于javascript中未定义值的问题。 (What is the best way to compare a value against 'undefined'?) 我的结论是,执行!== undefined是一种不好的做法,因为undefined可以设置为“另一个”值。

undefined='foo';
var b;
(b !== undefined) // true

我快速浏览了一下jquery代码,我意识到在每一部分中,作者都​​使用!== undefined而不是typeof var !== "undefined"

// Setting one attribute
if ( value !== undefined ) {
// Optionally, function values get executed if exec is true
    exec = !pass && exec && jQuery.isFunction(value);

这可能是错误吗?即使我知道我们应该疯狂地重新分配未定义的值 - 对于最受欢迎的库我认为它可能会导致一些错误......

谁是正确的方式?

2 个答案:

答案 0 :(得分:12)

jQuery代码中的

undefined实际上是包装整个代码的函数的未定义参数:

(function(window, undefined) {
    // jQuery code here
    // undefined is the undefined parameter
}(window)); // notice we don't pass a second argument here

这是非常安全的,因为undefined参数是函数的本地参数,除此函数中的代码之外的任何人都无法分配给它。

使用更清晰的语法:

var myFunc = function(window, undefined) {
    // jQuery code here

    // The undefined variable is the undefined parameter

    // If the function has been called without a second argument,
    // then the undefined parameter is undefined.
};
myFunc(window); // no second argument

答案 1 :(得分:1)

如果你将undefined重新分配给其他东西并且你希望使用一个大型图书馆,那么就我而言,你得到了你应得的东西。测试变量是否为undefined并且jQuery在许多情况下需要这样做以确定哪些可选参数是否传递给各种函数是完全可以的。