对象的情况和数组比较像,不同的是,他的键值类型是自定义的。也就是说,索引方式不局限于数字了,可使用另外一些更人性化的键值。如age等。
~~~
//对象文本标识法
var xiao={
name:'xiaoming',
age:12
};
~~~
变量名,括号,逗号分割,键值冒号分割。
下面的情况下,属性名加括号:
1.属性名是js保留字之一。
2.属性名包含空格或其他特殊字符。
3.属性名以数字开头的话。
数组中的元素,与对象中的属性,技术术语不同。
对象的属性也可是一个函数,函数本身也是一种数据,这种情况下,我们称该属性为方法。
一般性数组:索引型数组,枚举型数组,通常以数字为键值。
关联型数组:哈希表。常以字符串为键值。
js中用数组 表示索引型数组,用对象表示关联型数组。
*若要访问的属性是不确定的,必须用中括号表示法,他允许在运行时通过变量来实现相关属性的
动态存取。*
**通过构造器函数创建对象**
好处在于:可以在创建对象时接收一些参数。
~~~
function Hero(){
this.name="daer";
}
var hero=new Hero();
hero.name;
//"daer"
~~~
![](https://box.kancloud.cn/3b8de079264dab6b3f509e61338bff13_738x413.png)
构造器属性,实际上是一个指向用于创建该对象的构造器函数的引用。
由于构造器属性所引用的是一个函数,故可利用其创建一个其他对象。
如果对象是通过对象文本标识法创建的,那么实际上它是由内建构造器Object()函数所创建的。
**instanceof**
测试*一个对象是否由某个指定的构造器函数所创建*。
~~~
function Hero(){}
var h=new Hero();
var o={};
h instanceof Hero;
true
h instanceof Object;
true
o instanceof Object;
true
~~~
**传递对象**
当我们拷贝某个对象或者将它传递给某个函数时,往往传递的都是该对象的引用,因此在引用上所作的任何改动,实际上都会影响它所引用的原对象。