Mat*_*man 29 javascript webstorm
如果我有一个对象数组,并循环遍历它们为每个对象分配一个属性值,WebStorm警告我:
分配给基元的值将丢失
但是,在控制台中进行测试时,我并没有"丢失"任何值.
这只发生在循环在函数内部时.
以下是此错误的示例:
let people = [
{
name: 'Foo',
age: 21,
surname: 'FooBar'
},
{
name: 'Bar',
age: 51,
surname: 'FooBar'
}
];
Run Code Online (Sandbox Code Playgroud)
没有函数包装器:
people.forEach(function (person) {
person.surname = 'Baz'; // No error. Works in console.
});
Run Code Online (Sandbox Code Playgroud)
使用函数包装器:
function changeSurname(people) {
people.forEach(function (person) {
person.surname = 'Baz'; // Error warning me that value assigned to primitive will be lost.
});
}
changeSurname(people);
Run Code Online (Sandbox Code Playgroud)
这两个都在控制台中产生相同的输出(姓氏改为'baz').
我认为这与对象引用和person指向的内容有关,但我不确定究竟是什么.
为什么我看到这个错误?
WebStorm试图拯救我的潜在错误是什么?
rya*_*uen 19
你的代码中没有任何不当之处,WebStorm的类型推断变得有点混乱(JavaScript的这方面特别令人困惑).
它的linter看到一个字符串,并假设你会尝试这样的事情:
var primitive = "september";
primitive.vowels = 3;
primitive.vowels;
// => undefined
Run Code Online (Sandbox Code Playgroud)
哪会导致"失去"的价值.
事实上它只是在一个函数中捕获这个'错误'似乎是一个应该报告的彻头彻尾的bug.
为了进一步理解这个奇怪的JavaScript部分,我在这里推荐Angus Croll的优秀深度文章.
如果您使用方括号,JetBrains 编辑器(WebS/PhpS)将不会显示任何错误。
person['surname'] = 'Baz';
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
11174 次 |
| 最近记录: |