《javascript语言精粹》读书笔记五

第十章 优美的特性

在本章开头 老道写到:“我想避开不谈浏览器和其他适合javascript的地方。”我想要强调其更有分量的内容,以显示它是值得尊敬的语言。

我也这么认为,虽然我了解的语言种类不多,但是js强大的表现力还是使我深深的爱上了它。

以下是老道认为js种最精粹的部分:

函数是顶级对象 函数是有词法作用域的闭包。

基于原型继承的动态对象 对象是无类别的。我们可以通过普通的属性赋值给任何对象增加一个新成员属性,一个对象可以从另一个对象继承成员属性。

对象字面量和数组字面量 这对创建新的对象和数组来说是一种非常方便的表示法。javascript字面量是数据交换格式JSON的灵感之源。

附录A 毒瘤

在很多书中附录往往冗长而缺乏价值(干货),本书的附录才是真正的精华所在,它阐述了js这门语言的毒瘤,糟粕和精华所在。非常值得细细品味和了解。

全局变量

全局变量的三种声明方式:

1、var foo = value;

2、global.foo = value;

3、foo = value;

自动插入分号

js有自动插入分好的习惯,它试图通过自动插入分好来修正有缺损的程序。但是,这可能会掩盖更为严重的错误。

比如对于以下语句就是错误的,ex:

return // this will return undefined;
{
    state : true;
}

通过一些编程约定能够避免这个问题,比如上例应该写作,就能返回正确的结果:

return {
    state : true;
}

typeof

typeof null返回为‘object’,这说明typeof不能辨别出null对象,但你可以像下面这样做,已达到目的:

if(x && typeof x === ‘object‘) {
    // x 是一个对象或者数组
}

parseInt

parseInt(“08”)回0,而不是8,因为这里按照8进制来处理”08”字符串,所以建议无论何时都为parseInt函数加上基数参数。

+

+号可以用来被连接字符串,这里导致一系列问题,想必你一定也碰到过100 + ‘11’ –> 10011的时候吧。所以如果打算做加法运算,请确保两个运算数都是整数。

浮点数

浮点数的小数点后运算不精确,比如0.1+0.2=0.30000000000000004,这个结果是遵循二进制浮点数算数运算标准的(IEEE 754),可以通过乘法来对其进行避免此处可参看(js精确四则运算)

NAN

NAN不是一个数字,尽管typeof NAN === ‘number‘ // true。NAN不等于它自己,它和任意数进行运算, 结果为NAN。

可以使用 typeof value === ‘number‘ && isFinite(value)对数字进行判断,这是因为isFinite函数将会筛除掉NAN和Infinity。

假值

js种有一个很大的假值空间:“0, NAN, ”, false, null, undefined”都等同于假值,又不可互换,所以判断时应该使用‘===‘而不是‘==‘

这里需要说明的是,在ie8及以下浏览器中,NAN和undefined不是常量,他们的是值是可以改变的,你可以将undefiend赋值成任何你想要的对象。

附录B 糟粕

==

由于js中的”==“运算符会对左值和右值进行类型转换,所以他违反了传递性这种编程约定,所以如同前文提到的一样尽量使用”===“和”!==“来代替”==“和”!=“。

with和eval

这两个兄弟对js的运算速度有很大的影响,而又降低的js的可读性和可检测性,所以应该尽量避免使用。

continue语句

代码中移除continue后性能会得到提升。

++ –

当使用这两者时,代码变得拥挤,复杂和隐晦。因此,为了代码风格整洁,不建议使用他。

位运算符

由于js的运行环境导致其运行时基本解除不到硬件,位运算符在js种执行速度很慢,建议不要使用它。

function语句和function表达式

推荐使用function表达式,使用示例如下:

var foo = function foo() {}</code></pre>

这种方式可以明确的表示foo是一个包含一个函数值的变量

new

new运算符帮助我们创建一个继承原型的新对象,然后调用该运算数,将新创建的对象绑定给this,使得运算数可以返回前者自定义创建的新对象,而当你忘记使用new的时候,得到的是一个普通的函数调用结果,并且this会保存到全局对象上,对其造成污染。

所以建议在可能的时候不要使用new运算符。

void

void是一个运算符,它接受一个运算数并返回undefined。这没有什么用,应该尽量避免使用它。在ie8及以下浏览器中为了防止undefined关键字被覆盖,常常使用void 0来代替undefined。

更多内容请查看zakwu的小站

时间: 2024-08-01 16:50:24

《javascript语言精粹》读书笔记五的相关文章

《算法导论》读书笔记(五)

摘要: 本章介绍了二叉查找树的概念及操作.主要内容包括二叉查找树的性质,如何在二叉查找树中查找最大值.最小值和给定的值,如何找出某一个元素的前驱和后继,如何在二叉查找树中进行插入和删除操作.在二叉查找树上执行这些基本操作的时间与树的高度成正比,一棵随机构造的二叉查找树的期望高度为O(lgn),从而基本动态集合的操作平均时间为θ(lgn). 1.二叉查找树 二叉查找树是按照二叉树结构来组织的,因此可以用二叉链表结构表示.二叉查找树中的关键字的存储方式满足的特征是:设x为二叉查找树中的一个结点.如果

