JavaScript语法:字符串分配语句中的内联Ifs

时间:2009-11-18 23:10:28

标签: javascript

我最近遇到过这个问题,并认为这会产生一个很好的问题。

假设您要将字符串分配给局部变量,并且希望通过简单条件对其进行更改。所以你在字符串中插入一个内联if语句:

var someCondition = true;
var url = "beginning-" + (someCondition)?('middle'):('other_middle') + "-end";

但是这不能按预期工作,url的值将是“中间”,而不是开始 - 中端。该语句产生预期结果:

var url = "beginning-" + ((someCondition)?('middle'):('other_middle')) + "-end";

为什么这会赢得令人垂涎的答案旗帜的最佳解释!

5 个答案:

答案 0 :(得分:9)

这当然与优先权有关。

var url = "beginning-" + (someCondition)?('middle'):('other_middle') + "-end";

被解释为:

var url = ("beginning-" + (someCondition)) ? ('middle') : (('other_middle') + "-end";)

答案 1 :(得分:4)

这是因为运营商的优先权。

第一个示例评估为:

if ("beginning-" + someCondition) {
  url = 'middle';
} else {
  url = 'other_middle' + "-end";
}

因为?运算符优先于+

答案 2 :(得分:1)

在第一个例子中,条件运算符的第三个操作数是:

('other_middle') + "-end"

您需要包装由条件运算符计算的表达式,并且BTW您不需要所有这些括号:

var url = "beginning-" + (someCondition ? 'middle' :'other_middle') + "-end";

检查运营商优先级的this table

答案 3 :(得分:0)

在我看来,这与运营商优先权有关。

Javascript正在解释如下语句:

IF ("beginning-" + (someCondition)) {
  'middle';
} else {
  'other middle' + "-end";
}

(“begin-”+(someCondition))将被连接成一个字符串(例如,“begin-1”),因为它不是null,所以它将被评估为布尔值True,因此结果将始终为'middle “

答案 4 :(得分:0)

如果条件也是值。

短手var x = y || z;也不应该被遗忘。

在这种情况下,我猜

var url = "beginning-" + (middle || 'middle_was_bad') + "-end";

对某些人有用。