色尼玛亚洲综合影院,亚洲3atv精品一区二区三区,麻豆freexxxx性91精品,欧美在线91

javascript 有趣而詭異的數組

年前在重寫淘寶旺鋪里的會員卡腳本的時候,無意中發現了一個有趣的事情。代碼類似:
復制代碼 代碼如下:
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 “Associative Arrays” Considered Harmful》):

JavaScript arrays (which are meant to be numeric) are often used to hold key/value pairs. This is bad practice. Object should be used instead.

//大意:數組只支持數字的,鍵值對應使用于對象上。

There is no way to specify string keys in an array constructor. //在數組構造函數中無法定義字符串鍵值
There is no way to specify string keys in an array literal. //在數組字面量中無法定義字符串鍵值
Array.length does not count them as items. // Array.length 不會計算字符串鍵值
進一步窺探數組:

1、數組可以根據所賦的值自動調整大小
復制代碼 代碼如下:
var ar = [];
ar[2] = 1;
alert(ar.length)

發現這個數組的長度為 3,就像一個經過初始化的數組一樣。所有沒有賦值的數組對象,都將被定義為 undefined 。

擴展閱讀:

  • Javascript Array Fun》

2、可使用 “The Miller Device” 方法來判斷是否是數組

復制代碼 代碼如下:
function isArray(o) { return Object.prototype.toString.call(o) === '[object Array]';}

“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 function(obj){
return Object.prototype.toString.call(obj) == “[object "+type+"]“;
}
})(c);
}

擴展閱讀:

  • 《The Miller Device》
  • 《isArray: Why is it so bloody hard to get right?》

JavaScript技術javascript 有趣而詭異的數組,轉載需保留來源!

鄭重聲明:本文版權歸原作者所有,轉載文章僅為傳播更多信息之目的,如作者信息標記有誤,請第一時間聯系我們修改或刪除,多謝。

主站蜘蛛池模板: 浮梁县| 屏东县| 金沙县| 崇阳县| 金山区| 云梦县| 宝坻区| 金溪县| 荃湾区| 毕节市| 乐陵市| 射阳县| 清远市| 崇义县| 和田县| 平阳县| 岑溪市| 巴马| 景德镇市| 汝城县| 雷山县| 维西| 彭山县| 专栏| 普洱| 阆中市| 嘉黎县| 县级市| 榆林市| 壤塘县| 柘城县| 鄂伦春自治旗| 正宁县| 广宁县| 沙雅县| 深泽县| 祁门县| 锡林浩特市| 宜良县| 临洮县| 大姚县|