代码片段1:
if ( x ) {
foo();
}
代码片段 2:
x ? foo() : 0;
这两个片段有什么区别?
编辑:已更正语法错误。
更新:顺便提一下,似乎还有一种更短的符号表示方法:
x && foo();
代码片段1:
if ( x ) {
foo();
}
代码片段 2:
x ? foo() : 0;
x && foo();
片段 #2 是一个无效的 ECMAScript 表达式,因为它缺少必需的 : blah
以使其成为三元表达式。
编辑:这两个片段实际上没有区别,它们都会在 x
为真值时调用 foo
。如果 x
为假值(未定义/假/空字符串/0),那么第一个片段不会评估任何东西,而后者将评估为 0
,但是该 0
对脚本没有任何影响。
我认为你想问的是以下内容
// 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();
x && foo();
而不是 if (x) { foo(); }
。我会记住的。 :) - Šime Vidasif
是一个语句(例如,您不能将其分配给变量),而三元运算符?:
是表达式的一部分(产生可以分配给变量的值)。if
块可以包含语句,而?:
的组件只能包含表达式。?:
的结果。两个片段仅在x为真值时评估foo()
。
x ? foo() : bar()
,并且这些函数没有返回任何值。它是否符合ECMA标准,因为它实际上的值是undefined
? - Martin Algestenundefined
而不会出错。只有在尝试使用值undefined
时才会崩溃。 - cdhowie