1.JavaScript的简单数据类型包括数字、字符串、布尔值(true和false)、null值和undefined值。其他所有的值都是对象。数字、字符串和布尔值“貌似”对象,因为它们拥有方法,但它们是不可变的。
JavaScript中的对象是可变的键控集合(keyed collections)
属性的名字可以是包括空字符串在内的任意字符串。属性的之可以是除了undefined值之外的任何值。
JavaScript包含一种原型链的特性,允许对象继承另一个对象的属性。正确地使用它能减少对象初始化时消耗的时间和内存。
2.对象字面量
对象字面量可以出现在任何允许表达式出现的地方
如果属性名是一个合法的JavaScript标识符且不是保留字,则并不强制要求用引号括住属性名。
3.检索
检索一个并不存在的成员属性,将返回undefined.....TypeError
stooge["first-name"] //"Jerome" 通用
flight.departure.IATA // "SYD" 优先(合法标识符且不是保留字)
4.更新
如果属性名已经存在于对象里,那么这个属性的值就会被替换
如果对象之前没有拥有那个属性名,那么该属性就被扩充到对象中
5.引用
对象通过引用来传递。它们永远不会被复制。
var x = stooge;
x.nickname = 'Curly';
var nick = stooge.nickname;
// 因为 x 和 stooge 是指向同一个对象的引用,所以nick为‘Curly'。
var a = {}, b = {}, c = {};
// a、b和c每个都引用一个不同的空对象
a = b = c = {};
// a、b和c都引用同一个空对象
6.原型
每个对象都连接到一个原型对象,并且它可以从中继承属性。
所有通过对象字面量创建的对象都连接到Object.prototype(标配对象)。
原型连接在更新时是不起作用的。当我们对某个对象作出改变时,不会触及该对象的原型。
原型连接只有在检索值的时候才被用到。
委托
如果我们尝试去获取对象的某个属性值,但该对象没有此属性名,那么JavaScript会试着从原型对象中获取属性值。如果那个原型对象也没有该属性,那么再从它的原型中寻找,依此类推,直到该过程最后到达终点Object.prototype。如果想要的属性完全不存在于原型链中,那么结果就是undefined值。这个过程称为委托。
(1)属性名
(2)原型对象属性值
(3)原型
7.反射
typeof 原型链中的任何属性都会产生值
两个方法去掉这些不需要的属性, 第一个是让你的程序做检查并丢弃值为函数的属性。一般来说,当你想让对象在运行时动态获取自身信息是,你关注更多的是数据,而你应该意识到一些值可能会是函数。
另一个方法是使用hasOwnProperty方法,如果对象拥有独有的属性,它将返回true。hasOwnProperty方法不会检查原型链。
8. 枚举
for in 语句可用来便利一个对象中的所有属性名。
属性名出现的顺序是不确定的。如果你想要确保属性以特定的顺序出现,最好的方法就是完全避免使用for in语句,而是创建一个数组,在其中以正确的顺序包含属性名。
通过使用for而不是 for in,可以得到我们想要的属性,而不用担心可能发掘出原型链中的属性,并且我们按正确的顺序取得了它们的值。
9.删除
delete运算符可以用来删除。
它不会触及原型链中的任何对象
删除对象的属性可能会让来自原型链中的属性透现出来
10.减少全局污染
全局性的资源都纳入一个名称空间之下
网友评论