gpt4 book ai didi

javascript - 为什么 Javascript 不像数组中的字符串键那样处理这些保留字?

转载 作者:行者123 更新时间:2023-11-30 00:30:31 25 4
gpt4 key购买 nike

我在 javascript 的编码套路中有以下测试用例:

*word-count_test.js

var words = require('./word-count');

describe("words()", function() {

it("handles properties that exist on Object’s prototype", function() {
var expectedCounts = { reserved: 1, words : 1, like :1, prototype: 1, and : 1, toString: 1, "ok?": 1};
expect(words("reserved words like prototype and toString ok?")).toEqual(expectedCounts);
});
});

下面的代码不会传递这个:

代码 v1

var words = function(phrase) {
var wordCountAry = {};
// split on whitespace, including newline
phrase.split(/\s/).forEach(function(oneWord) {
if (!wordCountAry[oneWord]) {
wordCountAry[oneWord] = 1;
} else {
wordCountAry[oneWord]++;
}
});
return wordCountAry;
};

module.exports = words;

但是像下面这样的计数器行不会触发错误:

代码 v2

wordCountary[word] = (+wordCountary[word] || 0) + 1

那么一元“+”运算符有什么特别之处呢?

最佳答案

标准 JavaScript object prototype具有预定义的属性,例如:

  • toString()
  • 构造函数()

当您使用典型的条件逻辑测试这些属性名称时,它们将显示为存在,例如

var x = {};
if (x['toString']) {
// this gets executed
}

第二个代码示例使用两个技巧解决了这个问题:

+x['toString'] || 0;

首先,使用一元加运算符将属性强制转换为数值。对于函数或未定义的值,强制转换会产生 NaN

其次,逻辑或运算符用于合并左右表达式;如果右侧操作数的计算结果为 false(包括 NaN),它将产生右侧操作数,否则返回左侧操作数。

以这种方式,未定义的属性值或函数值将产生 0,因此它将按预期工作。

关于javascript - 为什么 Javascript 不像数组中的字符串键那样处理这些保留字?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29740117/

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