色尼玛亚洲综合影院,亚洲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 有趣而詭異的數組,轉載需保留來源!

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

主站蜘蛛池模板: 丽水市| 石城县| 垣曲县| 甘孜| 宣城市| 旌德县| 元阳县| 内黄县| 彭山县| 钦州市| 兴海县| 山丹县| 淄博市| 武宣县| 庆阳市| 三门县| 姜堰市| 杭锦后旗| 峨眉山市| 盐津县| 陇川县| 泸水县| 安吉县| 腾冲县| 娄底市| 乌拉特中旗| 秦皇岛市| 庐江县| 桐梓县| 西藏| 嘉祥县| 库尔勒市| 静宁县| 开江县| 会理县| 横山县| 肇州县| 堆龙德庆县| 东乡县| 洪湖市| 鄄城县|