取其精华,去其糟粕

蚊子前端博客
发布于 2015-05-17 06:00
基本读完《JavaScript语言精粹》,总结一下这篇文章读后心得

今天差不多读完了《JavaScript 语言精粹》,虽然这本书写的比较早,当时还是 ES3 的标准,不过依然还是有很多借鉴意义的。

有些事情在当时的环境和浏览器的性能下,还是比较流行的,但是现在却是另一种情况了。比如数组转换为字符串,那时候 IE6~IE8 还比较盛行的时候,更多的是推荐Array.join('')来进行转换,但是现在,更加推荐使用+进行字符串的拼接。

不过说实话,虽然书名是《JavaScript 语言精粹》,但是读完后,除了记住 js 中各种各样的糟糕状况,还真没想起几个精华来。JavaScript 作为一个 10 天就设计出来的语言,承受了超乎想象的流行程度。它一诞生,就在短到令人吃惊的时间里被全世界所接受。它从来没有在实验室里被试用和打磨。当它还非常粗糙时,它就被直接集成到网景的浏览器中。虽然 java 的小应用程序(java applets)的失败,JavaScript 变成了默认的‘web 语言’。

不过,JavaScript 还是多多少少有其自身的特点的。比如强大的对象字面量,原型继承,强大的数组和字符串操作等。好吧,精华还真想不出什么来,谁让它在目前来说是唯一的一个脚本编程语言呢。

JavaScript 的糟粕还是不少的。比如:

1.全局变量:全局变量可以被程序的任何部分在任意时间修改,这些都是不可控的。本来你一直这么使用全局变量的,可是其他人根据他的需要修改了全局变量的值,就会导致你的程序出现 Bug。针对这种情况,我们需要尽量地避免使用全局变量,如果非得需要不可的话,我们可以把全局变量放到一个命名空间里,当其他人声明全局变量时,要么使用你的命名空间,要么使用它的命名空间,这样就能尽量地减少全局变量的重复了:

COPYJAVASCRIPT

var Wenzi = Wenzi || {}; Wenzi.WEBBASEURL = 'www.xiabingbao.com'; Wenzi.SERVER_TIME = 1431871979;

2.作用域:JavaScript 提供了块级语法,却没有提供块级作用域,在该作用域内声明的变量,在其外部也能够使用。比如:

COPYJAVASCRIPT

for (var i = 0; i < 10; i++) {} console.log(i); // 输出10

3.自动添加分号:使用 JavaScript 进行编程,不用担心末尾没有写分号而导致程序不能运行。可是如果没有良好的编程习惯,就会产生很严重的逻辑错误。在下面的代码中,我们本意是要返回一个 json 结构,可是因为 js 自动添加了分号,导致返回了一个空。

COPYJAVASCRIPT

return; { name: 'wenzi'; }

4.+的使用+运算符既可以用作拼接字符串,也可用作数字的相加。这个符号产生什么作用,取决于两端的云算数的类型:若两端的云算数都是数字,那么就是两个数的相加;若其中一个为字符串或两个都为字符串,那么就是字符串的拼接;若是其他的类型,那么就将其转换为字符串进行拼接。

...

其实 JavaScript 中还有相当多的糟粕,目前就暂时总结这几种吧。也可以看看之前总结的【Javascript 的严格模式】,在严格模式下,能预防很多低级错误的发生。虽然 JavaScript 有着这样的不好那样的不好,但是,正是因为它的这些特性,让 web 的脚本编程更加的丰富。

web 前端发展到现在,真是处于百花齐放的盛况:jQuery, augular, node, react 等。而且现在还有 CMD 和 AMD 规范。

到这里,或许会有人问我,这本书值不值得读,值不值得买。我可以很肯定的说:‘值得买’,但是,不是所有人都需要买。就我目前读完的感觉,这本书比较适合学习 6~12 个月的学习者购买。若学习 javascript 时间太短,书里说的那些知识点可能都没有接触到;若学习的时间稍微长一些,比如 2 年左右的(如本人),购买的价值就下降了,因为书上很多的精华与糟粕,其实在你的项目中早已经接触到了;而且,若你一直使用 ES5 的严格模式进行开发,就能避免很多潜在的问题。

标签:
阅读(339)

公众号:

qrcode

微信公众号:前端小茶馆

公众号:

qrcode

微信公众号:前端小茶馆