>웹 프론트엔드 >JS 튜토리얼 >JavaScript의 가변 할당 및 돌연변이에 대한 안내서

JavaScript의 가변 할당 및 돌연변이에 대한 안내서

尊渡假赌尊渡假赌尊渡假赌
尊渡假赌尊渡假赌尊渡假赌원래의
2025-02-10 10:35:09465검색

JavaScript의 가변 할당 및 돌연변이에 대한 안내서 돌연변이는 JavaScript 세계에서 상당히 자주 듣는 것이지만 정확히 무엇입니까? 이 기사에서는 가변 할당 및 돌연변이의 개념을 다루고 함께 개발자에게 진정한 고통이 될 수있는 이유를 알게 될 것입니다. 문제를 피하기 위해 관리하는 방법, 가능한 한 적은 적은 사용 방법 및 코드를 예측할 수있는 방법을 살펴 봅니다.

이 주제를 더 자세히 탐색하거나 현대 자바 스크립트로 속도를 높이려면 새 책의 첫 번째 장을 확인하십시오. > 가치 유형의 기본으로 돌아가서 시작하겠습니다…

키 테이크 아웃

JavaScript 값은 프리미티브 (불변) 및 물체 (Mutable)로 분류되어 가변 할당 및 돌연변이가 어떻게 행동하는지에 영향을 미칩니다. 'const'를 사용하는 것은 물체에 대한 돌연변이를 방지하지 않습니다. 변수의 다른 값 또는 객체에 대한 재 할당을 방지합니다.

