第三章 对象

JavaScript的简单数据类型包括数字、字符串、布尔值(true和false)、null值和undefined值。其他

数字、字符串和布尔值“貌似”对象,因为它们拥有方法,但它们是不可变的。JavaScript中的对象是可

变的键控集合(keyed collections)。

对象是属性的容器,其中每个属性都拥有名字和值。属性的名字可以是包括空字符串在内的任意字符

串。属性值可以是除undefined值之外的任何值。

javascript包含一个原型链特性,允许对象继承另一对象的属性。正确的使用它能减少对象初始化的时间和内存消耗。

3.1 对象字面量

属性名可以是包含空字符串在内的任何字符串;属性值,合法的不强制性加引号first_name,不合法的要加引号“first-name”.

var person={
"name":"John",
"age":18,
"wife":{
"name":"Lucy",
"agen":22
}
}

3.2 检索

点.表示法或[]表示法。优先考虑使用.表示法,因为它更紧凑且可读性更好。如:

person.name;
person["name"];

|| 运算符可以用来填充默认值:

var status = flight.status || "unknow";

尝试从undefined的成员属性中取值将会导致TypeError异常。可以通过&&运算符来避免错误。

flight.equipment // undefined
flight.equipment.model // throw "TypeError"
flight.equipment && flight.equipment.model // undefined

3.3 更新

对象中的值可以赋值更新,如果已有属性,那么属性值被替换;若没有属性,则该属性会被扩充到对象中。

3.4 引用

对象通过引用传递,他们永远不会被拷贝。(传递的仅仅是地址)

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都引用同一个空对象

3.5 原型

(1)每个对象都连接到一个原型对象–Object.prototype这个标准对象。

(2)原型连接在更新时是不起作用的,当我们改变某个对象的属性值时,不会触及到对象的原型。(只针对于实例属性的修改,对于原型上的引用类型会改变对象的原型)

(3)原型链只有在检索值的时候用到,当尝试获取某个对象的属性值时,会沿着他的原型链从下到上依次找,直到Object.prototype,如果Object.prototype依然没有该属性,则返回undefined。这个过程称为委托。

(4)原型关系是一种动态的关系,如果添加一个新的属性到原型中,该属性会立即对所有基于该原型创建的所有对象可见。

3.6 反射

(1)typeof操作符用于确定属性的类型。

(2)hasOwnProperty对象是否拥有独立的属性,他不会检测原型链上的。

person.hasOwnProperty("name");//true
person.hasOwnProperty("c");//false

3.7 枚举

(1)for in语句会遍历对象的所有属性,包括原型链上的属性。可以用typeof和hasOwnPropery过滤。

(2)使用for in枚举一个对象中的所有属性名时,属性名出现的顺序是不确定的。如果想要确保属性以特

定的顺序出现,最好的办法就是完全避免使用for in语句,而是创建一个数组,在其中以正确的顺序

包含属性名。通过使用for而不是for in,可以得到我们想要的属性。

3.8 删除

delete操作符会删除对象的属性,但不会触及原型链上的属性。

3.9 减少全局变量污染

最小化使用全局变量的一个方法是你的应用中只创建唯一一个全局变量。

var MYAPP={};

MYAPP.stooge={
"first-name":"Joe",
"last-name":"Howard"
}
MYAPP.person={
"name":"John",
"age":18,
"wife":{
"name":"Lucy",
"agen":22
}
}

版权声明:本文为小平果原创文章,转载请注明:http://blog.csdn.net/i10630226

