1 对象
简单数据类型
- number
- string
- boolean
- null
- undefined
对象类型
- array
- function
- regularExpression
- object
对象简介
- 可变的键控集合,属性的容器,无类型
- 属性:任意字符串(包括空字符串)
- 属性值:非undefined
1.1 对象字面量
var empty_object = {};var stooge = { "first-name":"Jerome"; "last-name":"Howard"};var flight = { airline:"Oceanic", number:815, departure:{ IATA:"SYD", time:"2004-09-22 14:55", city:"Sydney" }, arrival:{ IATA:"LAX", time:"2004-09-23 10:42", city:"Los Angeles" }};复制代码
1.2 检索
stooge["first-name"] //"Jerome"flight.departure.IATA //"SYD"复制代码
1.2.1 检索一个并不存在的成员属性,返回undefined
stooge["middle-name"] //underfined复制代码
1.2.2 || 填充默认值
var middle = stooge["middle-name"] || 'none' //middle='none'复制代码
1.2.3 && undefined的成员属性取值
stooge["middle-name"] //undefinedstooge["middle-name"].model //throw typeErrorstooge['middle-name'] && stooge['middle-name'].model //undefined复制代码
1.3 更新
stooge["middle-name"] = 'Ning' //扩充stooge["first-name"] = "Zhang" //覆盖复制代码
1.4 引用
var x = stooge;x.nickName = 'Curly';var nick = stooge.nickName; //x,stooge指向同一个对象 'Curly'var a = {}, b = {}, c = {}; //a,b,c分别指向3个不同的空对象a = b = c = {}; //a,b,c指向同一个空对象复制代码
1.5 原型
- 每个对象都连接到一个原型对象,并可以从中继承属性。
- 通过对象字面量创建的对象连接到Object.prototype,它是JavaScript的标配对象。
- 当你创建一个新对象时,可以选择某个对象作为它的原型。
Object.myCreate = function (obj) { var F = function () { }; F.prototype = obj; return new F();}var another_stooge = Object.myCreate(stooge);复制代码
- 原型连接只有在检索时使用,若获取某对象属性值,但该对象没有该属性,JavaScript会尝试从该对象的原型对象上获取此属性值,以此类推,直到Object.prototype。如果想要的属性完全不存在于原型链中,返回undefined。这个过程称为委托。
- 原型关系是一种动态关系。如果添加一个属性到原型中,该属性立即对所有基于该原型的创建对象都可见。
stooge.profession = 'actor';another_stooge.profession //'actor'复制代码
1.6 反射
typeof flight.number //numbertypeof flight.status //stringtypeof flight.arrival //objecttypeof flight.mainfest //undefined复制代码
原型链任何属性都能产生值。
typeof flight.toString //functiontypeof flight.constructor //function复制代码
hasOwnProperty不会检查原型链
flight.hasOwnProperty('number') //trueflight.hasOwnProperty('constructor') //false复制代码
1.7 枚举
for in 列出所有属性包括函数和原型链上的属性。
var name;for(name in another_stooge){ if(typeof another_stooge[name]!=='function'){ //排除函数 console.log(name,another_stooge[name]); }}复制代码
for in中遍历的属性名顺序不确定。使用for代替。
var i;var properties=['first-name','middle-name','last-name','profession'];for(i=0;i
1.8 删除
删除不会触及原型链上的对象。
another_stooge.nickname //'Moe'delete another_stooge.nickname //删除nickname,使原型链上的属性暴露another_stooge.nickname //'Curly',stooge的。复制代码
1.9 减少全局变量污染
全局变量削减了程序的灵活性,应避免使用。 最小化使用全局变量:只创建唯一的全局变量。
var MYAPP = {};复制代码
把全局性的资源都纳入一个名称空间之下,不同组件间冲突的可能性会明显降低。