对于丑陋的事物,爱会闭目无视
——威廉-莎士比亚,《维洛那二绅士》
- 对象是属性的容器,其中每个属性都拥有名字和值。
- 对象没有类的概念
- js包含一种原型链的特性,允许对象继承另一个对象的属性。
对象字面量
- 一个对象字面量就是包围在一对花括号中的零或多个“名/值”对。
- 若属性名是一个合法的JS标识符且不是保留字,则并不强制要求用引号括住属性名。
- 引号括住
"first-name"
是必须的,但first_name
则是可选的。
- 引号括住
检索
- []方括号和.点号都能检索对象里属性的值。
- []方括号内得是字符串表达式或变量,优先考虑.点号表示法。
- 检索并不存在的成员属性的值,将返回
undefined
。
引用
- 对象通过引用传递。他们永远不会被复制。
1
2var a={},b={},c={}; //a、b、c每个都引用不同的空对象。
a=b=c={}; //a、b、c都引用同一个空对象。
原型
- 所有通过对象字面量创建的对象都连接到
Object.prototype
。 - 原型连接在更新(这里更新指更新实例属性,因而没有触及原型对象)时不起作用。
- 原型关系是动态的。原型对象有改动,则会对所有基于该原型创建的对象可见。
枚举
for in
中,属性名出现的顺序是不确定的
delete
delete
运算符不触及原型链中的任何对象,反而可能会让来自原型链中的属性透现出来。
减少全局变量污染
- 最小化使用全局变量的方法之一:只创建一个唯一的全局变量
1
2
3
4
5
6
7
8
9var MYAPP={};
MYAPP.stooge={
//代码
};
MYAPP.flight={
//代码
};