arguments変数を本物の配列に変換する方法ではArray.applyを使ってarguments変数を配列に変換した。
でも、Function.applyメソッドの第2引数は基本的には配列ってことになってる。
配列を作るために配列を渡すってのは変だね。applyメソッドって、配列じゃなくても受け取れるようだ。
Function.prototype.apply() JavaScript MDN
うーん、どうやらプロパティとしてlengthを持っていて、0以上、length未満の数字を名称としたプロパティを持ったオブジェクトであればいいみたい。
プロパティ名に数値リテラルが使えるところに違和感があるけど、内部的には文字列に変換されるみたいだね。
メンバー演算子 プロパティ名 JavaScript MDN
lengthを超えたインデックスのプロパティや、歯抜けになってる場合はどうなるんだろう。
lengthを超えたプロパティや歯抜けになっているプロパティは無視されるみたい。
配列リテラルでもこんな書き方ができるから、JavaScriptの配列は歯抜けになっててもいいってことなのかな。
でも、Function.applyメソッドの第2引数は基本的には配列ってことになってる。
配列を作るために配列を渡すってのは変だね。applyメソッドって、配列じゃなくても受け取れるようだ。
Function.prototype.apply() JavaScript MDN
うーん、どうやらプロパティとしてlengthを持っていて、0以上、length未満の数字を名称としたプロパティを持ったオブジェクトであればいいみたい。
var arr = Array.apply(null, { length : 3, 0 : 'orange', 1 : 'banana', 2 : 'grape' }); console.log(arr); // orange,banana,grape
プロパティ名に数値リテラルが使えるところに違和感があるけど、内部的には文字列に変換されるみたいだね。
メンバー演算子 プロパティ名 JavaScript MDN
lengthを超えたインデックスのプロパティや、歯抜けになってる場合はどうなるんだろう。
var arr2 = Array.apply(null, { length : 2, 0 : 'orange', 1 : 'banana', 2 : 'grape' }); console.log(arr2); // orange,banana console.log(arr2[2]); // undefined var arr3 = Array.apply(null, { length : 3, 0 : 'orange', // 1 : 'banana', 2 : 'grape' }); console.log(arr3); // orange,,grape console.log(arr3[1]); // undefined
lengthを超えたプロパティや歯抜けになっているプロパティは無視されるみたい。
配列リテラルでもこんな書き方ができるから、JavaScriptの配列は歯抜けになっててもいいってことなのかな。
console.log(['orange', , 'grape']); // orange,,grape
0 件のコメント:
コメントを投稿