Javascript:检查条件语句哪种方式更好?

时间:2017-02-20 08:51:03

标签: javascript

在javascript中,哪个是更好的方法来检查条件语句的性能,健壮性,哪种是最佳实践?

var x = null;
// this condition is checked frequently and x will be set to null or some value accordingly
if(x !== null){...}
 OR
if(!!x){...}

4 个答案:

答案 0 :(得分:4)

你可以做到

if (x) { ... }

简单地说,如果x是一个真正的价值。

尼娜指出。我总是会添加一些额外的验证,具体取决于我的期望。

if (x && x > 0) { ... }

if (x && x instanceof Array)

但我总是在检查x有某种价值,而不是undefinednull

答案 1 :(得分:1)

从来没有必要写if(!!x){...}。这与写if(x){...}完全相同。使用!运算符两次将一个值转换为一个布尔值,反映它是否是" truthy"或不。但是if语句无论如何都会这样做:它会测试你提供的价值是否是"真实的"。因此,无论您是否使用!!,它都会做同样的事情。

if(x !== null){...}完全是另一回事。它并不仅仅检查x是否是"真实的",它专门将x的值与null进行比较。例如,如果x的数值为0,则if(x){...}if(!!x){...}执行...代码,因为{ {1}}是一个" falsy"值,但0 执行if(x!==null)代码,因为...0的值不同。

相关示例是nullif(x!=null){...}。 (请注意使用if(x==null){...}!=代替==!==。)这是JavaScript中的一个特例。当您使用===null运算符与!=进行比较时,它实际上会与==null进行比较,并将这两个值视为相同。换句话说,如果undefined xnull,则undefined将执行if(x==null){...}代码,但... 1}}不会执行if(x!=null){...}代码。

通常建议您避开...==运算符,并使用严格比较!====代替!==并且null在某些情况下同样有用,所以这是非严格操作符有用的情况。

无论如何,要问的真正问题是你的代码的目的是什么,你需要在这里测试什么?

答案 2 :(得分:1)

假设您需要检查strict inequality !==null

的值
  

经常检查这个条件,x将被设置为null或相应的值

if (x !== null) { /* */ }

然后你只能使用上面的比较。任何其他比较都会返回错误的结果。

例如



var x = 0;

if (x !== null) {                 // true
    console.log(x + ' !== null');
}

if (x) {                          // false
    console.log(x);
}

// some more checks
console.log(undefined !== null); // true
console.log(undefined != null);  // false




答案 3 :(得分:0)

编辑:在我与Nina Scholz的对话中,我在她对这个帖子的回应中得知,我的反应非常错误。我相应地更新了。

根据您希望使用的类型,有许多方法可以检查值。因此,问题不在于性能,而在于正确的评估。从您的示例开始:

if(x != null)

如果x的值为false或“未定义”,则评估为null

下一个案例:

if(!!x)

这是一个完全不同的操作。它将x的值转换为布尔值,并且在大多数情况下if(x)将以相同的方式工作。但是现在,如果值为falsy,如0,即空字符串,则表达式返回false。所以,如果期望一个数字,你应该检查零值:

if(x || (0 === x))

请记住,如果x不是int,则表达式返回true。

你期望一个字符串的情况:

if(x || ('' === x))

同样的事情,如果x是12,表达式返回true。

我可以继续做很多例子。不幸的是,某些表达方式以意想不到的方式运行。例如,通过调用isNaN(number)来检查值是否为数字应该很容易,但如果值是空字符串或数组索引的表示('2'),则isNaN返回false 。

我建议您检查this table所有类型转换,以便您更加了解如何检查值的有效性。