JavaScript简单数据结构包括数字、字符串、布尔值、null值、undefined值,其他都是对象。
对象时属性的容器,其中每个属性都是名字和值。
JavaScript里面的对象时无类型的,对新属性的名字和值没有限制,适合用于聚集和管理数据,对象里也可以包含其他对象。

对象字面量

var empty_object={};

var stoge={
  "firstName":"Joerome",
  "lastName":"Howare"
};

上面的对象stoge中两个属性,如果他们不是JavaScript的保留字,可以去掉引号。
检索对象里面属性的值可以用中括号去获取,如stoge["firstName"],如果该字符串表达式是一个字符串字面量,且是合法的JavaScript标识符不是保留字,那么也可以用点号“.”获取。如果试图获取一个不存在的属性,将得到undefined。

使用typeof操作符对确定属性的类型很有帮助:

typeof flight.number  // 'number'

注意,原型链中的任何属性都会产生值:

typeof flight.toString  // 'function'
typeof flight.constructor // 'function'

有两种方法处理这些不需要的属性:
第一个是让程序做检查并丢弃值为函数的属性,一般来说,想让对象在运行时动态获取自身信息时,关注更多的是数据。
另一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,将返回true,该方法不会检查原型链。

flight.hasOwnProperty('number') // true

for in 循环中遍历属性的顺序是不确定的,如果想要确保属性以特定的顺序出现,最好的办法是完全避免使用for in语句,而是创建一个数组,在其中以正确的顺序包含属性名,然后使用普通的for循环遍历。

delete可以删除对象中的属性,不会触及原型链中的任何对象,删除对象的属性可能会让原型链中的属性透现出来:

another.nickname  // 'Moe'

// 删除another的nickname属性,暴露出原型的nickname属性
delete another.nickname;

another.nickname  // 'Curly'

用Java里面的话理解,就是删除子类中的覆盖父类的属性以及get方法,那么下次再想获取该属性,将是从父类得到的。