《启示录》读书笔记五

1.敏捷开发 敏捷开发以用户的需求进化为核心,采用迭代.循序渐进的方法进行软件开发.在敏捷开发中,软件项目在构建初期被切分成多个子项目,各个子项目的成果都经过测试,具备可视.可集成和可运行使用的特征.换言之,就是把一个大项目分为多个相互联系,但也可独立运行的小项目,并分别完成,在此过程中软件一直处于可使用状态. 2.瀑布式开发 瀑布模型式是最典型的预见性的方法,严格遵循预先计划的需求.分析.设计.编码.测试的步骤顺序进行.步骤成果作为衡量进度的方法,例如需求规格,设计文档,测试计划和代码审阅等等

悟道—位IT高管20年的职场心经(读书笔记五)

悟道--一位IT高管20年的职场心经 第五章 搞定老板 "老板就是老板" 这一点,你可能会忘了,他一定不会忘: "老板不会总是老板" 这一点,他可能会忘,你最好别忘. 1.1  谁是老板 老板手上有的权力,你应该尊重.权力,意味着资源. 1.2  三招搞定老板 尊重老板由于他毕竟是你的老板: 把老板当客户,善用老板的资源! 老板的资源:权力.能力.经验.信息. 1.3  请示的学问:该不该请示 和自己的老板沟通,理解老板的性格特点,然后做事. 1.4  请示的学问:

Android驱动开发读书笔记五

第五章 本章介绍了S3C6410开发板的功能,开发板的不同主要是在烧录嵌入式系统的方式不同,以及如何在此开发板上安装Android. 1.安装串口调试工具minicom 首先需要一根USB转串口线,由于安装的是Ubuntu Linux所以需要按照以下步骤.配置和测试minicom (1).检测当前系统是否支持USB转串口 命令lsmod  | grep usbserial (2)安装minnicom apt-get install minicom (3)配置minicom minicom -s,

机器学习实战读书笔记(五)Logistic回归

Logistic回归的一般过程 1.收集数据:采用任意方法收集 2.准备数据:由于需要进行距离计算,因此要求数据类型为数值型.另外,结构化数据格式则最佳 3.分析数据:采用任意方法对数据进行分析 4.训练算法:大部分时间将用于训练,训练的目的是为了找到最佳的分类回归系数 5.测试算法:一旦训练步骤完成,分类将会很快. 6.使用算法:首 先,我们需要输入一些数据,并将其转换成对应的结构化数值:接着,基于训练好的回归系数就可以对这些数值进行简单回归计算,判定它们属于哪个类别:在这之后,我们就可以在输

R语言实战读书笔记(五)高级数据管理

5.2.1 数据函数 abs: sqrt: ceiling:求不小于x的最小整数 floor:求不大于x的最大整数 trunc:向0的方向截取x中的整数部分 round:将x舍入为指定位的小数 signif:舍入为指定的有效数字位数 cos,sin,tan acos,asin,atan:反正弦,反余弦,反正切 cosh,sinh,tanh:双曲余弦,双曲正弦和双曲正切 acosh,asinh,atanh:反双曲余弦,反双曲正弦和反双曲正切 log(x,n):以n为底 log: log10: ex

锋利的jQuery--编写jQuery插件(读书笔记五)[完结篇]

1.表单验证插件Validation   2.表单插件Form 3.动态事件绑定插件livequery 可以为后来的元素绑定事件 类似于jQuery中的live()方法 4.jQuery UI   5.jQuery Cookie   6.遮罩层插件:thickbox 7.编写jQuery插件 <1>编写插件的目的:给已经有的一些列方法或函数做一个封装,一遍在其他地方使用,方便后期维护和提高开发效率. <2>三种类型的插件 a:封装对象方法的插件 jQuery.fn.extend()

《Distributed Programming With Ruby》读书笔记五 RingyDingy (Part2 chapter3)

Part II Third-Party Frameworks and Libraries The first part of this book takes a deep dive into two main libraries: DRb and Rinda Chapter3: RingyDingy Including 6 parts: Installation Getting Started with RingyDingy "Hello World" the RingDingy Wa

《Android深度探索卷一》读书笔记五

下载和编译Linux内核源代码 Android源代码不包含Linux源代码,必须单独下载.不能直接在www.kernel.org下载Linux内核,应在Google提供的网站下载Android中使用的Linux内核. 1.下载“git clone https://android.googlesource.com/kernel/common.git”,进入common目录,“git branch -a”查看当前有的远程版本,之后导出 到导出所需版本“git checkout -b android-

Oracle事务原理探究1--oracle核心技术读书笔记五

1. 冲突解决 假如有一个系统只有你和我两个用户,并且我们都在持续对系统中一小部分数据做修改和查询操作. 如果你正在数据库中做一批修改操作,而我正在做查询,我一定不能看到你所做的修改,直到你告诉我可以看到你所做的所有更改才行(你提交了事务).因此在oracle内部,必须有一个高效的办法来识别哪些数据我可以看到,哪些数据我不可以看到. 从相反的角度来看,在你提交事务的时候,你需要一种高效的机制让其他所有人能够看到事务已经提交(也就是要告诉别人你所有修改过的数据都是可见的了).更极端一点的情况是,你