javascript - 在查找字符串中字符出现的频率时,此语法的确切含义是什么?

标签 javascript string object

在查找字符串中字符出现的频率时,此语法的确切含义是什么?

var str = 'abcccdddd';

function maxCharCount(target) {
    const chars = {};

    let maxChar = '';
    let maxValue = 1;

    for (let char of target) {
        chars[char] = chars[char] + 1 || 1; //what is the meaning of this line exactly in detail???
    }

    return chars;
}

console.log(maxCharCount(str));

最佳答案

字符[字符] + 1 || 1 有两个边:左边和右边。如果左侧解析为假值,则整个表达式解析到右侧,如果左侧解析为真值,则表达式解析到左侧。

也就是说,左侧只能在一种情况下为假:当 chars[char]undefined 时(当 chars 没有包含名称为 char 的属性)。 undefined + 1 给出 NaN 即不是数字,这是一个虚假值。

像这样的代码绝对应该被认为是糟糕的,因为它使开发人员的意图不明显。相反,至少应该首选这样的东西:

chars[char] = chars[char] ? chars[char] + 1 : 1;

关于javascript - 在查找字符串中字符出现的频率时,此语法的确切含义是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/53957788/

相关文章:

javascript - 使用新约束调用 getUserMedia 会导致黑屏 (MediaStream.ended=true)

javascript - 单击 Canvas 元素内部选择文本

ios - 在 swift 3 中过滤代词、动词、地名

javascript - For/In 循环对象到数组

java - 打印用户定义对象的方法

javascript - 使用 Sinon/Mocha 正确 stub 请求/响应

c++ - 清除非字母字符的字符串

c++ - 字符串复制说缓冲区太小,strcpy_s源问题

javascript - 如果数组包含 2 个相同的对象,则改变第二个(或第三个、第四个)对象的值

javascript - 我想在 jquery 中显示今天的日期 -1 年?