実行結果は、オブジェクト obj の typeof を示しています。と配列の配列の値はすべて「オブジェクト」であるため、正確に判断することはできません。このとき、instanceof を呼び出すことで、さらに判断することができます:
コードの最初の行は false を返し、2 行目は true を返します。したがって、typeof演算子とinstanceof演算子を組み合わせて判断することができます。
前のセクションでは、数値やブール値などの基本的なデータ型はメモリ内に固定されます。では、変数を通じて基本的なデータ型に直接アクセスします。オブジェクト、配列、関数などの参照型の場合、そのサイズには原則として制限がないため、参照自体が実際のストレージ複合体の場所を指すアドレスになります。オブジェクト。
変数が定義されている領域がそのスコープです。グローバル変数にはグローバル スコープがあり、関数内で宣言された変数などにはローカル スコープがあり、関数の外部から直接アクセスすることはできません。の。例:
variable = "in";//この変数の前に var キーワードがないことに注意してください
print(variable)}
func() ;
print(variable);//グローバル変数変数が変更されます
関数 func で変数がキーワード var なしで使用されているため、デフォルトではグローバル オブジェクトの変数属性を操作する (変数の値を in に変更する) ため、このコードは次のように出力されます:
in
in
2.3 演算子
演算子は通常見落とされがちですが、いくつかの奇妙な演算子があります。 JavaScript では、演算子の組み合わせ率や機能によって説明する必要があるかもしれません。JS プログラミングの経験を持つ多くの人は依然として混乱を避けられません。
このセクションでは主に次の演算子について説明します。
2.3.1 角括弧演算子 ([])
[] 演算子は配列オブジェクトとオブジェクトで使用できます。添字で配列から値を取得します:
var array = ["one", "two", "three", "four"];
array[0]
一般的に言えば、オブジェクト内では、属性の値は、次のようなドット (.) 演算子を通じて取得されます。
var object = {
field : "self",
printInfo : function(){
print(this.field);
}
}
object.field;
object.printInfo();
しかし、そのような状況を考慮すると、オブジェクトを走査するとき、属性のキーについては何もわかりません。ドット (.) を介してアクセスしますか? 現時点では、[] 演算子を使用できます:
for(var key in object){
print(key ":" object[key]);
}
実行結果は次のとおりです。
field:slef
printInfo:function (){
print(this.field)
}
2.3.2 ドット演算子 (.)
ドット演算子の左側はオブジェクト (属性のコレクション) で、右側は属性名です。左側のオブジェクトの属性に加えて、右側の値も指定できることに注意してください。
var object = {
field : "self",
printInfo : function(){
print(this.field);
outer:{
inner : "内部テキスト",
printInnerText : function(){
print(this.inner)
}
}
}
object.outter.printInnerText();
この例では、outter をオブジェクトの属性として使用すると同時に、printInnerText() のオブジェクトとしても使用します。
2.3.3 == と === と != と !==
演算子 == は等しいものとして読み取られ、演算子 === は等しいものとして読み取られます。これら 2 つの演算子演算は JavaScript コードでよく見られますが、その意味はまったく同じではありません。つまり、等価演算子はオペランドの両側で型変換を実行しますが、等価演算子は実行しません。例で説明します。
print(1 == true);
print("" == false); === false);
print(null == 未定義);
print(null === 未定義);
コードをコピー
false
true
偽
等価演算子と等価演算子の規則は次のとおりです。
等価演算子
オペランドの型が同じ場合、2 つのオペランドの値が等しいかどうかが等価であると判断されます。
オペランドの型が異なる場合は、次の状況に従って判断されます:
◆ null
◆ どちらか一方が数値、もう一方が文字列である場合、その文字列を数値に変換して比較します
◆ どちらか一方が true の場合は変換しますまず 1 に変換します (false の場合は 0 に変換します)
の比較◆ 一方の値がオブジェクトで、もう一方が数値/文字列の場合、オブジェクトを元の値に変換します (toString() または valueOf( 経由) )メソッド)
◆その他の場合は、直接 false を返します
等価演算子
オペランドの型が異なる場合は値判定を行わず、 false を返します
オペランドの型が同じ場合、次の状況に従って判断されます。
◆ 両方とも数値です。 値が同じ場合、2 つは次のとおりです。等しい (例外があり、NaN は等しくありません)、それ以外の場合は等しくありません
◆ 他のプログラミング言語と同様、文字列の値が等しくない場合は、それらはすべて文字列です。
◆ これらはすべてブール値であり、値がすべて true/false の場合は等しく、そうでない場合は等しくありません
◆ 2 つのオペランドが同じオブジェクト (配列、関数) を参照する場合、それらは完全に等しくなります。そうでない場合、それらは等しくありません。
◆ 2 つのオペランドが同じオブジェクト (配列、関数) を参照する場合。 ) 両方が null/未定義の場合は等しく、それ以外の場合は等しくありません
例:
var obj = {
id : "self",
name : "object"
}; obj;
var ob = obj;
print(oa == ob);
は次のようになります。 >true
true
オブジェクトの例を見てみましょう:
コードをコピー
return "オブジェクト 1";
}
}
var obj2 = "オブジェクト 1";
print(obj1 == = obj2);
戻り値は次のとおりです:
true
false
obj1 はオブジェクトであり、obj2 はまったく異なる構造を持つ文字列です。等価演算子を使用して判断すると、この 2 つはまったく同じになります。これは、obj1 がトップレベル オブジェクトの toString() メソッドをオーバーロードするためです。
!= は !== と等しくありませんが、==/!== の逆です。したがって、JavaScript で等価/等価、不等価/不等価を使用する場合は、型変換に注意する必要があります。これにより、デバッグが困難な一部のバグを回避できる等価/不等価を使用して判断することをお勧めします。