0

私がテストしたブラウザでは、5つの要素var a = new Array(5);の配列を返します。に等しいundefinedので、次のようにテストする限り、配列は要素で初期化されていると見なすことができます。undefinedfalsefalse

if (a[0]) console.log("the element is no longer falsy");
else a[0] = true;

Arrayを値で初期化するのは安全な方法falseですか、それとも避けるべきハックですか?

編集:私の目標は、私の例のように、それを偽の値に初期化することです。new Array()それが信頼できる方法であることを確認したいと思います。

4

3 に答える 3

3

Javascriptで配列を初期化する場合、その配列には要素がありません。つまり、何かを配置しない限り、どの位置にも何も存在しません。あなたが持っている唯一のものはあなたがlength指定した数に設定されています。

要素を読み取ってアクセスし、そこに何も存在しない場合は、次のようになりますundefined(存在しないオブジェクトのメンバーにアクセスした場合に発生します)。

ただし、まったく存在しない要素は、に設定されている要素と完全に同じではないことに注意してくださいundefined。例えば:

var x = new Array(5);
console.log(x[2]);                 // ==> Output is "undefined"
console.log(x.indexOf(undefined)); // ==> Output is "-1" (not present)
x[2] = undefined;
console.log(x.indexOf(undefined)); // ==> Output now is "2"

true要素がに配置されたときに考慮されるかどうかだけを気にする場合、配列はそのコンテキストにあるものifを含むように一目で表示されます。undefinedfalse

ただし、特に自動変換のために、Javascriptの非常に微妙な概念であるfalseか、または非常に微妙な概念であることに注意してくださいtrue...たとえば

console.log([] ? 1 : 2);  // Output is "1", an empty array is "true"
console.log([] == false); // output is "true" (so it's also equal to false!)
于 2013-01-15T22:58:19.243 に答える
1

これが機能するために配列を初期化する必要はありません。

var array = [];
console.log(array[0]); // undefined
console.log(!!array[0]); // false (undefined is _falsy_)
array.push("foo");
console.log(array[0]); // "foo"
console.log(!!array[0]); // true ("foo" is _truthy_).
array[1] = "bar";
console.log(array[1]); // "bar"
console.log(array.length); // 2
于 2013-01-15T22:52:19.440 に答える
1

未定義の値は と「等しく」ありません。 のようにテストすると、falseと見なされます。if(undefined)

安全かどうかは、使用しているコードに大きく依存します。値が really かどうかを確認したい場合はfalse、厳密な等価性と check を使用if(val === false)して、他の誤った値と間違えないようにしてください。

変数をチェックしてtypeof、期待どおりであることを確認することもできます。

typeof false;      // "boolean"
typeof undefined   // "undefined"
于 2013-01-15T22:42:36.747 に答える