Javascript Good Part读书笔记-JavaScript对象
文章目录
对象(Objects)
包括简单类型:number, string, boolean,null,undefined和对象类型两种。number, string, boolean类似对象类型,有自己的方法(method)但是是不可变的。在JavaScript中,数组(arrays)是对象、函数(function)是对象、正则表达式(regular expressions)是对象、对象(objects)是对象。
对象字面符(Object Literals)
对象是一个name/value对的集合,通过,
分隔。name可以是任何字符串(包括空字符串),如果name是一个合法的JavaScript名字并且不是保留字,则可以不用引号包裹。
对象持有一个隐藏的链接指向原型对象,通过字面符号创建的对象链接指向Object.portotype
。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 |
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" } }; |
获取值(Retrieval)
下标方式
1
stooge["first-name"] // "Jerome"
.
方式1
flight.departure.IATA // "SYD"
如果试图访问一个存在的对象成员,则返回undefined。
1 2 3 |
stooge["middle-name"] // undefined flight.status // undefined stooge["FIRST-NAME"] // undefined |
试图从undefined获取值则会抛出(throw)一个TypeError异常,可以通过&&操作符来避免。
1 2 3 |
flight.equipment // undefined flight.equipment.model // throw "TypeError" flight.equipment && flight.equipment.model // undefined |
更新值(Update)
如果属性/成员名已经存在则会更新,否则会为对象添加属性并赋值。
下标方式
1
stooge['first-name'] = 'Jerome';
.
方式1 2 3 4 5
stooge.nickname = 'Curly'; flight.equipment = { model: 'Boeing 777' }; flight.status = 'overdue';
引用(Reference)
对象通过引用传递,不会进行拷贝。
1 2 3 4 5 6 7 8 9 |
var x = stooge; x.nickname = 'Curly'; var nick = stooge.nickname; // Curly var a = nick = stooge.nickname; // a, b, c 引用不同的空对象 var a = {}, b = {}, c = {}; // a, b, c 引用同一个空对象 var a = b = c = {}; |
原型(Prototype)
所有通过字面符号创建的对象都链接到了Object.prototype
。在获取对象的值时,如果对象没有该属性,则会在原型链上逐级查找,直到Object.prototype
,如果没有找到则返回undefined值。
1 2 3 4 5 6 7 8 9 10 11 12 13 |
if (typeof Object.create !== 'function') { Object.create = function (o) { var F = function () {}; F.prototype = o; return new F(); }; } var another_stooge = Object.create(stooge); another_stooge['first-name'] = 'Harry'; another_stooge['middle-name'] = 'Moses'; another_stooge.nickname = 'Moe'; |
原型链关系是一种动态关系,当对原型对象添加属性或修改属性值时,基于该原型的对象将立即可见。
1 2 |
stooge.profession = 'actor'; another_stooge.profession // 'actor' |
列举/遍历(Enumeration)
for in循环会遍历对象上的所有属性(包括原型对象上的)。
删除(Delete)
可以通过delete
删除对象的属性,但是不能删除原型链对象的属性。
1
|
delete another_stooge.nickname; |
减少全局变量(Global Abatement)
1 2 3 4 5 |
var MYAPP = {}; MYAPP.stooge = { "first-name": "Joe", "last-name": "Howard" }; |
文章作者 binbin wen
上次更新 2019-11-14