다른 거북이는 모두 각 거북마다 다른 무기 및 색상 특성을 제외하고 동일한 특성을 가지고 있습니다. 스프레드 연산자를 사용하여 레오나르도에 참조하는 객체의 사본을 만들고 다음과 같이 무기와 색상 특성을 변경하는 것이 합리적입니다.
우리는 스프레드 객체에 대한 참조 후 변경하려는 속성을 추가하여 한 줄로이 작업을 수행 할 수 있습니다. Donatello와 Raphael 변수에 대한 새 개체를 만드는 코드는 다음과 같습니다.<span>const bears = 3;
</span>
스프레드 연산자를 이런 식으로 사용하면 얕은 물체의 사본 만 만듭니다. 깊은 사본을 만들려면이 작업을 재귀 적으로 수행하거나 라이브러리를 사용해야합니다. 개인적으로, 나는 당신이 당신의 물건을 가능한 한 얕게 유지하려고 노력하는 것이 좋습니다. .
는 돌연변이가 나쁘니?
이 기사에서는 가변 할당과 돌연변이의 개념을 다루었 고 왜 그런 이유를 보았습니다 - 그들은 개발자들에게 진정한 고통이 될 수 있습니다.
특히 독성 조합은 참조 및 돌연변이에 의해 복사됩니다. 이것은 당신이 깨닫지 못한 부작용과 버그로 이어질 수 있습니다. 코드의 다른 변수로 참조 된 객체를 돌연변이하면 추적하기 어려운 많은 문제가 발생할 수 있습니다. 열쇠는 필수에 대한 돌연변이 사용을 시도하고 최소화하는 것입니다.
기능적 프로그래밍에서 순수한 기능은 부작용을 일으키지 않는 기능이며 돌연변이는 부작용의 가장 큰 원인 중 하나입니다.
골든 규칙은 참조로 객체를 복사하지 않는 것입니다. 다른 객체를 복사하려면 스프레드 연산자를 사용한 다음 사본을 만든 직후에 돌연변이를 만드십시오.
다음으로, 우리는 JavaScript의 배열 돌연변이를 살펴볼 것입니다
현대식 JavaScript로 속도를 높이고 싶다면 새 책을 확인하는 것을 잊지 마십시오. 첫 번째 장을 무료로 읽을 수 있습니다. 질문이나 의견이 있으시면 트위터에 연락하십시오!
JavaScript 변수 할당 및 돌연변이에 대한 자주 묻는 질문 (FAQ)
JavaScript의 변수 할당과 돌연변이의 차이는 무엇입니까?
JavaScript에서 변수 할당은 변수에 값을 할당하는 프로세스를 나타냅니다. 예를 들어, x = 5하자; 여기서는 값 5를 변수 x에 할당합니다. 한편, 돌연변이는 기존 변수의 값을 변경하는 과정을 말합니다. 예를 들어, 나중에 x = 10을 쓰면; 우리는 값을 5에서 10으로 변경하여 변수 X를 변수하고 있습니다. JavaScript는 원시 및 비-프리미셜 데이터 유형에 대해 변수 할당 및 돌연변이를 어떻게 다르게 처리합니까? JavaScript 및 어레이) 가변 할당 및 돌연변이와 관련하여 다르게. 원시 데이터 유형의 경우 변수를 할당하면 값의 사본이 새 메모리 위치에 작성되어 저장됩니다. 그러나 비-프리맨티 데이터 유형의 경우 변수를 할당 할 때 두 변수 모두 동일한 메모리 위치를 가리 킵니다. 따라서 하나의 변수를 돌연변이하면 변경 사항은 해당 메모리 위치를 가리키는 모든 변수에 반영됩니다.
JavaScript에서 통과 별 및 통과 회의의 개념은 무엇입니까? . Pass-By-Value 및 Pass-By 참조는 JavaScript가 변수를 함수로 전달할 수있는 두 가지 방법입니다. JavaScript가 변수를 값으로 전달하면 변수의 값 사본을 생성하고 해당 사본을 함수로 전달합니다. 함수 내부의 변수에 대한 변경 사항은 원래 변수에 영향을 미치지 않습니다. 그러나 JavaScript가 참조별로 변수를 전달하면 변수의 메모리 위치에 대한 참조를 전달합니다. 따라서 함수 내부의 변수에 대한 변경 사항은 원래 변수에도 영향을 미칩니다.
JavaScript에서 돌연변이를 방지하는 방법은 무엇입니까?
JavaScript에서 돌연변이를 방지하는 몇 가지 방법이 있습니다. 한 가지 방법은 객체를 사용하는 것입니다 .Freeze () 메소드는 새로운 특성이 객체에 추가되는 것을 방지하고 기존 속성이 제거되는 것을 방지하며 기존 속성의 열거 성, 구성 가능성 또는 쓰기 성을 변경하는 것을 방지합니다. 다른 방법은 변수를 선언 할 때 Const 키워드를 사용하는 것입니다. 이것은 변수의 재 할당을 방지하지만 값이 객체 또는 배열 인 경우 변수의 값의 돌연변이를 방지하지는 않습니다. JavaScript의 얕은 사본과 딥 카피의 차이점은 무엇입니까?
JavaScript에서 객체의 얕은 사본은 원래 객체의 값과 사본이 비-프리맨티 데이터 유형의 동일한 메모리 위치를 가리키는 객체의 사본입니다. 따라서 사본을 돌연변이하면 원래 물체도 돌연변이됩니다. 반면에, 객체의 깊은 사본은 원래 객체의 값과 사본이 동일한 메모리 위치를 가리키지 않는 객체의 사본입니다. 따라서 사본을 돌연변이하면 원래 객체가 변하지 않습니다.
javaScript에서 객체의 깊은 사본을 어떻게 만들 수 있습니까? 객체의 깊은 사본을 만드는 한 가지 방법 JavaScript에서는 json.parse () 및 json.stringify () 메소드를 사용하는 것입니다. json.stringify () 메소드는 객체를 json 문자열로 변환하고 json.parse () 메소드는 json 문자열을 객체로 다시 변환합니다. 이것은 원래 객체의 깊은 사본 인 새 개체를 만듭니다.
javaScript의 돌연변이 관점 API는 무엇입니까?
돌연변이 관점 API는 개발자에게 DOM의 변화에 반응 할 수있는 방법을 제공합니다. 문서의 변화에 반응하기위한 일반적이고 효율적이며 강력한 API를 제공하도록 설계되었습니다. JavaScript는 폐쇄의 맥락에서 변수 할당 및 돌연변이를 어떻게 처리합니까? 클로저는 자체 범위, 외부 기능의 범위 및 글로벌 범위에 액세스 할 수있는 함수입니다. 클로저 내부에서 변수가 할당되거나 돌연변이되면, 폐쇄 범위에서 변수가 선언되었는지 여부에 따라 외부 범위의 변수 값에 영향을 줄 수 있습니다. JavaScript의 var, let 및 const 사이에 JavaScript에서 var, let 및 const는 변수를 선언하는 데 사용됩니다. VAR은 함수 스코프이며 함수 외부로 선언되면 전 세계적으로 스코핑됩니다. Let and Const는 블록 스코프입니다. 그들이 선언 된 블록 내에만 존재한다는 것을 의미합니다. Let과 Const의 차이점은 Let가 재 할당하는 반면 Const는 변수 할당 및 돌연변이를 어떻게 처리합니까? JavaScript에서 비동기 프로그래밍의 맥락에서, 비동기 프로그래밍을 통해 동시에 여러 가지 일이 발생할 수 있습니다. 변수가 비동기 함수로 할당되거나 돌연변이되면 코드의 다른 부분이 변수의 값에 의존하는 경우 예상치 못한 결과로 이어질 수 있습니다. 이는 코드의 다른 부분이 실행되기 전에 가변 할당 또는 돌연변이가 완료되지 않았기 때문입니다. 이를 처리하기 위해 JavaScript는 비동기 코드를 관리하는 데 도움이되는 약속 및 비동기/기다리는 것과 같은 몇 가지 기능을 제공합니다.