>source

JavaScript에서 변경 가능한 데이터와 변경 불가능한 데이터의 차이점이 무엇인지 알고 싶습니다. 우리가 사용하는 것이 정말로 중요합니까? 다른 것을 사용하는 것이 선호되는 상황이 있습니까?

감사합니다.


  • 답변 # 1

    이 URL에 유용한 정보가 있습니다 : https://benmccormick.org/2016/06/04/what-are-mutable-and-immutable-data-structures-2

  • 답변 # 2

    [W]hat is the difference between mutable and immutable data in JavaScript [?]

    변경 가능한 값을 변경할 수 있습니다. JS 프리미티브 (숫자, 문자열, 부울)는 변경할 수 없으므로 변경할 수 없습니다. 변경하려면 조건을 적용하여 새 프리미티브를 만들어야하지만 객체는 변경 가능하지만 고정되지 않은 경우 /를 추가 할 수 있습니다 객체 자체의 속성을 변경/삭제합니다. let 로 선언하면 변수를 변경할 수 있습니다  또는 var const 로 선언하면 불변입니다. .

     5 + 5 // this does not change the "5" itself, it creates a new number value, containing "10"
     let str = "test";
     str += "test2"; // Although it looks as if this would mutate the string, it actually creates a new one and stores that under "str" again
     const infinite = 42; // a primitive inside of a constant can't be mutated, and the variable can't be changed, so "infinite" will always be 42
     const reference = { mutable: 1 }; // Although the variable itself can't be changed, the object it is referencing can be
     reference.mutable = 2;
     Object.freeze(reference); // by freezing an object you can make it immutable
    reference.mutable = "won't work";
    
    

    기술적으로 변경 가능하고 변경 불가능한 값이있는 반면 규칙에 따라 변경 불가능한 값도 있습니다 (문서에서 변경하지않도록알려줍니다). 한 가지 예는 React의 상태입니다. 상태 객체를 직접 변경할 수는 있지만 상태 변경이 표시된 페이지에 반영되어야하므로 setState 가 아닙니다.  상태를 재설정하는 데 사용되며 다시 렌더링됩니다.)

    와이즈 비즈

    변경이 적용되기 전에 기본 데이터를 복사해야하기 때문에 변경 불가능한 데이터 구조는 항상 변경하는 데 비용이 더 많이 듭니다. 그러나 나중에 변경되지 않을 것이므로 불변의 객체를 안전하게 공유 할 수 있습니다. 객체가 많이 공유되면 유익 할 수 있습니다.

    Does it really matter which one we are using? Is there any situation where it is preferred to use one instead of the other?

    즉, 모든 형태의 변경 가능한 상태는 항상 코드에 복잡성을 추가하고 있습니다. 코드의 특정 부분이 충돌하면 함수가 액세스 할 수있는 가변 데이터 구조의 상태를 찾아야합니다. 매우 어려운 작업 인 비동기 시스템에서. 변경 불가능한 데이터 구조를 사용하고 함수를 순수하게 유지하는 경우 오류를 입력의 원인과 쉽게 연관시켜보다 쉽게 ​​작업 할 수 있습니다.

     let immutable = { value: 1 }; // let's say this object is immutable by convention
     share(immutable); // then we know for sure that even if "dhare" stores a reference to the object and accesses it later, the value won't be changed
     immutable = { ...immutable, value: 2 }; // this won't affect the other object, as we cloned it and changed the clone
    
    

    일반적으로 항상 가능한 한 불변/로컬을 유지해야하며 필요할 때 (성능/논리적 이유로) 변경 가능/공유 상태 만 사용하십시오.

    let bad = 1, global = 2, state = 3; // This will log NaN somewhen ... but why ... ?! It isn't clear if we only see this code setInterval(() => console.log(bad / global / state)); // ... because somewhere else at a different place, state gets re set: setInterval(() => state = Math.random() * 10);

관련 자료

  • 이전 .net - Net Core 21 설치 Entity Framework Core가 작동하지 않습니까?
  • 다음 mongodb - 확인 버튼을 클릭 할 때 vue의 상태를 변경하는 방법