亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Javascript的數(shù)組與字典用法與遍歷對象的技巧

 更新時間:2012年11月07日 10:02:57   投稿:whsnow  
Javascript 的數(shù)組Array,既是一個數(shù)組,也是一個字典(Dictionary)。先舉例看看數(shù)組的用法

Javascript 的數(shù)組Array,既是一個數(shù)組,也是一個字典(Dictionary)。先舉例看看數(shù)組的用法。

復制代碼 代碼如下:

var a = new Array();
a[0] = "Acer";
a[1] = "Dell";
for (var i = 0; i < a.length; i++) {
alert(a[i]);
}

下面再看一下字典的用法。
復制代碼 代碼如下:

var computer_price = new Array();
computer_price["Acer"] = 500;
computer_price["Dell"] = 600;
alert(computer_price["Acer"]);

我們甚至可以同樣象上面那樣遍歷這個數(shù)組(字典)
復制代碼 代碼如下:

for (var i in computer_price) {
alert(i + ": " + computer_price[i]);
}

這里的 i 即為字典的每個鍵值。輸出結(jié)果為:
Acer: 500
Dell: 600

另外 computer_price 是一個字典對象,而它的每個鍵值就是一個屬性。也就是說 Acer 是 computer_price 的一個屬性。我們可以這樣使用它:
computer_price.Acer

再來看一下字典和數(shù)組的簡化聲明方式。
var array = [1, 2, 3]; // 數(shù)組
var array2 = { "Acer": 500, "Dell": 600 }; // 字典
alert(array2.Acer); // 500
這樣對字典的聲明是和前面的一樣的。在我們的例子中,Acer又是鍵值,也可是作為字典對象的屬性了。

下面再來看看如何對一個對象的屬性進行遍歷。我們可以用 for in 來遍歷對象的屬性。
復制代碼 代碼如下:

function Computer(brand, price) {
this.brand = brand;
this.price = price;
}
var mycomputer = new Computer("Acer", 500);
for (var prop in mycomputer) {
alert("computer[" + prop + "]=" + mycomputer[prop]);
}

上面的代碼中,Computer有兩個屬性,brand 和 price.所以輸出結(jié)果為:
computer[brand]=Acer
computer[price]=500
上面的這種用法可以用來查看一個對象都有哪些屬性。當你已經(jīng)知道Computer對象有一個brand屬性時,就可以用
mycomputer.brand
或 mycomputer[brand]
來獲取屬性值了。
總結(jié):Javascript中的數(shù)組也可以用來做字典。字典的鍵值也是字典對象的屬性。對一個對象的屬性進行遍歷時,可以用for in。

數(shù)組遍歷與屬性
雖然在 JavaScript 中數(shù)組是是對象,但是沒有好的理由去使用 for in 循環(huán) 遍歷數(shù)組。
相反,有一些好的理由不去使用 for in 遍歷數(shù)組。
注意: JavaScript 中數(shù)組不是 關(guān)聯(lián)數(shù)組。
JavaScript 中只有對象 來管理鍵值的對應關(guān)系。但是關(guān)聯(lián)數(shù)組是保持順序的,而對象不是。
由于 for in 循環(huán)會枚舉原型鏈上的所有屬性,唯一過濾這些屬性的方式是使用hasOwnProperty 函數(shù),
因此會比普通的 for 循環(huán)慢上好多倍。
遍歷
為了達到遍歷數(shù)組的最佳性能,推薦使用經(jīng)典的 for 循環(huán)。
復制代碼 代碼如下:

var list = [1, 2, 3, 4, 5, ...... 100000000];
for(var i = 0, l = list.length; i < l; i++) {
console.log(list[i]);
}

上面代碼有一個處理,就是通過 l = list.length 來緩存數(shù)組的長度。
雖然 length 是數(shù)組的一個屬性,但是在每次循環(huán)中訪問它還是有性能開銷。
可能最新的 JavaScript 引擎在這點上做了優(yōu)化,但是我們沒法保證自己的代碼是否運行在這些最近的引擎之上。
實際上,不使用緩存數(shù)組長度的方式比緩存版本要慢很多。
length 屬性
length 屬性的 getter 方式會簡單的返回數(shù)組的長度,而 setter 方式會截斷數(shù)組。
復制代碼 代碼如下:

