JavaScript中的數據類型作為javascript的核心,我們經常要用到,也是最基礎的。 javascript中有非常復雜的數據類型:包括對象(Object)數據類型,還有五個基本數據類型(Number, String, Boolean, Undefined, Null)。注意,這些基礎的數據類型都是“不可改變的”(下文中將要解釋),而對象是“可改變的”。
什么是對象(Object)?
一個對象是由一個或者多個基本數據類型或者引用數據類型組成的一個集合。組成集合的每一項由“屬性/方法:值”的方式來設定這個對象的屬性和方法,每一個屬性/方法必須是獨一無二的字符串或者數字。
舉一個簡單的例子:
var myFirstObject = {firstName: "Zhou", favoriteAuthor:"Nicholas"};
上面我們定義了一個對象-myFirstObject,他擁有firstName和favoriteAuthor兩個屬性,如果我們要訪問的他話可以通過myFirstObject.firstName或者myFirstObject.favoriteAuthor或者myFirstObject[“firstName”]的形式來訪問屬性。但是,如果我們要訪問的屬性/方法名是一個數字,那么我們必須采用第二種方式(方括號方式)訪問!否則會出錯。
var ageGroup = {30: "Children", 100:"Very Old"};
console.log(ageGroup.30) // This will throw an error
// This is how you will access the value of the property 30, to get value "Children"
console.log(ageGroup["30"]); // Children
所以,一般情況下我們最好不要采用數字作為屬性/方法名。
引用數據類型和基本數據類型的區別
一個主要的區別在於:引用數據類型的值存儲的是一個引用而非真正的數值!我們先來看一個基本數據類型的例子:
// The primitive data type String is stored as a value
var person = "Kobe";
var anotherPerson = person; // anotherPerson = the value of person
person = "Bryant"; // value of person changed
console.log(anotherPerson); // Kobe
console.log(person); // Bryant
由於基本數據類型的賦值操作是通過傳值的方式來賦值的。所以,他們存儲的數據都是相互獨立,互不干擾的,一個變量數字改變跟另一個變量沒有半毛錢關系。下面我們再來對照看一個引用數據類型的例子:
var person = {name: "Kobe"};
var anotherPerson = person;
person.name = "Bryant";
console.log(anotherPerson.name); // Bryant
console.log(person.name); // Bryant
我們可以看到,一個變量的屬性值改變之后,另外一個引用了該對象的對象相應的屬性值也跟着改變了。所謂引用,就是一個對象把自己存放東西的地方告訴了另外一個對象,另外一個對象下次要找什么東西的時候就跑到這個地方去找,如果其中一個對象對東西進行了變動,另外一個對象也可以看到(這就是我們在最前面提到“對象是可以改變的”原因)。總之,他們擁有同一個資源。
對象數據屬性的特性
每一個對象數據屬性不僅僅只是“屬性/方法:值”對,它還包含其他三個特性:
-
- Configurable:表示這個屬性是否可以被delete操作符刪除。
- Enumerable: 是否可以被for..in語句枚舉出來。
- Writable: 是否可以被改變。
注意:ECMAScript 5才支持對以上屬性的訪問。
創建對象
有兩種普通創建對象的方法:
1.對象字面量方式
這是最普通,也是最簡單的創建對象的方式:
// This is an empty object initialized using the object literal notation
var myBooks = {};
// This is an object with 4 items, again using object literal
var mango = {
color: "yellow",
shape: "round",
sweetness: 8,
howSweetAmI: function () {
console.log("Hmm Hmm Good");
}
}
function Person(name, age){
this.name = name;
this.age = age;
this.sayName = function(){
console.log(this.name);
};
}
var person1 = new Person("zhouquan", 21);
person1.sayName(); //zhouquan
更多創建對象的方式請看我的一篇文章《javascript創建對象的方式》
參考資料: