이 기사에서는 일반적인 JavaScript 질문을 탐구합니다. 어레이와 객체를 비교할 때 엄격한 평등 연산자 ()가 예상대로 작동하지 않는 이유. 우리는이 행동을 이해하기 위해 JavaScript의 내부 작업을 탐구 할 것입니다.
.
JavaScript는 원시적 데이터 유형과 비-프리맨티 데이터 유형을 구별합니다. 원시 유형 (부울, 널, 정의되지 않은 문자열, 숫자)은 가치별로 전달되는 반면, 비-프리미셜 유형 (어레이, 함수 및 객체-모든 기술적 객체)은 참조로 전달됩니다.
원시 유형 동작 (Pass By value) ===
원시 변수를 선언 할 때 값은 직접 저장됩니다.
비-프리맨티 유형 동작 (참조로 통과)
비-프리미셜 변수는 객체 자체가 아닌 물체의 메모리 위치에 a 참조 를 저장합니다.
처음에는
가 빈 배열을 가리키는 참조 (예 : 메모리 주소 h001)를 보유합니다. 후, H001의 배열이 수정됩니다
참조 복사
를 사용하여 참조 변수를 복사하면 객체의 데이터가 아닌 참조를 복사합니다.
둘 다 와
const name = 'John';
const age = 25;
로그인 후 복사
이제 동일한 메모리 위치를 가리 킵니다. 하나를 수정하면 다른 하나를 수정합니다
'파인애플'에 <🎜 🎜>에 추가하는 것도 가 동일한 참조를 공유하기 때문에 변경됩니다.
<🎜 🎜> <<> 참조 변수를 재 할당 fruits
push()
참조 변수를 재 할당하면 새로운 참조가 생성됩니다
<<> 원래 객체 는 메모리에 남아 있지만 이제 는 이제 새로운 객체 .
<<> 왜 가 배열과 객체로 실패하는지 =
const fruits = [];
fruits.push('Banana');
로그인 후 복사
<🎜 🎜> 연산자는 비-프림 유형에 대한 참조를 비교합니다. 그러므로 : <.>
fruits
및 yellowFruits
와
가 동일한 내용을 가지고 있더라도 메모리 주소가 다르기 때문에 .
yellowFruits
<<> 함수 매개 변수와 순도 <🎜 fruits
기본 값을 함수로 전달하면 값이 복사됩니다. 그러나 통과 객체는 참조를 통과합니다. 이 차이는 순수한 기능을 이해하는 데 중요합니다.
<<> 순수 함수 : 외부 상태를 수정하지 마십시오. 그들은 입력만으로 작동하고 예측 가능한 출력을 생성합니다.
.
<🎜 🎜> <<> 불순한 함수 : 전달 된 객체를 인수로 수정하여 함수의 범위 외부의 원래 객체에 영향을 미칩니다.
객체를 수정하는 순수한 함수를 만들려면 수정 전에 사본을 만듭니다.
const fruits = ['Banana'];
const yellowFruits = fruits;
로그인 후 복사
요약에서 { name: 'John' }
person
원시 유형은 가치별로 전달됩니다. 비-프리맨티 유형은 참조로 전달됩니다
비-프리맨 유형에 대한 참조를 비교합니다
참조 복사를 이해하는 것은 예측 가능하고 유지 관리 가능한 코드를 작성하는 데 필수적입니다.
순수 함수는 외부 상태를 수정하지 않음으로써 부작용을 피합니다. { name: 'Mary' }
JavaScript 메모리 관리에 대한 더 깊이 다이빙하려면 통화 스택 및 메모리 힙을 탐색하십시오.위 내용은 어레이와 객체를 ===를 비교할 수없는 이유는 무엇입니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!