Javascript三元运算符与对象

时间:2014-11-24 20:11:50

标签: javascript arrays conditional-operator

我遇到了一段我想弄清楚的代码,代码基本上存储了一个单词出现在文本文档中的时间,因此函数 countWordsIntext 会在所需文本并显示文本中的单词和出现次数, 例如 会:3 但是:5 非常:6

在查看对文本中的单词进行计数的函数时,我无法弄清楚有条件的tenary操作应该如何工作。非常感谢解释

var wordCounts = {};

 function countWordsInText(text) {
    var words = text.toString()
                .toLowerCase()
                .split(/\W+)
                .sort();
    for(var index in words) {
    var word = words[index];
    if(word) {
     wordCounts[word] =
        (wordCounts[word]) ? wordCounts[word] + 1 : 1;
       }
   }
} 

function display()
{
  for (var index in wordCounts)
   console.log(index + ': ' + wordCounts[index]);
}

我不明白wordCounts[word]对象属性是如何更新的。

1 个答案:

答案 0 :(得分:4)

说你有

var foo = {};

让你感到困惑的一句话就是

foo.bar = foo.bar ? foo.bar + 1 : 1; // line A

问问自己

  1. 一开始是foo.bar是什么?它是未定义,我们没有给foo一个属性 bar
  2. 第一次执行A行后foo.bar是什么?它是1; foo.bar 未定义 falsy ,因此三元运营商向我们提供了回复1
  3. 第二个时间线A执行后foo.bar是什么?它是2; foo.bar 1为{em> truthy ,因此三元运营商将我们送回foo.bar + 1
  4. A行可以重复,直到你的数字用完或世界爆炸

    像这样写这是一种解决undefined + 1问题的方法,这会给NaN


    一个同样有效的解决方案(我觉得个人阅读起来有点干净)就是

    foo.bar = (foo.bar || 0) + 1;