FOR SE

文系の学部から新卒でメーカー系のSIerに就職。技術・スキルがないためブログを通して勉強。その後、IT業界の業界知識が活かせる人材業界に就職

このエントリーをはてなブックマークに追加

【Javascript】なぜ、「var a = new Array(x,y,z)」を書かない方がいいのか

【今回の内容】

掲題の通り、

なぜ、Array コンストラクタを使用した
 

「var a = new Array(x,y,z)」を書かない方がいいのか」


について書いていきます。
こちらのドキュメントを読んでいて「ハッと」したので、まとめました。


Google JavaScript Style Guide 和訳 — Google JavaScript Style Guide 和訳




【内容】

■問い

 :なぜ、「var a = new Array(x,y,z)」を書かない方がいいのか」



結論:

 引数の値を変更した場合に、意図しない処理となる恐れがあるため。
 具体的には、引数が複数ある場合は、配列の値として引数が処理されます。
 しかし、引数が単一の場合は、「配列の長さ」として処理されてしまいます。

対策:

 配列のリテラルでコーディングします。
 ※どのようにコーディングするかは冒頭に紹介した資料を参照するかまたは、
 下記のソースを参考してください。

//■非推奨の書き方
  //コンストラクタの引数が一つの場合は、配列に格納する値としてではなく
  //配列の長さとして処理される
  var box1 = new Array(5,10,15);
  var box2 = new Array(5); //ほかの人かコンストラクタの引数の数をかえてしまった場合
  console.log(box1.length); //配列の長さが3である
  console.log(box2.length); //配列の長さが意図しない長さになってしまう。
  console.log(box1[0]); // 値は5
  console.log(box2[0]); // 値はなし(undefined)



//■推奨される書き方
  //配列リテラルを使う
  var box10 = [10,20,30];
  var box15 = [10];
  console.log(box10.length); //配列の長さが3である
  console.log(box15.length); //配列の長さは想定通り1
  console.log(box10[0]); // 値は10
  console.log(box15[0]); // 値は10


   


f:id:forsebyse:20141124193430p:plain   

.hatena-module:nth-of-type(10) { background: transparent; } .hatena-module:nth-of-type(10) .hatena-module-title{ display: none; } .hatena-module:nth-of-type(10) .hatena-module-body { padding: 0; }