값별 및 참조별 비교 숫자 및 부울 유형(true 및 false)이 값별로 복사, 전달 및 비교됩니다. 값을 복사하거나 전달하는 경우 컴퓨터 메모리에 공간이 할당되고 원래 값이 해당 공간에 복사됩니다. 그러면 원래 값을 변경하더라도 복사된 값에는 영향을 주지 않습니다(반대의 경우도 마찬가지). 두 값은 독립적인 개체이기 때문입니다.
객체, 배열, 함수는 참조로 복사, 전달 및 비교됩니다. 주소로 복사하거나 전달하는 경우 원본 항목에 대한 포인터가 생성된 후 복사된 것처럼 사용됩니다. 이후에 원본 항목을 변경하면 원본 항목과 복사된 항목이 모두 변경됩니다(그 반대의 경우도 마찬가지). 실제로는 하나의 엔터티만 있습니다. "복사본"은 실제로 복사본이 아니라 데이터에 대한 또 다른 참조입니다.
참조로 비교할 때 비교가 성공하려면 두 변수가 정확히 동일한 항목을 참조해야 합니다. 예를 들어 두 개의 서로 다른 Array 객체는 동일한 요소를 포함하더라도 동일하지 않은 것으로 비교됩니다. 비교가 성공하려면 변수 중 하나가 다른 변수에 대한 참조여야 합니다. 두 배열에 동일한 요소가 포함되어 있는지 확인하려면 toString() 메서드의 결과를 비교하십시오.
마지막으로 문자열이 참조로 복사 및 전달되지만 값으로 비교됩니다. 두 개의 String 개체(new String("something")로 생성됨)가 있는 경우 참조로 비교되지만, 하나 또는 둘 다 문자열 값인 경우 값으로 비교됩니다.
문자열은 참조로 복사 및 전달되지만 값으로 비교됩니다. 두 개의 String 개체(new String("something")로 생성됨)가 있는 경우 참조로 비교되지만, 하나 또는 둘 다 문자열 값인 경우 값으로 비교됩니다.
var str1="aa"; >var str2 =new String("aa");
var str3=str2;
function test(p){
var str4=p
console.log(str4===str2) ;
}
console.log(str1===str2); //false
console.log(str3===str2) //true
test(str1);//false
test(str2);//true