jasmine214--love

          只有當你的內心總是充滿快樂、美好的愿望和寧靜時,你才能擁有強壯的體魄和明朗、快樂或者寧靜的面容。
          posts - 731, comments - 60, trackbacks - 0, articles - 0

          進一步理解 javascript對象、數組和哈希表

          Posted on 2010-06-25 13:24 幻海藍夢 閱讀(190) 評論(0)  編輯  收藏 所屬分類: JS
          原文:http://www.k99k.com/javascript.html
          在javascript中,對象實際上就是一個哈希表,比如下面這個user對象:
          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]定位到m
          alert(a[0].name);
          //以下失敗
          alert(m[0]);//映射無法以數組下標的方式訪問
          • 從定位到成員的方法來看,映射使用key來定位其中的成員,而數組使用下標,映射無法使用下標定位,同樣數組也無法使用key(理所當然,根本 就沒有key);
          • 從表示方法來看,映射可以使用類似對象屬性的方式來訪問(如:m.name),也可以使用帶key的[]方式(如:m['name'],這是 javascript一個特例,看上去像數組,實際上仍是映射);但數組僅能使用下標的方式;
          • 從順序來看:數組是有順序的,映射是無序的;
          主站蜘蛛池模板: 城步| 上蔡县| 东兰县| 扶余县| 乌审旗| 日土县| 南和县| 大丰市| 岱山县| 吉木萨尔县| 永福县| 永德县| 安西县| 丹凤县| 南充市| 麻城市| 绥芬河市| 莆田市| 平泉县| 仁怀市| 凤翔县| 寿宁县| 朝阳区| 石柱| 宁都县| 南投县| 望城县| 万全县| 社旗县| 务川| 伊金霍洛旗| 福泉市| 天镇县| 永兴县| 九寨沟县| 青河县| 鄂托克前旗| 新闻| 屏东市| 绥德县| 山阳县|