关于JavaScript代码中if(freq[char])的含义及数组赋值疑问
代码疑问解答:
if(freq[char]) 含义与数组元素添加方式 先看你贴的这段去重代码,咱们逐个解答你的问题:
1. if(freq[char]) 的具体含义
首先得明确:这里的freq虽然声明为数组,但实际被当作**键值对容器(类似对象)**来用了——JavaScript里数组本质也是特殊的对象,支持用字符串作为“键名”来存值。
- 当某个字符
char第一次出现时,freq[char]这个键还不存在,它的值是undefined。在if判断里,undefined会被自动转为布尔值false,所以会进入else分支,把freq[char]设为1,同时把这个字符加入结果字符串。 - 当
char重复出现时,freq[char]已经被赋值为1(或者更大的数字),非零数字在布尔判断里会被转为true,所以进入if分支,把计数加一,同时打印重复提示。
简单说,这个判断就是在检查当前字符是否已经被记录过。
2. 为什么不用push()就能给数组“添加元素”
其实这里不是在给传统意义上的数组加元素,而是在给数组对象添加属性。
JavaScript的数组是特殊的对象:
push()方法是用来给数组添加数字索引的元素(比如freq.push(1)会把1存在freq[0]的位置)。- 但你可以像操作普通对象一样,直接给数组赋值自定义的字符串键(比如
freq['a'] = 1),这本质是给数组对象新增了一个属性,不是传统数组的索引元素,但因为数组本身是对象,所以允许这么做。
这段代码里的freq其实更适合用普通对象{}来声明,用数组只是利用了JS数组的对象特性,写法上没问题,但语义上用对象更准确。
完整代码回顾
function removeDupl(arg) { var answer = ""; var freq = []; for (i = 0; i < arg.length; i++) { let char = arg[i] if (freq[char]) { freq[char]++ console.log("Duplicate:"+ char) } else { freq[char] = 1 answer = answer + char console.log("not a duplicate:"+char) } } return answer; }
内容的提问来源于stack exchange,提问作者Nina Mishchenko
相关产品推荐
相关产品推荐