《javascript语言精粹》读书笔记 Item2 对象的更多相关文章

  1. <JavaScript语言精粹>-读书笔记(一)

    用object.hasOwnProperty(variable)来确定这个属性名是否为该对象成员,还是来自于原型链. for(my in obj){ if(obj.hasOwnProperty(my) ...

  2. JavaScript语言精粹-读书笔记

    前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...

  3. JavaScript 语言精粹读书笔记

    最近在看 赵泽欣 / 鄢学鹍 翻译的 蝴蝶书, 把一些读后感言记录在这里. 主要是把作者的建议跟 ES5/ES5.1/ES6 新添加的功能进行了对比 涉及到的一些定义 IIFE: Immediatel ...

  4. JavaScript语言精粹读书笔记- JavaScript对象

    JavaScript 对象 除了数字.字符串.布尔值.null.undefined(都不可变)这5种简单类型,其他都是对象. JavaScript中的对象是可变的键控集合(keyed collecti ...

  5. JavaScript语言精粹读书笔记 - JavaScript函数

    JavaScript是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代 ...

  6. <JavaScript语言精粹>--<读书笔记三>之replace()与正则

    今天有人问我repalce(),他那个题目很有意思.我也不会做,于是我就去查,结果发现就是最基础的知识的延伸. 所以啊最基础的知识才是很重要的,千万不能忽略,抓起JS就写代码完全不知到所以然,只知道写 ...

  7. 学习javascript语言精粹的笔记

    1.枚举: 用for in 语句来遍历一个对象中所有的属性名,该枚举过程将会列出所有的属性也包括涵数和方法,如果我们想过滤掉那些不想要的值,最为常用的过滤器为hasOwnProperty方法,以及使用 ...

  8. 【Javascript语言精粹】笔记摘要

    现在大部分编译语言中都流行要求强类型.其原理在于强类型允许编译器在编译时检测错误.我们能越早检测和修复错误,付出的代价越小.Javascript是一门弱类型的语言,所以Javascript编译器不能检 ...

  9. js语言精粹读书笔记一

    一.语法 1.

随机推荐

  1. linux文件查找及操作

    在linux下查找文件的办法最常用的就是find指令,让我们来看一下find指令如何来使用吧: find find . -name  txt             //在当前目录查找名字为txt的文 ...

  2. DB Query Analyzer 6.01 is released, SQL Execute Schedule function can be used

       DB Query Analyzer is presented by Master Gen feng, Ma from Chinese Mainland. It has English versi ...

  3. C标准中关于空指针的那些事

    1 C标准不保证用所有二进制位都为0的变量来表示空指针,但它保证空指针与任何对象或函数的指针都不相等,取地址操作符&永远也不会返回空指针: 2 C标准称在指针上下文中的"值为0的整形 ...

  4. asp.net session分布式共享解决方案

    Session共享是分布式系统设计时必须考虑的一个重要的点.相比较java中的session共享解决方案,.net中的解决方案还是比较少,MemcachedSessionProvider类库是比较优秀 ...

  5. matlab GUI保存axes(坐标轴)上的图像

    1.默认方式 matlab GUI默认菜单的保存图像默认为保持全部GUI,包括使用" 菜单->编辑->复制图形". 2 保存可见区域 2.1 代码 [FileName, ...

  6. 2018 ACM-ICPC World Finals B.Comma Sprinkler

    WF里面最简答一题,就是一个dfs就可以了,已经访问过的点可以不再访问 #include <algorithm> #include <cmath> #include <c ...

  7. 转发 JBPM工作流小结

    JBoss 题记:某部门领导有天突发奇想,把我们几个人叫过去,曰:最近出去开会,老有人推销自己的工作流产品,说的这好那好,你们几个给我研究研究.正好刚做完的xxx子系统里有一个申请审批的流程,你们按这 ...

  8. Nodejs http-proxy代理实战应用

    var https = require('https'); var express = require('express'); var app = express() var http = requi ...

  9. ES6(阮一峰)学习总结

    1.块级作用域的引入 在ES6之前,js只有全局作用域和函数作用域,ES6中let关键字为其引入了块级作用域. { var a = 5; let b = 6; } console.log(a); co ...

  10. Ext Js v6.2.0.103 Sencha Cmd 命令

    Sencha Cmd v6.2.0.103 Sencha Cmd 提供几种全局开关命令. 在大多数案例中, 第一步是在Sencha SDK基础上创建应用 例如 Ext JS 或 Sencha Touc ...