var foo = [1, 2, 3, 4, 5, 6];
foo.length = 3;
foo; // [1, 2, 3]
foo.length = 6;
foo; // [1, 2, 3]

譯者注:
在 Firebug 中查看此時 foo 的值是: [1, 2, 3, undefined, undefined, undefined]
但是這個結(jié)果并不準確,如果你在 Chrome 的控制臺查看 foo 的結(jié)果,你會發(fā)現(xiàn)是這樣的: [1, 2, 3]
因為在 JavaScript 中 undefined 是一個變量,注意是變量不是關(guān)鍵字,因此上面兩個結(jié)果的意義是完全不相同的。
// 譯者注:為了驗證,我們來執(zhí)行下面代碼,看序號 5 是否存在于 foo 中。
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 false
foo[5] = undefined;
5 in foo; // 不管在 Firebug 或者 Chrome 都返回 true
為 length 設置一個更小的值會截斷數(shù)組,但是增大 length 屬性值不會對數(shù)組產(chǎn)生影響。
結(jié)論
為了更好的性能,推薦使用普通的 for 循環(huán)并緩存數(shù)組的 length 屬性。
使用 for in 遍歷數(shù)組被認為是不好的代碼習慣并傾向于產(chǎn)生錯誤和導致性能問題。

相關(guān)文章

  • IE innerHTML,outerHTML所引起的問題

    IE innerHTML,outerHTML所引起的問題

    我們在用javascript創(chuàng)建一個遮蓋層(div)后,如果點擊關(guān)閉用到了
    2009-06-06
  • canvas 繪制圓形時鐘

    canvas 繪制圓形時鐘

    本文主要分享了利用canvas如何繪制圓形時鐘的示例代碼,具有很好的參考價值,下面跟著小編一起來看下吧
    2017-02-02
  • uni-app應用配置manifest.json最全最詳細配置

    uni-app應用配置manifest.json最全最詳細配置

    這篇文章主要給大家介紹了關(guān)于uni-app應用配置manifest.json最全最詳細配置,manifest.json文件是UniApp開發(fā)中用來配置應用信息的重要文件,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2024-01-01
  • IE6-8中Date不支持toISOString的修復方法

    IE6-8中Date不支持toISOString的修復方法

    這篇文章主要介紹了IE6-8中Date不支持toISOString的修復方法,需要的朋友可以參考下
    2014-05-05
  • JS中字符串trim()使用示例

    JS中字符串trim()使用示例

    本文主要給大家介紹的是javascript中的擴展方法字符串trim()的使用指南,十分的簡單實用,有需要的小伙伴可以參考下。
    2015-05-05
  • 基于javascript實現(xiàn)圖片滑動效果

    基于javascript實現(xiàn)圖片滑動效果

    這篇文章主要為大家詳細介紹了基于javascript實現(xiàn)圖片滑動效果的相關(guān)資料,具有一定的參考價值,感興趣的朋友可以參考一下
    2016-05-05
  • 微信小程序多表聯(lián)合查詢的實現(xiàn)詳解

    微信小程序多表聯(lián)合查詢的實現(xiàn)詳解

    小程序設計中,通常會根據(jù)業(yè)務來做多表的拆分,多表拆分一般是根據(jù)業(yè)務的特點進行拆分。比如我們在文章關(guān)注的業(yè)務中,會將文章和關(guān)注信息拆分成一對多的表關(guān)系。初學者可能對一對一、一對多、多對多的設計概念不是特別清楚
    2022-08-08
  • Javascript如何實現(xiàn)雙指控制圖片功能

    Javascript如何實現(xiàn)雙指控制圖片功能

    這篇文章主要介紹了Javascript如何實現(xiàn)雙指控制圖片功能,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2020-02-02
  • 理解JavaScript中Promise的使用

    理解JavaScript中Promise的使用

    這篇文章主要為大家介紹了JavaScript中Promise的使用,本文先介紹 Promises 相關(guān)規(guī)范,然后再通過解讀一個迷你的 Promises 以加深理解,感興趣的小伙伴們可以參考一下
    2016-01-01
  • 探究一道價值25k的螞蟻金服異步串行面試題

    探究一道價值25k的螞蟻金服異步串行面試題

    這篇文章主要介紹了探究一道價值25k的螞蟻金服異步串行面試題,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-08-08

最新評論