【发布时间】:2011-05-19 10:42:28
【问题描述】:
片段 1:
if ( x ) {
foo();
}
片段 2:
x ? foo() : 0;
这两个sn-ps有什么区别?
编辑:更正了语法错误。
更新:顺便说一句,似乎还有一个更短的符号:
x && foo();
【问题讨论】:
标签: javascript
片段 1:
if ( x ) {
foo();
}
片段 2:
x ? foo() : 0;
这两个sn-ps有什么区别?
编辑:更正了语法错误。
更新:顺便说一句,似乎还有一个更短的符号:
x && foo();
【问题讨论】:
标签: javascript
片段 #2 是无效的 ECMAScript 表达式,因为它缺少必需的 : blah 以使其成为三元组。
编辑:这两个 sn-ps 之间并没有真正的区别,如果 x 是真的,它们都会调用 foo。如果x 是假的(未定义/假/空字符串/0/),那么第一个 sn-p 将不会计算任何东西,后一个 sn-p 将计算为 0 但 0 确实对脚本。
【讨论】:
x ? foo() : bar() 并且函数没有返回任何内容。它是否是 ECMA 有效的,因为它实际上是值 undefined?
undefined 而不会出错。当您尝试使用值undefined时,您就会崩溃。
通常,if 是一个语句(例如,您不能将其分配给变量),而三元运算符 ?: 是表达式的一部分(产生一个可以分配给变量的值)。
另外,if 块可以包含语句,而?: 的组件只能包含表达式。
在您给出的示例中,没有区别,因为您不使用?: 的结果。
仅当 x 为真值时,两个 sn-ps 才会评估 foo()。
【讨论】:
我想你是想问以下问题
// 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(); }。我会记住的。 :)