何年も前、淘宝網王埔の会員カードのスクリプトを書き直しているときに、偶然興味深いものを発見しました。コードは同様です:
var associative_array = new Array();
associative_array["one"] = "1";
associative_array["two"] = "2";
associative_array["three"] = "3";
if (associative_array.length > ; 0)
{ // to do}
associative_array.length は常に 0 に等しいことがわかりますが、当時は少し混乱しました。これは、IE が CSS 属性の display:inline -block をサポートしていると誰もが考えているのと同じであり、まったくの偶然と誤解であることに気づきました。
実際 (《JavaScript の「連想配列」は有害であると考えられている" より引用):
JavaScript 配列 (数値であることを意図したもの) は、キーと値のペアを保持するためによく使用されます。これは、代わりにオブジェクトを使用する必要があります。
//一般的な考え方: 配列は数値のみをサポートし、オブジェクトではキーと値の対応が使用されます。
配列コンストラクターで文字列キーを指定する方法はありません。 //配列コンストラクターで文字列キー値を定義することはできません
配列で文字列キーを指定する方法はありません。 literal . // 文字列キーは配列リテラルでは定義できません
Array.length は文字列キーをカウントしません
さらに配列を調べます:
1. 割り当てられた値に従って配列のサイズを自動的に変更できます
var ar = [];
ar[2] = 1;
alert(ar.length)
この配列の長さは 3 であることがわかります、初期化された Same as 配列と同じです。割り当てのないすべての配列オブジェクトは未定義として定義されます。
詳細な読書:
2. 「The Miller Device」 メソッドを使用して、それが配列であるかどうかを判断できます
function isArray(o) { return Object.prototype.toString.call(o) === '[オブジェクト配列]';}
" 「The Miller Device」の素晴らしい使い方は、配列を決定することだけではありません:
var is = {
types : ["Array","RegExp","Date","Number","String","Object"]
};
for(var i= 0,c;c=is.types[i ];){
is[c] = (function(type){
return 関数(obj){
return Object.prototype.toString.call( obj) == "[オブジェクト " type "]"
}
})(c); 🎜>
詳細な読書:
《ミラー装置》-
《isArray: 正しく理解するのが非常に難しいのはなぜですか?》
-