12

変数が後でオブジェクトになることがわかっている場合は、次を使用します。

var obj;

しかし、null または未定義として初期化するかどうかは問題ではありません。

var obj = null;

また

var obj = undefined;

私が個人的に使用する文字列の場合:

var str = '';

後で私ができるように

str += 'some text';

たとえばnullを使用すると、「nullsome text」が得られます。

null, undefined, empty string or 0はすべてfalsy値なので、定義されているかどうかを確認します。object, dom node, etc私の変数が..として使用される場合、変数を初期化する正しい方法はどれですか?

4

2 に答える 2

5

理想的なシナリオでは、次のようにスコープの先頭で変数を宣言するだけです。

var foo, bar, obj, domNode;

これらの変数はすべて、値がundefinedであるため、 になります。たとえば、これらの変数の 1 つがループ内の文字列として使用されることがわかっている場合は、 を記述するのではなく、次のように記述します。undefinedfoo = (foo === undefined ? '' : foo) + 'add this';

var foo = '', bar, obj, domNode;

objvar をオブジェクト リテラルとして使用する{my: 'objec', vals: 'here'}場合は、必要なときに割り当てるか、初期化して{}properties を追加しますobj.as = 'you'; obj[foo] = 'go';。DOM 要素への参照を割り当てる場合は、それを保持してくださいundefined。割り当ては無意味なオーバーヘッドを生成するだけです。
あらゆるタイプの参照 (関数オブジェクト、配列、オブジェクトなど) についても同様です。以前の割り当てを上書きするだけなので、割り当てを延期してください。

数値に関しては、undefined + 123は に評価されるNaNので、その場合は に初期化するのが理に0かなっています。ただし、ループカウンターの場合:

var foo, i, obj, arr = [1,2,3];
for (i=0;i<arr.length;i++)
{
    console.log(arr[i]);
}

次と同等です。

var foo, i= 0, arr = [1,2,3];
for (;i<arr.length;i++)
{
    console.log(arr[i]);
}

後者だけは、むやみに複雑に見えます。常識を働かせれば大丈夫です。

変数宣言はスコープの先頭に引き上げられますが、割り当てはそうではないことを知っておいてください。

console.log(foo);//undefined
var foo = 123;
console.log(foo);//123

それは次のように翻訳されているためです。

var foo;
console.log(foo);
foo = 123;
console.log(foo);

では、エンジンによって解釈されるようにコードを記述してみませんか?

于 2013-07-15T11:22:34.297 に答える