对带条件的 For/Over 循环的说明

阅读 O'Reilly 的 JS 权威指南,发现了这段代码:


let freq = {};

for (let item of "alabama") {

   if (freq[item]) {

     freq[item]++;

  } else {

     freq[item] = 1; 

 } 

}

只想复习一些语法和含义:

  1. 将空对象分配给“freq”变量

  2. 在给定的字符串上运行 for/of 循环

  3. If 语句检查 freq[item] 是否返回 true .. 我明白了那部分但是什么会触发那个 truthy 值?

  4. 那么如何触发虚假值以产生值 1 呢?

预先感谢!


慕村225694
浏览 89回答 3
3回答

拉风的咖菲猫

首先,请记住,在使用 迭代字符串时for..of,为每个循环声明的项目(您已命名为item)是字符串的每个字符。由于该对象一开始是空的,freq[item]因此最初是undefined. 例如,在第一次迭代中,{}['a']isundefined是假的,因此else输入:freq['a'] = 1;a在随后的迭代中,当找到该字符时,该a属性将存在于对象上,因此if输入 ,增加该属性值:freq['a']++;

汪汪一只猫

第一次发现不在对象中的字母时,它将返回 undefined1) a    freq['a'] will be undefined     therefore the code will set a 1 to it     freq['a'] = 12) l will go through the same steps as #13) a     freq['a'] will be 1     so it's truthy therfore we add 1 to it     freg['a'] ++; which will make it 2然后你可以按照相同的模式找出其余的

倚天杖

在 javascript 中以下是错误的 "",false,0,undefined,null..在你的情况下 freq 是一个空对象freq ={}在循环的第一次迭代中item = 'a'freq[item]freq[item]如果在 else 中是false 这样,则将是未定义的freq[item] = 1。 第二次迭代第三次迭代freq={a:1} 的方法相同 freq={a:1,l:1}item = 'a'freq[item]将是1 iffreq[item]将是真实的并且递增freq={a:2,l:1}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

JavaScript