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)
下标方式
1stooge["first-name"] // "Jerome"
.方式1flight.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)
如果属性/成员名已经存在则会更新,否则会为对象添加属性并赋值。
下标方式
1stooge['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