首頁  >  文章  >  web前端  >  JavaScript物件、陣列和雜湊表

JavaScript物件、陣列和雜湊表

高洛峰
高洛峰原創
2016-11-28 15:13:331751瀏覽

在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一個特例,看起來像數組,實際上仍是映射);但數組僅能使用下標的方式;

從順序來看:數組是有順序的,映射是無序的;


陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn