gpt4 book ai didi

javascript - 分配给原语的值将丢失

转载 作者:行者123 更新时间:2023-12-02 22:21:15 26 4
gpt4 key购买 nike

如果我有一个对象数组,并循环遍历它们并为每个对象的属性分配一个值,WebStorm 会警告我:

Values assigned to primitive will be lost

但是,在控制台中测试时,我不会“丢失”任何值。

只有当循环位于函数内部时才会发生这种情况。

下面是此错误的示例:

let people = [
{
name: 'Foo',
age: 21,
surname: 'FooBar'
},

{
name: 'Bar',
age: 51,
surname: 'FooBar'
}
];

没有函数包装器:

people.forEach(function (person) {
person.surname = 'Baz'; // No error. Works in console.
});

带有函数包装器:

function changeSurname(people) {
people.forEach(function (person) {
person.surname = 'Baz'; // Error warning me that value assigned to primitive will be lost.
});
}

changeSurname(people);

这两者都会在控制台中产生相同的输出(姓氏更改为“baz”)。

我认为这与对象引用和 person 指向的内容有关,但我不确定到底是什么。

为什么我会看到此错误?

WebStorm 试图帮助我避免哪些潜在错误?

最佳答案

您的代码中没有任何不正确的地方,WebStorm 的类型推断有点困惑(JavaScript 的这一方面尤其令人困惑)。

它的 linter 看到一个字符串并假设你会尝试这样的事情:

var primitive = "september";
primitive.vowels = 3;

primitive.vowels;
// => undefined

这会导致“丢失”值(value)。

事实上,它仅捕获函数内部的这个“错误”,这似乎是一个应该报告的彻头彻尾的错误。

为了进一步理解 JavaScript 这个奇怪的部分,我推荐 Angus Croll 的优秀深入文章 here .

关于javascript - 分配给原语的值将丢失,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37923424/

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