JavaScript中的对象是可变的键控集合。几种数据类型虽然有方法但不可变,因此不是对象。
JavaScript中的对象是可变键控集合。在JavaScript中,数组是对象,函数是对象,正则表达式是对象,对象也是对象。
对象是属性的容器,属性名是任意字符串,属性值是undefined以外的任意值。
对象字面量:
“f-name”:”a”,
f_name:”b” ——属性名是合法JavaScript标识符且不是保留字,可省略“ ”。
检索:
|| 运算符可以用来填充默认值
var middleName = Person["middle-name"] || "none";
var tel = Person.tel || "unknown";
&& 运算符可以用来避免因尝试检索一个undefined值而导致的TypeError异常。
原型:
每个对象都能连接到一个原型对象prototype,并且它可以从中继承属性。所有通过对象字面量创建的对象都链接到Object.prototype这个JavaScript中标准的对象。
原型连接在更新的时候不起作用,对某个对象作出改变时,不会触及到该对象的原型。
原型连接只有在检索值的时候才能被用到。如果我们尝试去获取对象的某个值,且该对象没有此属性名,那么JavaScript会尝试着从其原型对象中获取属性值。如果那个原型对象也没有该属性值,那么再从它的原型中寻找,依此类推,知道该过程最后达到终点Object.prototype。如果想要的属性完全不存在于原型链中,那么结果就是undefined值。这个过程成为“委托”。
反射
hasOwnProperty()方法用来检索对象自身独有的属性,存在返回true,不会检查原型链。
枚举
for in语句可遍历对象中的所有属性名,包括原型链。可以使用hasOwnProperty方法或typeof方法来作过滤器。
删除
delete运算符用来删除对象的属性,但不会触及到原型链中的任何对象。
减少全局变量
最小化使用全局变量的一个方法是在你的应用中只创建唯一一个全局变量:
var MYAPP = {};
该变量此时变成了应用的容器:
MYAPP.stooge = { ... };
MyApp.flightr = { ... };