JS对象
除了 字符串,数字,布尔值(true / false),null 和 undefined 以外,JS中的值都是对象。
对象是属性的无序集合,每个属性都是一个 名/值对。属性名都是字符串,因此可以把对象看作是字符串到值的映射。在其他语言中,也叫 散列(hash),散列表(hashTable),字典(Dictionary),"关联数组"(associative array)。
属性包括名字和值,属性名可以是包含空字符串在内的任意字符串,但对象中不能存在两个同名的属性。
属性值可以是任意Javascript值。
PS:
集合的有序、无序是指插入元素时,保持插入的顺序性,也就是先插入的元素优先放入集合的前面部分。
而排序是指插入元素后,集合中的元素是否自动排序。(例如升序排序)
Java的HashMap、 HashSet、 HashTable 等 基于哈希存储方式的集合是无序的。其它的集合都是有序的。而TreeMap TreeSet 等集合是排序的。
创建对象的方式:
(1)对象直接量:是由若干 名/值对组成的映射表,名/值对中间用冒号分隔,名/值对之间用逗号分隔,整个映射表用大括号括起来。
eg: var book = { "main title" : "JavaScript",
author : { firstname : "David",
subname: "test"
}
};
属性名都是字符串,包括空字符串,一般不用引号括起来,但是如果属性名包含一些特殊字符或者是保留字,则必须用引号括起来。
(2)通过 new 创建对象
new 运算符创建并初始化一个新的对象。 关键字 new后面紧跟一个函数调用。这里的函数称为 构造函数(Constructor)
var o = new Object();
(3) 原型 Prototype
每一个Javascript对象(null除外)都和另一个对象相关联。另一个对象就是原型,每一个对象都从原型继承属性。
所有通过对象直接量建立的对象都具有同一个原型对象,通过代码 Object.prototype获得对原型对象的引用。
通过new关键字和构造函数调用 创建的对象的原型 是 构造函数的prototype属性的值。即 new Object()创建的对象的原型是 Object.prototype属性对应的值。new Array()创建的对象的原型是 Array.prototype属性对应的值。
prototype是一个对象的属性,比如 Object.prototype是对象Object的属性,Array.prototype是对象Array的属性。
(4)Object.create()
Object.create()是一个静态函数,该函数第一个参数是新创建的对象的原型,第二个参数是可以的,用于进一步描述对象的属性。
eg:
1 var o1 = Object.create({x:1, y:2}); // 对象 o1 继承了原型对象{x:1, y:2}的属性x,y。 2 3 var o2 = Object.create(null); //o2是一个没有原型的新对象,不继承任何属性和方法 4 5 var o3 = Object.create(Object.prototype); //o3是一个空对象,原型是 Object.prototype.