JavaScript语言精粹(读书笔记)
第一章 精华
1,JavaScript的函数(主要)基于词法作用域(lexical scoping)的顶级对象。强类型语言允许编译器在编译时检测错误,但弱类型很自由,无需建立复杂的类层次,不用做强制造型。JavaScript拥有强大的对象字面量表示法,这种表示法是JSON的灵感来源。
2,JavaScript有一个无类型的(class-free)对象系统,在这个系统中,对象可以直接从其他对象继承属性。
3,JavaScript依赖于全局变量来进行连接,所有编译单元的所有顶级变量被撮合到一个全局对象(the global object)的公共命名空间中【糟糕】。
第二章 语法
1,两种注释形式:/* */块注释(来自于一种PL/I的语言)有些字符也可能出现在正则里,//行注释(推荐使用)。
2,标识符由字母下划线或$开头,不能使用保留字作为对象的属性名。
3,JavaScript只有一种数字类型,它在内部被表示为64位的浮点数,没分离出整数类型,所以避免了短整形的溢出问题,你只需要它是一种数字。
4,JavaScript在创建时,Unicode是一个16位的字符集,所以所有字符都是16位的,它没有字符类型,用字符串表示字符。'F'+'u'+'n'==='Fun','Fun'.toUpperCase()==='FUN'。
5,下列值都为假:false null undefined '' 0 NaN;其余为真(包括true,'false')。for in语句会枚举一个对象的所有属性名(或键名),该枚举过程会列出所有的属性,属性名出现的顺序是不确定的,通常用Object.hasOwnProperty(variable)确定这个属性名是该对象的成员还是来自原型链。try{执行一个代码块并捕获代码块抛出的任何异常(throw通常在这里)}catch{接收异常error.message}。
6,运算符. [] ()优先级最高,typeof运算符产生的值有number string boolean undefined function object,但是typeof(数组或null)都是object。
第三章 对象
1,JavaScript中的对象是可变的键控集合(keyed collections),是无类型的,对象是属性的容器。正确使用原型链能减少对象初始化时消耗的时间和内存。
2,检索对象里的值,可以用[]或. ,若果不存在返回undefined,||可用来填充默认值,尝试从undefined的成员属性中取值会导致TypeError异常,可以用&&避免错误如下:
x.a //undefined
x.a.b //TypeError
x.a && x.a.b //undefined
3,对象里的值可通过赋值语句来更新,如果属性名已存在,则属性值被替换;如果之前没有,则扩充到对象中。
4,对象通过引用来传递,它们永远不会被复制。
5,所有通过对象字面量创建的对象都连接到Object.prototype,create方法创建一个使用原对象作为作为其原型的新对象。原型连接在更新时是不起作用的。原型连接只有在检索值时才被用到,顺着原型链忘上找称为委托。
6,有两种方法处理掉不需要的属性,第一个然你的程序做检查并丢弃typeof值为函数的属性,另一个是hasOwnProperty(不会检查原型链)如x.hasOwnProperty('constroctor') //false。
7,delete用来删除对象的属性,不会触及原型链,删除对象的属性可能会让原型链中的属性透现出来。
8,最小化使用全局变量的方法之一是为你的应用只创建一个唯一的全局变量:var x={};x.a={...};x.b={...} 。
第四章 函数 *
1,对象字面量产生的对象连接到Object.prototype,函数对象连接到Function.prototype,prototype的值是一个拥有constructor属性且值为该函数的对象。每个函数创建时会附加两个隐藏属性:函数的上下文和实现函数行为的代码。
2,函数字面量var add=function(a,b){},参数不会初始化为undefined而是在函数被调用时初始化为实际提供的参数的值。
3,调用函数会接受附加的参数:this和arguments,this的值取决于调用的模式,四种调用模式:方法调用 函数调用 构造器调用 apply调用。
4,内部函数能访问外部函数的实际变量而无需复制。
第五章 继承 *
1,继承模式的一个弱点是没法保护隐私,可以用模块模式。
第六章 数组
1,数组是一段线性分配的内存,它通过整数计算偏移并访问其中的元素,不过JavaScript并无类似的数据结构,但拥有一些类数组(array-like)特性的对象,他把数组下标变成字符串,用其作为属性。
2,设置更大的length值不会给数组分配更多的空间,而把length设小导致下标大于等于length的删除;附加新元素到尾部:arr[arr.length],也可以用push。
3,delete数组的元素会留下空洞,因为排在后面的元素保留着它们最初的属性;可以用splice(数组中的一个序号,要删除的元素个数),因为被删除属性后的每个属性必须被移除,并且以一个新的键值重新插入,这样对于大型数组效率不高。
4,当属姓名是小而连续的整数时,应使用数组,否则,使用对象。判断一个对象否为数组:
var is_array=function(value){
return Object.prototype.toString.apply(value)==='[object Array]'
}
第七章 正则表达式
1,两种方法创建一个RegExp对象,优先考虑正则表达式字面量(包围在一对斜杠里), 另一个是使用RegExp构造器,这个构造器接收一个字符串并编译成一个RegExp对象。
2,一个正则表达式分支包含一个或多个正则表达式序列,这些序列用|分开,一个正则表达式序列包含一个或多个正则表达式因子。
第八章 方法
1,array.concat(item...) 产生一个新数组,它包含一份array的浅复制(shallow copy)并把item附在其后,array不变;
array.join(separator) 构造成一个字符串,分隔符默认为, ;
array.pop() 移除最后一个并返回该元素,array.push(item...)会修改array尾部,且如果item有数组,会作为一项加入;
array.reverse() 反转元素且改变array;
array.shift() 移除第一个元素并返回该元素,比pop慢;
array.slice(start,end) 浅复制从start到end,end可选,若参数有负数和array.length相加;
array.sort(comparefn) 按大小排如:n.sort(function(a,b){
return a-b
} )
array.splice(start,deleteCount,item...) 用item替换删除的元素;
array.unshift(item...) 把item插入到array的开始部分,array变。
2,function.apply(thisArg,argArray)。
3,number.toExponential(fractionDigits) 转换成一个指数形式的字符串,fractionDigits控制小数点后的数字位数(0-20);
number.toFixed(fractionDigits) 转换成一个十进制的字符串;
number.toPricision(pricision) 转换成一个十进制数形式的字符串 ,precision控制数字的精度(0-21);
number.toString(radix)转换成字符串,radix控制基数(2-36)。
4,object.hasOwnProperty(name) ,原型链中的同名属性是不会被检查的;
如:var a={name:'aaa'};
var b=Object.create(a);
a.hasOwnProperty('name'); //true
b.hasOwnProperty('name'); //false
b.name; //'aaa'
5,regexp.exep(string) 正则表达式最强大(和最慢)的方法,它会返回一个数组;
regexp.test(string) 正则表达式最简单(和最快)的方法。
6,string.charAt(pos) 返回string中pos位置处的字符,不存在返回空;
string.charCodeAt(pos) 以整数形式返回字符编码,不存在返回NaN;
string.concat(string...) 连接字符串,也可以用+ ;
string.indexOf(searchString,position) stirng是从某个位置开始查,不存在返回-1;
string.lastIndexOf(searchString,position) 从末尾查找;
string.localeCompare(that) 若string比that小,结果为负数,若相等为0;
string.match(regexp) 如果没有g标识,则与调用regexp.exec(string)的结果相同;
stirng.replace(searchValue,replaceValue) searchValue可以是字符串或正则,若是字符串只会改第一处;
string.search(regexp) 返回第一个匹配的首字符位置,不存在返回-1;
string.slice(start,end);
string.split(separator,limit) 把string分割成片段来创建一个字符串数组,limit限制被分割的片段数量(可选);
string.substring(start,end) 和slice一样,但不能处理负数,用slice;
string.toLocaleLowerCase() 本地化规则转小写;
string.toLocaleUpperCase() 本地化规则转大写;
string.toLowerCase() 转小写;
string.toUpperCase() 转大写;
string.fromCharCode(char...) 根据一串数字编码返回一个字符串。
第九章 代码风格
1,JavaScript的弱类型和过度的容错性导致程序质量无法在编译时获得保障。
2,把 { 放在一行的结尾而不是下一行的开头,因为它会避免JavaScript的return语句中的一个设计错误。JavaScript有函数作用域没有块级作用域。K&R代码风格是最普遍的C语言代码风格
3,对一个脚本应用或工具库,只用一个全局变量。每个对象都有它自己的命名空间,多以很容易用对象去管理代码。使用闭包能提供近一步的信息隐藏,增强模块的健壮性。
第十章 优美的特性
。。。
附录A 毒瘤
1,全局变量 2,作用域 3,自动插入分号
4,保留字:当保留字被用作对象字面量的键值时,他们必须被用括号括起来,且不能用点表示法,用括号表示法。
5,Unicode 6,typeof null==='object' 7,parseInt 8,+ 9,浮点数 10,0.1+0.2!=0.3 11,NaN !== NaN
12,伪数组 13,假值:0 NaN '' false null undefined 14,hasOwnProperty 15,对象
附录B 糟粕
1,== 2,with语句 3,eval 4,continue语句 5,switch穿越
6,缺少块的语句 7,++ -- 8,位运算符 9,function语句与表达式
10,类型的包装对象 11,new 12,void
附录C JSLint
附录D JSON语法
JavaScript语言精粹(读书笔记)的更多相关文章
- <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是披着C族语言外衣的LISP,除了词法上与C族语言相似以外,其他几乎没有相似之处. JavaScript 函数: 函数包含一组语句,他们是JavaScript的基础模块单元,用于代 ...
- <JavaScript语言精粹>--<读书笔记三>之replace()与正则
今天有人问我repalce(),他那个题目很有意思.我也不会做,于是我就去查,结果发现就是最基础的知识的延伸. 所以啊最基础的知识才是很重要的,千万不能忽略,抓起JS就写代码完全不知到所以然,只知道写 ...
- JavaScript语言精粹读书笔记- JavaScript对象
JavaScript 对象 除了数字.字符串.布尔值.null.undefined(都不可变)这5种简单类型,其他都是对象. JavaScript中的对象是可变的键控集合(keyed collecti ...
- 学习javascript语言精粹的笔记
1.枚举: 用for in 语句来遍历一个对象中所有的属性名,该枚举过程将会列出所有的属性也包括涵数和方法,如果我们想过滤掉那些不想要的值,最为常用的过滤器为hasOwnProperty方法,以及使用 ...
- 【Javascript语言精粹】笔记摘要
现在大部分编译语言中都流行要求强类型.其原理在于强类型允许编译器在编译时检测错误.我们能越早检测和修复错误,付出的代价越小.Javascript是一门弱类型的语言,所以Javascript编译器不能检 ...
- js语言精粹读书笔记一
一.语法 1.
- JavaScript语言精粹学习笔记
0.JavaScript的简单数据类型包括数字.字符创.布尔值(true/false).null和undefined值,其它值都是对象. 1.JavaScript只有一个数字类型,它在内部被表示为64 ...
随机推荐
- Oracel_子查询
SQL子查询 子查询语法 SELECT select_list FROM table WHERE expr operator (SELECT select_list FROM table) 子查询 ( ...
- HTML中哪些标签的值会被提交到服务器呢?
<form> <input name="">标签 <select name="">标签 <textarea name= ...
- 窥探Swift之新添数据类型元组与可选值
今天的博客中就总结一下关于Swift中相对Objc新添加的两个数据类型:元组(Tuple)和可选值类型(Optional).上面这两个类型是Swift独有的类型,使用起来也是非常方便的,今天就通过一些 ...
- 前端自动化构建工具gulp的使用总结
前端自动化构建工具gulp的使用总结 博主最近偶的空闲,在此对gulp的使用做一个总结,让小伙伴知道如何合理的使用gulp以及gulp的使用技巧. 谈到gulp,有人可能就会想到另外一个构建工具gru ...
- 关于《selenium2自动测试实战--基于Python语言》
关于本书的类型: 首先在我看来技术书分为两类,一类是“思想”,一类是“操作手册”. 对于思想类的书,一般作者有很多年经验积累,这类书需要细读与品位.高手读了会深有体会,豁然开朗.新手读了不止所云,甚至 ...
- 数据库join方式分析
前言 不管是博客园还是CSDN,看到很多朋友对数据库的理解.认识还是没有突破一个瓶颈 ,而这个瓶颈往往只是一层窗纸,越过了你将看到一个新世界. 04.05年做项目的时候,用SQL Serv ...
- 【Spring-web】RestTemplate源码学习
2016-12-22 by 安静的下雪天 http://www.cnblogs.com/quiet-snowy-day/p/6210288.html 前言 在Web开发工作中,有一部分开发任务 ...
- CQRS, Task Based UIs, Event Sourcing agh!
原文地址:CQRS, Task Based UIs, Event Sourcing agh! Many people have been getting confused over what CQRS ...
- Nop中的Cache浅析
Nop中定义了ICacheManger接口,它有几个实现,其中MemoryCacheManager是内存缓存的一个实现. MemoryCacheManager: using System; using ...
- 【C#】分享一个弹出容器层,像右键菜单那样召即来挥则去
适用于:.net2.0+ Winform项目 ------------------201508261813更新(源码有更新.Demo未更新)------------------ 重新绘制调整大小手柄( ...