我在几天前问了一个关于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);
这可能是错误吗?即使我知道我们应该疯狂地重新分配未定义的值 - 对于最受欢迎的库我认为它可能会导致一些错误......
谁是正确的方式?
答案 0 :(得分:12)
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在许多情况下需要这样做以确定哪些可选参数是否传递给各种函数是完全可以的。