JavaScript 三元运算符 - 条件是什么?

4

我阅读了一些关于三元运算符的SO论坛帖子,但我对这个示例仍然感到困惑:

var str = "I want to count";
var counts = {};
var ch, index, len, count;

for (index = 0; index < str.length; ++index) {
    ch = str.charAt(index); 
    count = counts[ch];
    counts[ch] = count ? count + 1 : 1; // TERNARY
}

我知道语法是condition ? expression1 : expression2

但我想练习并将三元运算符拆分成if-else。

我不知道条件应该是什么

counts[ch] = count // 这不是一个条件,它是在赋值...


count ? count + 1 : 1 - “我知道这个语法是条件?表达式1:表达式2” - 那么条件是 count 吗?赋值发生在表达式的结果,而不是表达式的一部分。 - David
所以你正在寻找与三元运算符等效的if/then/else语句? - j08691
如果(count)计数[ch] = 计数 + 1; 否则 计数[ch] = 1; 是等价的if else语句。这是你困惑的地方吗? - Ghassen Louhaichi
1
如果你有类似于counts[ch] = count + 1的东西,并且你说“我理解,加法由两个操作a + b组成”,那么你不会假设在这种情况下acounts[ch] = count,而只是count,那么为什么你认为条件是counts[ch] = count而不仅仅是count呢? - t.niese
count 不是 false,指的是非0、空值或未定义。 - zer00ne
2个回答

3
三元表达式
counts[ch] = count ? count + 1 : 1;

这个表达式中的条件不是counts[ch] = count,而只是count,并且等价于:
if (count){
    counts[ch] = count + 1;
}
else {
    counts[ch] = 1;
}

赋值表达式的右侧总是先被评估,counts[ch] 被分配为 count ? count + 1 : 1 的结果。

2

您混淆了三元运算符和赋值表达式。

代码如下

counts[ch] = count ? count + 1 : 1;

也可以写成

counts[ch] = (count ? count + 1 : 1);
// but not (counts[ch] = count) ? count + 1 : 1
// that does something entirely different

然后,编写匹配的if/else语句就变得非常清晰。
if (count) {
   counts[ch] = count + 1;
} else {
   counts[ch] = 1;
}

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接