進一步理解 javascript對象、數組、映射和雜湊表

來源:互聯網
上載者:User
所有的javascript對象,包括Array對象在內實際上就是一個雜湊表, 屬性名稱就是雜湊表的key,而屬性的值就是雜湊表的值。 Array對象與通常意義的數組對象並不相關,通常的數組僅能通過下標來定位

function user(n, a){    this.name = n;    this.age = a;    this.toString = function() {        return 'Name:' + this.name + ', Age:' + this.age;    }}var u = new user('tom', 18);for (var k in u) {    alert('key: ' + k + ', value:' + u[k]);}

稍作改動,使用Array對象來代替對象:

var user = new Array();user['name']='tom';user['age']=18;user['toString']=function(){return 'Name:' + this.name + ', Age:' + this.age;}alert(user.toString());

更簡單的寫法:

var u = {'name':'tom','age':18}u.toString = function(){return 'Name:' + this.name + ', Age:' + this.age;};alert(u.toString());

由以上這些代碼可以看出:

  • 所有的javascript對象,包括Array對象在內實際上就是一個雜湊表,屬性名稱就是雜湊表的key,而屬性的值就是雜湊表的值。
  • Array對象與通常意義的數組對象並不相關,通常的數組僅能通過下標來定位,而javascript中的Array卻可以像雜湊表一個通過key來定位集合中的對象。
  • 可以將一個function直接作為值賦給對象的“雜湊表”。

前端時間看了阮一峰的 《資料類型與Json格式》 一文,提到在yaml描述資料時,將所有的資料分成三種類型:

  • 第一種類型是scalar(標量),一個單獨的string或數字,比如“北京”這個單獨的詞。
  • 第二種類型是sequence(序列),若干個相關的資料按照一定順序並列在一起,又叫做array(數組)或List(列表),比如“北京,東京”。
  • 第三種類型是map(映射),一個鍵/值對(Key/value),又稱作hash(散列)或dictionary(字典),比如“首都:北京”。

可能這三種類型我們都很熟悉,但文中提到的對json的四條規則卻正好剖析了javascript描述資料的方式:

  • 並列的資料之間用逗號(“,”)分隔。
  • 映射用冒號(“:”)表示。
  • 並列資料的集合(數組)用方括弧('[]')表示。
  • 映射的集合(對象)用大括弧(“{}”)表示。

有了這四條規則(再加上對function的理解),對於很多看上去非常“詭異”的寫法,都可以理解了。因此,一個javascript對象,實際上就是一個數組或是映射。
關於數組與映射的不同,可以看下面這個例子:

var m = {name:'keel',age:5}var a = [m,'sss',3];//以下請求成功定位到name屬性alert(m['name']);alert(a[0]['name']);//a[0]定位到malert(a[0].name);//以下失敗alert(m[0]);//映射無法以數組下標的方式訪問
  • 從定位到成員的方法來看,映射使用key來定位其中的成員,而數組使用下標,映射無法使用下標定位,同樣數組也無法使用key(理所當然,根本就沒有key);
  • 從表示方法來看,映射可以使用類似對象屬性的方式來訪問(如:m.name),也可以使用帶key的[]方式(如:m['name'],這是javascript一個特例,看上去像數組,實際上仍是映射);但數組僅能使用下標的方式;
  • 從順序來看:數組是有順序的,映射是無序的;

from:http://ipmtea.net/javascript/201007/16_128.html

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.