. `let '키워드는 재 할당하여 코드 전체에서 값을 변경 해야하는 변수에 적합합니다. 스프레드 연산자 (`…`)는 물체의 얕은 사본을 생성하는 데 중요하므로 복사 된 참조 객체의 돌연변이와 관련된 문제를 피합니다. 돌연변이는 본질적으로 나쁘지 않지만 특히 동적 웹 응용 프로그램에서 코드 예측 가능성을 유지하고 버그를 최소화하기 위해 신중하게 관리해야합니다.

데이터 유형 JavaScript의 모든 값은 원시적 값 또는 객체입니다. 7 가지 원시 데이터 유형이 있습니다 :

'hello', "world",`hi`, ''와 같은 문자열 부울, 참과 거짓

null 정의되지 않은 기호 - 다른 기호와 충돌하지 않도록 보장되는 독특한 토큰 bigint - 큰 정수 값을 다루기위한

원시적 값이 아닌 것은 배열, 날짜, 정규 표현식 및 물론 물체 리터럴을 포함하여 객체입니다. 함수는 특수한 유형의 객체입니다. 속성과 방법이 있기 때문에 분명히 대상이지만 호출 할 수도 있습니다. 변수 할당 변수 할당은 코딩에서 가장 먼저 배우는 것 중 하나입니다. 예를 들어, 이것은 변수 베어에 숫자 3을 할당하는 방법입니다.

변수에 대한 공통 은유는 내부에 값이 배치 된 레이블이있는 상자 중 하나입니다. 위의 예는 3의 값이 내부에 배치 된 "Bears"라벨을 포함하는 상자로 묘사됩니다.

  • 어떤 일이 일어나는지에 대한 대안적인 생각은 기준으로, 레이블을 3 : JavaScript의 가변 할당 및 돌연변이에 대한 안내서 숫자 3을 다른 변수에 할당하면 곰과 동일한 값을 참조합니다.

    변수 곰과 사업자는 모두 동일한 원시 값 3의 기본 값을 참조합니다. 엄격한 평등 연산자를 사용하여이를 확인할 수 있습니다.
    <span>const bears = 3;
    </span>
    모두 동일한 값을 참조하는 경우 평등 연산자가 TRUE를 반환합니다. 객체로 작업 할 때 일부 gotchas 이전 예제는 원시 값이 변수에 할당되는 것을 보여주었습니다. 객체를 할당 할 때 동일한 프로세스가 사용됩니다

    이 과제는 변수 Ghostbusters가 객체를 참조한다는 것을 의미합니다. JavaScript의 가변 할당 및 돌연변이에 대한 안내서

    그러나 변수에 객체를 할당 할 때 큰 차이는 다른 객체를 다른 변수에 할당하면 완전히 다른 객체를 참조한다는 것입니다. 예를 들어, 아래 할당은 변수 TMNT (Teenage Mutant Ninja Turtles)가 변수 Ghostbusters와 동일한 대상을 참조하는 것처럼 보입니다.

    변수는 고스트 버스 터와 tmnt 변수가 동일한 객체를 참조하는 것처럼 보이지만 실제로는 완전히 다른 객체를 참조합니다.

    <span>let musketeers = 3;
    </span>

    변수 재 할당 Const 키워드가 ES6에 도입되었을 때, 많은 사람들은 상수가 JavaScript에 소개되었다고 잘못 믿었지만 그렇지 않았습니다. 이 키워드의 이름은 약간 오해의 소지가 있습니다.

    const로 선언 된 변수는 다른 값으로 재 할당 할 수 없습니다. 이것은 원시적 값과 물체에 적용됩니다. 예를 들어, 변수 베어는 이전 섹션에서 Const를 사용하여 선언되었으므로 다른 값을 할당 할 수 없습니다. 숫자 2를 변수 베어에 할당하려고하면 오류가 발생합니다.

    숫자 3에 대한 참조는 고정되어 있고 Bears 변수는 다른 값을 재 할당 할 수 없습니다. 객체에도 동일하게 적용됩니다. 변수 Ghostbusters에 다른 객체를 할당하려고하면 동일한 오류가 발생합니다.

    let

    를 사용한 변수 재 할당 키워드가 변수를 선언하는 데 사용되면 코드의 나중에 다른 값을 참조하도록 재 할당 할 수 있습니다. 예를 들어, 우리는 LET를 사용하여 가변 사슬을 선언하여 Musketeers가 참조하는 값을 변경할 수 있습니다. D 'Artagnan이 Musketeers에 합류하면 그 숫자는 4 :

    로 증가합니다.
    bears <span>=== musketeers
    </span><span><< true
    </span>

    이것은 변수를 선언하는 데 사용 되었기 때문에 수행 할 수 있습니다. Musketeers가 원하는만큼 참조하는 가치를 변경할 수 있습니다.

    변수 tmnt도 LET를 사용하여 선언되었으므로 다른 객체 (또는 원하는 경우 완전히 다른 유형)를 참조하도록 재 할당 할 수도 있습니다.

    변수 tmnt는 이제 a

    완전히 다른 객체

    를 참조합니다. 우리는 단지 숫자 속성을 5로 변경하지 않았습니다 요약하면, const를 사용하여 변수를 선언하면 그 값을 재 할당 할 수 없으며 원래 할당 된 것과 동일한 원시 값이나 객체를 항상 참조합니다. LET를 사용하여 변수를 선언하는 경우, 그 값은 프로그램의 뒷부분에서 요구하는만큼 여러 번 재 할당 할 수 있습니다.
    <span>const bears = 3;
    </span>
    . const를 가능한 한 자주 사용하는 것은 일반적으로 좋은 관행으로 간주됩니다. 변수의 값이 일정하게 유지되고 코드가 더 일관되고 예측 가능하다는 것을 의미하므로 오류와 버그가 덜 발생합니다.

    . 참조 별 변수 할당 기본 JavaScript에서는 변수에만 값을 할당 할 수 있습니다. 할 수있는 것처럼 보이지만 변수를 할당하여 다른 변수를 참조 할 수 없습니다. 예를 들어, Stooges의 수는 Musketeers의 수와 동일하므로 변수 stooges를 할당하여 다음을 사용하여 변수 Musketeers와 동일한 값을 참조 할 수 있습니다. 이것은 변수 스쿠어스가 아래 다이어그램과 같이 변수 사슬을 참조하는 것처럼 보입니다.

    그러나 이것은 기본 JavaScript에서 불가능합니다. 변수는 실제 값 만 참조 할 수 있습니다. 다른 변수를 참조 할 수 없습니다. 과제를 할 때 실제로 발생하는 것은 할당 왼쪽의 변수가 오른쪽 참조의 변수 값을 참조하여 변수 stooges가 Musketeers 변수와 동일한 값을 참조한다는 것입니다. 일단이 과제가 완료되면 Stooges 변수는 Musketeers 변수에 전혀 연결되지 않습니다.

    이것은 D 'Artagnan이 Musketeers에 합류하고 Musketeers의 가치를 4로 설정하면 Stooges의 가치는 3으로 유지됩니다. 실제로 Stooges 변수를 Const를 사용하여 선언했기 때문에 설정할 수 없습니다. 새로운 가치로; 항상 3이 될 것입니다 요약 : Const를 사용하여 변수를 선언하고 다른 변수에 대한 참조를 통해서도 원시 값으로 설정하면 그 값이 변경 될 수 없습니다. 이것은 코드에 좋습니다. 더 일관되고 예측 가능하다는 것을 의미합니다.

    돌연변이 값은 변경할 수있는 경우 값이

    mexable 라고합니다. 그게 전부입니다.

    돌연변이

    는 값의 특성을 바꾸는 행위입니다. JavaScript의 모든 원시적 값은

    불변 : 속성을 변경할 수는 없습니다. 예를 들어, 끈 "케이크"를 가변 음식에 할당하면 그 속성을 변경할 수 없음을 알 수 있습니다. 첫 글자를“F”로 변경하려고하면 변경된 것 같습니다.

    그러나 변수의 값을 살펴보면 실제로는 아무것도 바뀌지 않았다는 것을 알 수 있습니다.
    <span>const bears = 3;
    </span>
    길이 속성을 변경하려고하면 같은 일이 발생합니다.

    반환 값에도 불구하고 길이 속성이 변경되었음을 암시하지만 빠른 점검은 다음과 같은 것을 보여줍니다.

    이것은 let 대신 const를 사용하여 변수를 선언하는 것과 관련이 없습니다. 우리가 Let를 사용했다면, 우리는 다른 줄을 참조하기 위해 음식을 설정할 수 있었지만 그 속성을 변경할 수는 없습니다. 원시 데이터 유형의 속성을 변경할 수 없습니다. javaScript
    <span>let musketeers = 3;
    </span>
    의 돌연변이 및 물체 반대로, JavaScript의 모든 객체는 변동성이 있습니다. 즉, Const를 사용하여 선언하더라도 속성을 변경할 수 있음을 의미합니다 (변수를 재 할당 할 수 있는지 여부를 제어하고 Const를 제어하고 제어 할 수 없습니다. 돌연변이). 예를 들어 다음 코드를 사용하여 배열의 첫 번째 항목을 변경할 수 있습니다.

    우리는 Const를 사용하여 가변 음식을 선언했다는 사실에도 불구 하고이 변화는 여전히 발생했다는 점에 유의하십시오. 이것은 const 를 사용하는 것이 객체가 . 우리는 또한 const를 사용하여 선언 된 경우에도 배열의 길이 속성을 변경할 수 있습니다.

    참조로 복사 리터럴에 변수를 할당 할 때 변수는 동일하게 보이더라도 완전히 다른 객체를 참조 할 것입니다.
    bears <span>=== musketeers
    </span><span><< true
    </span>

    그러나 변수 fantastic4를 다른 변수에 할당하면 same
    <span>const ghostbusters = { number: 4 };
    </span>
    객체를 참조합니다.

    이것은 변수 fantastic4를

    를 참조하도록 할당합니다.
    <span>let tmnt = { number: 4 };
    </span>

    이것은 두 변수 모두 same

    객체를 참조하도록 할당되기 때문에 종종 참조로 복사라고합니다. 이것은이 물체에 대한 돌연변이가

    변수 모두에서 볼 수 있기 때문에 중요합니다. Spider-Man이 Fantastic Four에 합류하면 객체의 숫자 값을 업데이트 할 수 있습니다.

    이것은 새로운 대상을 참조하기 위해 Fantastic4를 설정하는 대신 숫자 속성을 변경했기 때문에 돌연변이입니다. 이것은 TMNT의 숫자 속성도 변경 될 것이기 때문에 우리에게 문제가 발생합니다.
    <span>const bears = 3;
    </span>
    이것은 TMNT와 Fantastic4가 모두 동일한 물체를 참조하기 때문에 TMNT 또는 Fantastic4로 만들어진 돌연변이는 둘 다에 영향을 미칩니다.

    . 이것은 JavaScript에서 중요한 개념을 강조합니다. 객체를 참조로 복사 한 후 돌연변이되면 돌연변이는 해당 물체를 참조하는 다른 변수에 영향을 미칩니다. 이로 인해 의도하지 않은 부작용과 추적하기 어려운 버그가 발생할 수 있습니다.

    스프레드 연산자 구조대! 그렇다면 원래 객체에 대한 참조를 만들지 않고 객체 사본을 어떻게 만드나요? 대답은 스프레드 연산자를 사용하는 것입니다! 스프레드 연산자는 ES2015의 어레이 및 문자열 및 ES2018의 물체 용으로 소개되었습니다. 원래 객체에 대한 참조를 만들지 않고도 객체의 얕은 사본을 쉽게 만들 수 있습니다.

    아래의 예는 TMNT 객체의 사본을 참조하기 위해 변수 fantastic4를 설정하는 방법을 보여줍니다. 이 사본은 TMNT 객체와 정확히 동일하지만 Fantastic4는 완전히 새로운 객체를 참조합니다. 이것은 변수의 이름을 그 앞에 스프레드 연산자와 함께 문자 그대로 내부에 복사하도록함으로써 수행됩니다.

    우리가 실제로 수행 한 것은 변수 fantastic4를 새로운 객체 문자 그럴에 할당 한 다음 스프레드 연산자를 사용하여 TMNT 변수가 참조한 객체의 모든 열거 가능한 속성을 복사하는 것입니다. 이러한 속성은 값이기 때문에 참조가 아닌 Fantastic4 객체에 값으로 복사됩니다.

    이제 물체 중 하나에 대한 변경 사항은 다른 개체에 영향을 미치지 않습니다. 예를 들어 Fantastic4 변수의 숫자 속성을 5로 업데이트하면 TMNT 변수에 영향을 미치지 않습니다.

    스프레드 연산자는 또한 객체의 사본을 만드는 데 사용할 수있는 유용한 바로 가기 표기법이 있습니다. 그런 다음 단일 줄의 코드로 새 개체를 변경합니다. 예를 들어, 우리는 십대 돌연변이 닌자 거북이를 모델링하기 위해 물건을 만들고 싶다고 가정 해 봅시다. 우리는 첫 번째 거북이 객체를 만들고 변수 레오나르도를 할당 할 수 있습니다.

    다른 거북이는 모두 각 거북마다 다른 무기 및 색상 특성을 제외하고 동일한 특성을 가지고 있습니다. 스프레드 연산자를 사용하여 레오나르도에 참조하는 객체의 사본을 만들고 다음과 같이 무기와 색상 특성을 변경하는 것이 합리적입니다.

    우리는 스프레드 객체에 대한 참조 후 변경하려는 속성을 추가하여 한 줄로이 작업을 수행 할 수 있습니다. 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는 비동기 코드를 관리하는 데 도움이되는 약속 및 비동기/기다리는 것과 같은 몇 가지 기능을 제공합니다.

위 내용은 JavaScript의 가변 할당 및 돌연변이에 대한 안내서의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.