値による比較と参照による比較 数値とブール型 (true と false) は、値によってコピー、渡され、比較されます。コピーまたは値渡しを行う場合、コンピュータのメモリにスペースが割り当てられ、そこに元の値がコピーされます。その後、元の値を変更したとしても、2 つの値は独立したエンティティであるため、コピーされた値には影響しません (逆も同様)。
オブジェクト、配列、関数は参照によってコピー、受け渡し、比較されます。 コピーまたはアドレスで渡す場合、元の項目へのポインターが作成され、コピーされたかのように使用されます。その後、元のアイテムを変更すると、元のアイテムとコピーされたアイテムの両方が変更されます (逆も同様)。実際にはエンティティは 1 つだけです。「コピー」は実際にはコピーではなく、データへの単なる参照です。
参照による比較を行う場合、比較が成功するには、両方の変数がまったく同じエンティティを参照する必要があります。たとえば、2 つの異なる Array オブジェクトは、同じ要素が含まれている場合でも、等しくないと比較されます。比較を成功させるには、変数の一方がもう一方の変数への参照である必要があります。 2 つの配列に同じ要素が含まれているかどうかを確認するには、toString() メソッドの結果を比較します。
最後に、文字列はコピーされて参照によって渡されますが、値によって比較されます。 2 つの String オブジェクト (new String("something") で作成されたもの) がある場合、それらは参照によって比較されますが、一方または両方が文字列値の場合は、値によって比較されることに注意してください。
文字列はコピーされて参照によって渡されますが、値によって比較されます。 2 つの String オブジェクト (new String("something") で作成されたもの) がある場合、それらは参照によって比較されますが、一方または両方が文字列値の場合は、値によって比較されることに注意してください。
var str1="aa"; >var str2 =new String("aa");
var str3=str2;
関数 test(p){
var str4=p; ;
}
console.log(str1===str2); //false
console.log(str3===str2); //true
test(str1);//false
test(str2);//true