【问题标题】:the || and NaN operator. How do they really work?||和 NaN 运算符。它们是如何真正工作的?
【发布时间】:2017-10-09 20:55:09
【问题描述】:

假设我有一个单词数组,我想使用一个对象来获取它的计数。我试过这个:

const results = {};

const words = ["word", "hello", "code", "five", "hello", "word", "new", "code"];

words.forEach( word => {
  results[word] = results[word] + 1 || 1;  
});

results 在这种情况下返回:

{ word: 2, hello: 2, code: 2, five: 1, new: 1 }

NaN === falsefalseresults[word] + 1 => NaN。我不太明白为什么结果不会是:

{ word: NaN, hello: NaN, code: NaN, five: NaN, new: NaN }

有人愿意解释吗? :)

【问题讨论】:

标签: javascript arrays object nan enumerable


【解决方案1】:

results[word]results 不包含word 时为undefined。虽然NaN === falsefalse,但它仍然是一个假值(!!NaNfalse)。

因此,results[word] + 1 || 1 = undefined + 1 || 1 = NaN || 1 = 1

【讨论】:

    【解决方案2】:

    undefined+1 = NaN

    results[word] = results[word] + 1 || 1;
    

    您正在将值初始化为 || (或)操作将默认值设置为 1 而不是 0。我解决此问题的方法是像这样包装条件:

    results[word] = (results[word] || 0)+1;
    

    【讨论】:

      猜你喜欢
      • 2013-08-16
      • 2011-02-19
      • 2017-03-01
      • 2015-02-27
      • 1970-01-01
      • 2021-12-07
      • 2016-10-25
      • 1970-01-01
      • 2020-01-29
      相关资源
      最近更新 更多