推荐的方法来发现已声明的未定义变量

时间:2012-02-08 21:19:27

标签: javascript

对于已经在javascript中声明的检测未定义变量,至少有两种不同的方式。

var bar; // declared variable

if (typeof bar !== "undefined") {
     // make something with bar
}

if (bar) {
     // make something with bar
}

我的问题:

1)两方面在所有方面都是相同的吗?

2)如果不是最好的那个?

5 个答案:

答案 0 :(得分:2)

不,他们不平等。如果变量为false或falsy ,则if(bar)也将失败。将第一种方法与typeof

一起使用

答案 1 :(得分:2)

除了未定义的变量之外,

if (bar) {将返回false。

例如,如果bar为0,那么if(bar)将评估为false。值为false的栏也将评估为false。

答案 2 :(得分:1)

我认为这是程序员偏好,但我不喜欢未定义的变量。如果它们未定义,我将为它们分配一些值。

如果您的情况是变量是对象的引用,或者它尚未引用:

var my_ref; // undefined

function ref(that_obj) {
    my_ref = that_obj;
}

console.log(my_ref);    // undefined
ref({"some": "object"});
console.log(my_ref);    // {"some": "object"}

我的偏好是将其初始化为false。如果false永远不是预期值,那么这仅适用。要使用的其他值为-1或数字null

另一个例子:

function my_func(arg1, arg2, arg3) {
    if (has_no_value(arg3)) {
        arg3 = "default value";
    }
    console.log(arg1, arg2, arg3);
}
my_func("first", "lol");    // first lol default value

另外,我建议创建一个检查undefined-ness(在我的情况下为has_no_value)的函数,因为在typeof arg3 === "undefined"中很容易出错

如果arg3为 falsy ,则

if(arg3)为false,其中包含undefined null 0 "" false NaN

如果您想查看falseif (false === arg3)

  

类型强制在JavaScript中与==和!=运算符一起使用。从   维基百科:“有两种类型的转换:隐式和   明确。隐式类型转换的术语是强制。最多   显式类型转换的常见形式称为铸造。“什么   这意味着在它们之前将true和false转换为数字   与一个数字进行比较。与以下任何值进行比较时:0,   在JavaScript中,null,undefined,'',true和false, Douglas Crockford :   好的部件,建议使用===或!==运算符。在   JSLint,有一个“Disallow ==和!=”选项,需要使用   在所有情况下都是===和!==。

答案 3 :(得分:0)

第二个是测试虚假值,这些值不一定表示未定义。

答案 4 :(得分:0)

考虑一下:

var bar;
bar = 0; 
alert (typeof bar !== "undefined")  // alerts true
alert(bar == true) // alerts false