jsの中の元の値と包装の対象
1599 ワード
var s = "hello world";
console.log(s) //11
一つの問題を考えると、文字列はjsの中で基本的なデータタイプですが、なぜ属性がありますか?jsで文字列sの属性を引用すると、jsは文字列値をnew String(s)でオブジェクトに変換し、このオブジェクトは文字列の方法を継承し、属性の参照を処理するために使用される.引用が終わったら、この新規作成の対象は廃棄されます.
var s = "test";
s.len = 4;
var t = len
この時のtはまたどんな値ですか?答えはundefinedです.仮の対象は保留されていません.
文字列、数字、ブール値の属性にアクセスした時に作成された一時的なオブジェクトを包装対象と呼びます.
注意:nullとundefinedは対象を包装していないで、彼らの属性を訪問して1つのタイプの誤りをもたらすことができます.
String()、Number()、Boolean()のコンストラクターで包装対象を作成することができます.
==演算子は、元の値とそのパッケージのオブジェクトを同じと見なしますが、=====演算子はそれらを待たないと見なし、typeof演算子によって元の値と他のパッケージのオブジェクトとの違いが見られます.
元の値と可変のオブジェクトへの参照は変更されません.
jsにおける元の値(undefined、null、ブール値、数字、および文字列)は、オブジェクト(配列と関数を含む)と根本的に異なる.
元の値は変更できません.元の値は変更できません.
var s = "hello";
s.toUpperCase();
s // 'hello'
上のコードのsの値は修正されていません.新しい文字列を返しました.原始は比較する価値があります.彼らの価値が等しい時だけ彼らは同じです.
対象の比較は比較に値するものではなく、引用の比較です.たとえ2つの対象が同じ属性と同じ値を含んでも、彼らは待ちたくないです.またかれらが同じ基本的なオブジェクトを引用する時だけ、彼らは同じである.
var a = [];
var b = a;
b[0] = 1;
a[0] // 1
a === b //true
を比較するには、2つの配列の価値比較を行うには、属性値を順次比較しなければならない.機能
equalArays
a
b){
if(a.length)
!=b.length)
return
false;
フォーム(
var
を選択します.
0;i
<a.length;i
++){
if(a[i]
!==b[i]
if(
typeof a[i]
==
「object」
&&&
typeof b[i]
==
「object」
if(
!
equalArays(a[i],b[i]){
return
false;
)
)
else{
return
false;
)
)
)
return
true;
)