JavaScript对象详解

时间:2023-12-28 10:36:02

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

我们可以看到,一个变量的属性值改变之后,另外一个引用了该对象的对象相应的属性值也跟着改变了。所谓引用,就是一个对象把自己存放东西的地方告诉了另外一个对象,另外一个对象下次要找什么东西的时候就跑到这个地方去找,如果其中一个对象对东西进行了变动,另外一个对象也可以看到(这就是我们在最前面提到“对象是可以改变的”原因)。总之,他们拥有同一个资源。

对象数据属性的特性

每一个对象数据属性不仅仅只是“属性/方法:值”对,它还包含其他三个特性:

    1.   
Configurable:表示这个属性是否可以被delete操作符删除。
    2.       Enumerable: 是否可以被for..in语句枚举出来。
    3.       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");
    }
}
2.构造器(函数)方式
一个构造器就是一个初始化新的对象的一个函数。我们通过“new”关键字来调用这个构造函数。
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创建对象的方式》

参考资料:

http://javascriptissexy.com/javascript-objects-in-detail/