《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表达式,使用示例如下:

{}</code></pre>

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

new

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

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

void

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

更多内容请查看

我想一个人旅行,可以不带相机,也不要带上手机,

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

相关文章:

你感兴趣的文章:

标签云: