gpt4 book ai didi

javascript - vanilla Javascript,附加赋值运算符的误解

转载 作者:行者123 更新时间:2023-12-01 01:28:19 25 4
gpt4 key购买 nike

据我了解,额外的赋值运算符只是缩短了我们递增值的方式,例如,我们不使用 x = x + 1 ,而是使用 x += 1,现在,这是一个例子,说明这种方法没有按预期对我起作用。我想循环遍历给定的字符串,将当前字符添加到预先声明的空对象中,如果该字符已存在于对象中,我会将其值增加1,如果不存在,则将其添加为1.换句话说,我正在构建给定字符串的字符映射表。

let charMap = {}

for (let char of 'doooppy') {
charMap[char] = charMap[char] + 1 || 1;
}

这就像一个魅力。现在检查以下内容

let charMap = {} 

for (let char of 'doooppy') {
charMap[char] += 1 || 1;
}

现在返回一个 NaN,这对我来说很奇怪,因为它与使用赋值运算符的想法相同。有人可以解释这是为什么吗?谢谢。

最佳答案

1 || 1 charMap[char] += 1 || 1;之前正在评估被评估。这就是 JavaScript 中运算符优先级的工作方式。带||的部分在带有 += 的部分之前进行评估。第一次运行该行代码时,charMap[char] 未定义。对未定义使用 += 会返回 NaN,然后​​在后续执行中对 NaN 使用 += 也会返回 NaN。

+= 的正确解决方案是:

let charMap = {} 

for (let char of 'doooppy') {
if (!charMap[char]) {
charMap[char] = 1;
} else {
charMap[char] += 1;
}
}

关于javascript - vanilla Javascript,附加赋值运算符的误解,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53548181/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com