带有对象的Javascript三元运算符
Posted
技术标签:
【中文标题】带有对象的Javascript三元运算符【英文标题】:Javascript ternary operator with object 【发布时间】:2015-01-22 15:59:46 【问题描述】:我遇到了一段我想弄清楚的代码,该代码基本上存储了一个单词在文本文档中出现的时间量,所以函数 countWordsIntext 接受所需的文本并显示文本中的单词和出现次数, 例如 会:3 但是:5 非常:6
在查看计算文本中单词的函数时,我无法弄清楚条件三元运算应该如何工作。非常感谢您的解释
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]
对象属性是如何更新的。
【问题讨论】:
这个代码?wordCounts[word] =....
也许换行符让你感到困惑。如果 wordCounts[word] 存在,则将其递增,否则将其设置为 1(因为它是一个新条目)。而且它不是一个数组,它是一个可以使用字典/数组类型语法访问成员的对象。
【参考方案1】:
说你有
var foo = ;
让你感到困惑的那一行
foo.bar = foo.bar ? foo.bar + 1 : 1; // line A
问问自己
-
开头的
foo.bar
是什么?它是未定义,我们没有给foo
一个属性bar
第一次执行 A 行后,foo.bar
是什么?是1
; foo.bar
是 undefined 这是 falsy 所以三元运算符返回给我们1
第二条时间线A执行后foo.bar
是什么?是2
; foo.bar
是 1
,这是 truthy,所以三元运算符返回了 foo.bar + 1
可以重复 A 行,直到你的数字用完或世界爆炸
这样写是解决undefined + 1
问题的一种方法,它会给出NaN
一个同样有效的解决方案(我觉得个人阅读更清晰)是这样做
foo.bar = (foo.bar || 0) + 1;
【讨论】:
以上是关于带有对象的Javascript三元运算符的主要内容,如果未能解决你的问题,请参考以下文章