2016-06-20 2 views
17

을 잃고, 각각에 속성을 할당하는 그들을 통해 루프는 WebStorm 나 경고한다 : 가치는 내가 객체의 배열이있는 경우

을 잃게됩니다 원시적에 할당

그러나 콘솔에서 테스트 할 때 값을 "잃지"않습니다.

이것은 루프가 함수 안에있을 때만 발생합니다.

이하이 오류의 예 :

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

changeSurname(people); 

이들 모두 콘솔에서 동일한 출력을 생성 :

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

함수 래퍼 : 함수 래퍼없이

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

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

(성은 'baz'로 변경됩니다).

나는 이것이 객체 참조와 어떤 관련이 있다고 가정하고 무엇을 person이 가리키는 지 정확히 추측하고있다.

왜이 오류 메시지가 표시됩니까?

WebStorm은 나를 구하기 위해 어떤 잠재적 인 버그가 있습니까?

+0

let은 변수를 내부 객체의 기본 유형으로 만드는 상수로 만듭니다. 변수를 선언 할 때'var'을 사용해서는 안된다. –

+4

@AkshayKhandelwal 나는 그것이 사실이라고 확신하지 않는다. 'var'을 사용해도 여전히 오류가 발생합니다. 'const'는 일을 일정하게 만듭니다.'let'은 변수를 블록 범위로 범위 지정합니다. –

+0

@MattLishman, IDE는 전달 된 인수가 객체에 대한 참조이고'forEach-loop'에서 값이 변경/손실된다는 것을 경고합니다. – Rayon

답변

5

은 (자바 스크립트의 이러한 측면은 특히 혼란).

는 그 린터 문자열을보고이 같은 시도 할 것이다 가정

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

primitive.vowels; 
// => undefined 

는 '손실'값으로 이어질 것입니다.

사실 이 캐치이 함수 내에서 '오류'가보고되어야하는 명백한 버그처럼 보입니다.

JavaScript의 이상한 부분을 더 잘 이해하려면 Angus Croll의 우수한 심도있는 기사 here을 권장합니다.

+1

이에 대한 버그 보고서를 찾을 수 없습니다. 그러나 WebStorm의 이후 버전에서는 더 이상 복제 할 수 없습니다. 불행히도 나는이 버그를 본 버전을 기억하지 못하지만 해결 된 것 같습니다! –

-1

각도 맞춤형 지시문과 비슷한 문제가 발생했습니다. 네 물론 제외하고는 $compile docs를 통과 한 후, 나는이 경고를 해결하고 자녀와 부모 범위에 바인딩 잘 작동 아래의 코드를 사용하기로 결정

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. 
       } 
      } 
     } 
} 

:

아래 내 사용자 지정 지시했다 모델이 객체 참조 일 때까지 , WebStorm의 형식 유추가 조금 혼란스러워지고 코드에서 부적절한 거기에 아무것도

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; 
      } 
     } 
     } 
} 
+2

다른 사람에게 유용 할 수도 있지만 실제로 내 질문에는 답하지 않습니다. 내 질문은 각도와 관련이 없습니다. (그리고 Webstorm은 그 레벨의 각도를 이해하지 못합니다.) –

+0

이것이 왜 downvoted인지 확실하지 않습니다. 나는이 해답이 같은 문제를 찾고 있음을 발견했다. 내 생각에 경고는 사용되지 않거나 반환되지 않는 변수를 선언 할 때 발생합니다. intellij는 무의미하다고 생각하지만 이는 양방향 바인딩에 대해 모르는 것이기 때문입니다. –

관련 문제