[英]Value assigned to primitive will be lost
如果我有一个对象数组,并循环遍历它们并为每个对象的属性分配一个值,WebStorm 会警告我:
分配给基元的值将丢失
但是,在控制台中进行测试时,我不会“丢失”任何值。
这仅在循环位于 function 内部时发生。
下面是此错误的示例:
let people = [
{
name: 'Foo',
age: 21,
surname: 'FooBar'
},
{
name: 'Bar',
age: 51,
surname: 'FooBar'
}
];
没有 function 包装器:
people.forEach(function (person) {
person.surname = 'Baz'; // No error. Works in console.
});
使用 function 包装器:
function changeSurname(people) {
people.forEach(function (person) {
person.surname = 'Baz'; // Error warning me that value assigned to primitive will be lost.
});
}
changeSurname(people);
这两个在控制台中产生相同的 output(姓氏更改为“baz”)。
我认为这与 object 参考和person
指向的内容有关,但我不确定到底是什么。
为什么我会看到这个错误?
WebStorm 试图将我从哪些潜在错误中拯救出来?
你的代码没有任何不妥之处,WebStorm 的类型推断有点混乱(JavaScript 的这方面尤其混乱)。
它的 linter 看到一个字符串,并假设你会尝试这样的事情:
var primitive = "september";
primitive.vowels = 3;
primitive.vowels;
// => undefined
这将导致“丢失”的价值。
它只在函数内部捕获这个“错误”这一事实似乎是一个应该报告的彻头彻尾的错误。
为了进一步理解 JavaScript 这个奇怪的部分,我推荐 Angus Croll 的优秀深入文章在这里。
如果您将使用方括号,JetBrains 编辑器 (WebS/PhpS) 将不会显示任何错误。
person['surname'] = 'Baz';
我只是有同样的问题。
您也可以要求 WebStorm 禁用对下一行的检查,但我决定改用for of
循环:
for (person of people) {
person.surname = 'Baz';
}
结果它实际上使我的代码更具可读性,所以我很高兴。
这是一个无关紧要但可能有用的答案。 我收到此错误消息 b/c 我忘记更新函数的 JSDoc 返回: @return String
而不是@return Object|undefined
,我试图访问返回对象的属性 - HTH
我在角度自定义指令方面遇到了类似的问题。
下面是我的自定义指令:
function customDirective() {
return {
scope: {
model: '='
}
link: function(scope) {
scope.resetModel = function() {
scope.model.name = null; //In these lines I was getting the above
scope.model.email = null; //mentioned warning in webstorm.
}
}
}
}
在浏览了$compile docs 之后,我决定使用下面的代码来解决这个警告,并且可以很好地绑定到子作用域和父作用域,当然是的,除非您的模型是对象引用。
function customDirective() {
return {
scope: {
model:'<' // Please refer the above linked angular docs for in detail explanation.
}
link: function(scope) {
scope.resetModel = function() {
scope.model.name = null;
scope.model.email = null;
}
}
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.