分配给原语的值将丢失
Value assigned to primitive will be lost
如果我有一个对象数组,并循环遍历它们并为每个对象的属性分配一个值,WebStorm 会警告我:
Values assigned to primitive will be lost
但是,在控制台中测试时,我没有 "lose" 任何值。
只有当循环在函数内部时才会发生这种情况。
下面是此错误的示例:
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 试图将我从哪些潜在错误中拯救出来?
我遇到了与 angular 自定义指令类似的问题。
下面是我的自定义指令:
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;
}
}
}
}
你的代码没有任何不妥之处,WebStorm 的类型推断有点混乱(JavaScript 这方面特别混乱)。
它的 linter 看到一个字符串并假设你会尝试这样的事情:
var primitive = "september";
primitive.vowels = 3;
primitive.vowels;
// => undefined
这将导致 'lost' 值。
它仅 捕获 这个 'error' 函数内部的事实似乎是一个应该报告的彻头彻尾的错误。
为了进一步理解JavaScript这个奇怪的部分,推荐Angus Croll的优秀深度文章here。
如果您使用方括号,JetBrains 编辑器 (WebS/PhpS) 将不会显示任何错误。
person['surname'] = 'Baz';
我刚遇到同样的问题。
您也可以要求 WebStorm 禁用对下一行的检查,但我决定改用 for of
循环:
for (person of people) {
person.surname = 'Baz';
}
它实际上使我的代码更具可读性,所以我很高兴。
这是一个无关紧要但可能有用的答案。我收到此错误消息 b/c 我忘记更新函数的 JSDoc return:@return String
而不是 @return Object|undefined
,并且我试图访问 returned对象的属性 - HTH
如果我有一个对象数组,并循环遍历它们并为每个对象的属性分配一个值,WebStorm 会警告我:
Values assigned to primitive will be lost
但是,在控制台中测试时,我没有 "lose" 任何值。
只有当循环在函数内部时才会发生这种情况。
下面是此错误的示例:
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 试图将我从哪些潜在错误中拯救出来?
我遇到了与 angular 自定义指令类似的问题。
下面是我的自定义指令:
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;
}
}
}
}
你的代码没有任何不妥之处,WebStorm 的类型推断有点混乱(JavaScript 这方面特别混乱)。
它的 linter 看到一个字符串并假设你会尝试这样的事情:
var primitive = "september";
primitive.vowels = 3;
primitive.vowels;
// => undefined
这将导致 'lost' 值。
它仅 捕获 这个 'error' 函数内部的事实似乎是一个应该报告的彻头彻尾的错误。
为了进一步理解JavaScript这个奇怪的部分,推荐Angus Croll的优秀深度文章here。
如果您使用方括号,JetBrains 编辑器 (WebS/PhpS) 将不会显示任何错误。
person['surname'] = 'Baz';
我刚遇到同样的问题。
您也可以要求 WebStorm 禁用对下一行的检查,但我决定改用 for of
循环:
for (person of people) {
person.surname = 'Baz';
}
它实际上使我的代码更具可读性,所以我很高兴。
这是一个无关紧要但可能有用的答案。我收到此错误消息 b/c 我忘记更新函数的 JSDoc return:@return String
而不是 @return Object|undefined
,并且我试图访问 returned对象的属性 - HTH