《javascript语言精粹》读书笔记 Item2 对象
第三章 对象
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 对象的更多相关文章
- <JavaScript语言精粹>-读书笔记(一)
用object.hasOwnProperty(variable)来确定这个属性名是否为该对象成员,还是来自于原型链. for(my in obj){ if(obj.hasOwnProperty(my) ...
- JavaScript语言精粹-读书笔记
前言:很久之前读过一遍该书,近日得闲,重拾该书,详细研究一方,欢迎讨论指正. 目录: 1.精华 2.语法 3.对象 4.函数 5.继承 6.数组 7.正则表达式 8.方法 9.代码风格 10.优美的特 ...
- JavaScript 语言精粹读书笔记
最近在看 赵泽欣 / 鄢学鹍 翻译的 蝴蝶书, 把一些读后感言记录在这里. 主要是把作者的建议跟 ES5/ES5.1/ES6 新添加的功能进行了对比 涉及到的一些定义 IIFE: Immediatel ...
- JavaScript语言精粹读书笔记- JavaScript对象
JavaScript 对象 除了数字.字符串.布尔值.null.undefined(都不可变)这5种简单类型,其他都是对象. JavaScript中的对象是可变的键控集合(keyed collecti ...
- JavaScript语言精粹读书笔记 - JavaScript函数
JavaScript是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代 ...
- <JavaScript语言精粹>--<读书笔记三>之replace()与正则
今天有人问我repalce(),他那个题目很有意思.我也不会做,于是我就去查,结果发现就是最基础的知识的延伸. 所以啊最基础的知识才是很重要的,千万不能忽略,抓起JS就写代码完全不知到所以然,只知道写 ...
- 学习javascript语言精粹的笔记
1.枚举: 用for in 语句来遍历一个对象中所有的属性名,该枚举过程将会列出所有的属性也包括涵数和方法,如果我们想过滤掉那些不想要的值,最为常用的过滤器为hasOwnProperty方法,以及使用 ...
- 【Javascript语言精粹】笔记摘要
现在大部分编译语言中都流行要求强类型.其原理在于强类型允许编译器在编译时检测错误.我们能越早检测和修复错误,付出的代价越小.Javascript是一门弱类型的语言,所以Javascript编译器不能检 ...
- js语言精粹读书笔记一
一.语法 1.
随机推荐
- S3c2440A WINCE平台HIVE注册表+binfs的实现
今天最大的收获莫过于把binfs和hive注册表同时在三星的平台上实现了,这可是前无古人啊(只是看到好多哥们说找不到三星的HIVE资料),哈哈哈.怕今天的成果日后成炮灰,还是写下来比较好,要养成这样的 ...
- How to Send an Email Using UTL_SMTP with Authenticated Mail Server
In this Document Goal Solution References APPLIES TO: PL/SQL - Version 9.2.0.1 to 12.1.0.1 [Re ...
- EBS R12安装升级(FRESH)(五)
7.4.5 用DBUA升级 Database Upgrade Assistant提供图形界面进行升级. 将zysong.ttf复制到 /u01/oracle/TEST/db/tech_st/11.2. ...
- web报表工具FineReport使用中遇到的常见报错及解决办法(二)
web报表工具FineReport使用中遇到的常见报错及解决办法(二) 这里写点抛砖引玉,希望大家能把自己整理的问题及解决方法晾出来,Mark一下,利人利己. 出现问题先搜一下文档上有没有,再看看度娘 ...
- Yii2.0源码阅读-PHP如何与redis通信?
PHP与Redis可以通过socket进行通信,前提是PHP需要实现Redis的协议 RESP协议描述: 字符串 \r\n : 表示一个正确的状态信息,具体信息是'+'后面的字符(Simple Str ...
- Object对象你真理解了吗?
前言 五一回家又断更了一个放假时间了~~~ 只有光头才能变强 回顾前面: ThreadLocal就是这么简单 多线程三分钟就可以入个门了! 多线程基础必要知识点!看了学习多线程事半功倍 Java锁机制 ...
- Spring3 MVC
一.前言: 大家好,Spring3 MVC是非常优秀的MVC框架,由其是在3.0版本发布后,现在有越来越多的团队选择了Spring3 MVC了.Spring3 MVC结构简单,应了那句话简单就是美,而 ...
- AS3中的mouseEnabled与mouseChild
InteractiveObject类的一个属性,InteractiveObject类是用户可以使用鼠标和键盘与之交互的所有显示对象的抽象基类.我们不能直接实例化InteractiveObject类.m ...
- Find、FindAll、Where的区别
Find.FindAll是一个List<T>的方法,返回一个new List<T>包括符合条件的数据 Where是一个linq方法,适用于任意继承了IEnumerable接口的 ...
- 与班尼特·胡迪一起拿奖学金(HZNU-2273)
与班尼特·胡迪一起拿奖学金 AC Time Limit: 2 s Memory Limit: 256 MB Description 班尼特·胡迪这学期的体测终于上80分了,当期末考试的 ...