“条件” (? :) 运算符在 JavaScript 中是不是像在 C 中一样工作?
Posted
技术标签:
【中文标题】“条件” (? :) 运算符在 JavaScript 中是不是像在 C 中一样工作?【英文标题】:Does the "condition" (? :) operator work in JavaScript as in C?“条件” (? :) 运算符在 JavaScript 中是否像在 C 中一样工作? 【发布时间】:2011-05-06 18:44:06 【问题描述】:例子:
var x, y, z;
//...
x > 100 ? y = x : z = x ;
【问题讨论】:
【参考方案1】:这是一种不同的方法。您可以使用三元将变量选择为方括号内的字符串。
这个window
假定y
和z
是全局的。否则,您需要提供正确的上下文。
window[x > 100 ? 'y' : 'z'] = x;
【讨论】:
【参考方案2】:这应该会帮助你(将来):
https://developer.mozilla.org/en/javascript/Reference/Operators/Operator_Precedence
首先将评估 >
比较,因为它的优先级为 8。?:
的优先级为 15,低于 =
的 16。这意味着三元运算符将在任何赋值之前运行(即第一个操作数,条件,将被评估,然后只选择一个分支)。
也是一个简单的测试
//x = 50;
x = 200;
x > 100 ? y = x : z = x ;
alert((typeof y)+'|'+(typeof z));
会回答你的问题。
【讨论】:
【参考方案3】:是的,虽然运算符优先级总是很棘手,但它的工作原理是一样的,所以我建议使用括号以避免混淆。
切线相关..
您还可以在 JavaScript 中使用 ||
,类似于 C# 中的空合并运算符 ??
【讨论】:
【参考方案4】:是的,根据conditional operator Wikipedia 文章和ECMA-262 标准(请参阅第 11.12 节)。
【讨论】:
【参考方案5】:是的,三元运算符在 Javascript 中的工作方式与在 C、C++、C#、Java、Javascript、Perl 和 php 中的工作方式相同。
【讨论】:
【参考方案6】:是的,它的工作原理相同,因为它具有以下基本语法
condition ? true-expression : false-expression
它只计算表达式,因此处理由条件指定的表达式的副作用。
这是关于三元运算符的 Mozilla 文档的链接
https://developer.mozilla.org/en/JavaScript/Reference/Operators/Special/Conditional_Operator【讨论】:
【参考方案7】:我不确定这是否有效:
x > 100 ? y = x : z = x ;
但这有效:
y = x > 100 ? foo : bar ;
【讨论】:
测试过了。看起来它确实有效。var z = 0; var y = 0; var x = 10; x > 100 ? y = x : z = x;
你得到x:10, y:0, z:10
。
你的例子没有完成与原始代码相同的事情【参考方案8】:
是的,三元运算符的工作方式与in Javascript 相同。您的示例结合了很多表达式,因此 precedence 可能是一个问题。您应该用括号括起来以确保优先级。
【讨论】:
以上是关于“条件” (? :) 运算符在 JavaScript 中是不是像在 C 中一样工作?的主要内容,如果未能解决你的问题,请参考以下文章