一起来啃《JavaScript语言精粹》----对象

一、引言

任何编程语言在设计的时候就存在精华与糟粕并存,《JavaScript语言精粹》这本书就是取其精华,去其糟粕,能让我写出更优雅性能更好的JavaScript代码。

二、对象的检索

  • 1.[]后缀中括住一个字符串表达式。
  • 2.如果字符串表达式是一个字符串字面量,而且它是一个合法的标识符且不是保留字,那么也可以用 . 表示法代替。我们优先使用 . 表示法,因为它更紧凑且可读性更好。
    obj['name-child']
    obj.user.name
  • 如果你尝试检索一个不存在的成员属性的值,将返回undefined。|| 运算符可以用来填充默认值:
    var obj1 =obj['name-child'] || 'none'
    var obj1 =obj.age || 'unknown'
  • 尝试从undefined的成员属性中取值将会导致TypeError异常。这时可以通过 && 运算符来避免错误。


    Paste_Image.png

三、引用

对象通过引用来传值。它们永远不会被复制:
var x = obj;
x.name = 'han';
var y = obj.name;//因为x和obj是指向同一个对象的引用,所以y为'han'

Paste_Image.png

四、原型

  • 没个对象都连接到一个原型对象,并且它可以从中继承属性。所有通过对象字面量创建的对象都连接到Object.prototype,它是JavaScript中的标配对象。
Paste_Image.png
  • 原型连接在更新时是不起作用的。当我们对某个对象做出改变时,不会触及该对象的原型。
Paste_Image.png
  • 原型关系是一种动态关系。如果我们添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的对象可见。
Paste_Image.png

五、枚举

  • for in 语句可用来遍历一个对象中的所有属性名。该枚举过程将会列出所有的属性--包括函数和你可能不关心的原型中的属性--所以有必要过滤掉那些你不想要的值。最常见的过滤器是hasOwnProperty方法,以及使用typeof来排除函数:


    Paste_Image.png
  • 属性名出现的顺序是不确定的,如果你想要确保属性以特定的顺序出现,最好的办法就是完全避免使用 for in 语句,而是创建一个数组,在其中以正确的顺序包含属性名:
Paste_Image.png
通过使用 for 而不是 for in ,可以得到我们想要的属性,而且不用担心可能发掘出原型链中的属性,并且我们按正确的顺序取得了它们的值。

六、删除

  • delete 运算符可以用来删除对象的属性。如果对象包含该属性,那么该属性就会被移除,它不会触及原型链中的任何对象。删除对象的属性可能会让来自原型链中的属性透现出来:
Paste_Image.png

七、减少全局变量污染

  • JavaScript可以很随意地定义全局变量来容纳你的应用的所有资源。但是它削弱了程序的灵活性,应该避免使用。
    方法一、为你的应用只创建一个唯一的全局变量:
    var MyApp = {};
    该变量此时变成了你的应用的容器:
    MyApp.stooge = {
    'first-name': 'Joe',
    'last-name': 'Howard'
    };
    方法二、使用闭包来进行信息隐藏,此方法将在下一章进行描述《JavaScript语言精粹》--函数

你可能感兴趣的:(一起来啃《JavaScript语言精粹》----对象)