if(x){foo();和x? foo():0;

时间:2010-12-02 22:28:50

标签: javascript

摘录1:

if ( x ) { 
    foo();
}

摘录2:

x ? foo() : 0;  

这两个片段有什么区别?

修改:更正了语法错误。

更新:顺便说一下,似乎还有更短的符号:

x && foo();

3 个答案:

答案 0 :(得分:8)

Snippet#2是一个无效的ECMAScript表达式,因为它缺少必需的: blah以使其成为三元组。

编辑:两个片段之间没有什么区别,如果foo是真的,他们都会调用x。如果x是假的(undefined / false / empty string / 0 /),那么第一个代码段将不会评估为任何内容,后一个代码段将评估为0,但0确实没有影响在剧本上。

答案 1 :(得分:3)

我认为您打算问以下

// Why should I use
if (x) {
  do();
}

// instead of 
x && do();

// Why should I use
if (x) {
  do(); 
} else {
  dont();
}

//instead of 
x ? do() : dont()

在编写时,输出没有区别。我不喜欢使用三元或&&在这些情况下,运算符由于使用三元和&&的语义。三元组会返回您未使用的值,&&和&表达。因此,我宁愿使用语言打算使用运算符的方式。

然而,我喜欢使用&&用于空检查

var val = obj && obj.getValue();

请注意,在这种情况下,我们使用表达式的返回值

答案 2 :(得分:1)

通常,if是一个语句(例如,您不能将它分配给变量),三元运算符?:是表达式的一部分(产生一个可以赋给变量的值)

此外,if块可以包含语句,而?:的组件只能包含表达式。

在您给出的示例中,没有区别,因为您不使用?:的结果。 只有当x是真值时,两个片段才会评估foo()