配列に「0」が含まれていないように見えても、配列に「0」が存在するかどうかをテストすると、Javascriptの「in」演算子がtrueを返すのはなぜですか。
たとえば、これはtrueを返し、意味があります。
var x = [1,2];
1 in x; // true
これはfalseを返し、意味があります。
var x = [1,2];
3 in x; // false
ただし、これはtrueを返し、理由がわかりません。
var x = [1,2];
0 in x;
配列に「0」が含まれていないように見えても、配列に「0」が存在するかどうかをテストすると、Javascriptの「in」演算子がtrueを返すのはなぜですか。
たとえば、これはtrueを返し、意味があります。
var x = [1,2];
1 in x; // true
これはfalseを返し、意味があります。
var x = [1,2];
3 in x; // false
ただし、これはtrueを返し、理由がわかりません。
var x = [1,2];
0 in x;
値ではなく、インデックスまたはキーを参照します。 0
および1
は、その配列の有効なインデックスです。"length"
およびを含む有効なキーもあります"toString"
。試してみてください2 in x
。これは誤りです(JavaScript配列は0インデックスであるため)。
MDNドキュメントを参照してください。
オペレーターは、in
あなたが思っていることをしません。指定されたオペランドがオブジェクトのプロパティである場合、in
演算子は戻ります。配列の場合、オペランドが有効なインデックスtrue
であるかどうかを返します(配列を、プロパティの名前が0、1、2、...である特殊なケースのオブジェクトと考えると意味があります)。true
たとえば、次のことを試してください。
var x=[1,4,6];
alert(2 in x);
true
「2」は配列への有効なインデックスであるため、も返されます。同様に、「0」は配列へのインデックスであるため、も返しますtrue
。
Javascriptのin
演算子は、値が配列に含まれているかどうかをチェックしません。オブジェクトにプロパティまたはインデックスがあるかどうかをチェックします。だからvar x = [4,5]; 4 in x; //false 1 in x; //true
。
長さはxのプロパティであるため、"length" in x; //true
IEを除く最新のブラウザは、配列内の値を見つけることができるいくつかのメソッドをサポートしています。
indexOfおよびlastIndexOfは、配列内の引数と完全に一致する最初(または最後)のインデックスを返します。一致する要素が見つからなかった場合は-1を返します。
if(A.indexOf(0)!= -1){
// the array contains an element with the value 0.
}
IEおよび古いブラウザに一方または両方のメソッドを追加できます-
if(![].indexOf){
Array.prototype.indexOf= function(what, i){
i= i || 0;
var L= this.length;
while(i< L){
if(this[i]=== what) return i;
++i;
}
return -1;
}
Array.prototype.lastIndexOf= function(what, i){
var L= this.length;
i= i || L-1;
if(isNaN(i) || i>= L) i= L-1;
else if(i< 0) i += L;
while(i> -1){
if(this[i]=== what) return i;
--i;
}
return -1;
}
}
JSではArray.prototype.includesを使用する前にPythonを使用していると思います
let x = [1, 2]
x.includes(1) // true
演算子で、値ではなく配列のインデックスを確認してください
0 in [1, 2] // true
2 in [1, 2] // false
for in
オブジェクトのプロパティを繰り返すjsループと同様に、in
オペレーターは、指定されたプロパティが指定されたオブジェクトまたはそのプロトタイプチェーンにあるかどうかを確認します。要素が配列内にあるかどうかはチェックしません。
xが配列であるとしましょう。これを使用して、nodejs/modern-browsersx.includes(element)
に戻ります。true/false
は、xがjsなのでloop
使用します。for(let element of x)
iterable