`
coffeescript
  • 浏览: 123254 次
社区版块
存档分类
最新评论

你不知道你不懂javascript

阅读更多

过去几年我注意到技术圈一个很奇怪的现象,有太多程序员将那些他们只是有过非常浅显的了解, 但其实根本就不懂的技术写到他们的简历中,这个现象几乎每种语言都有,但这其中最严重的就要数javascript了。

你不知道你不懂

出现这种状况的一个很大的原因就是现如今几乎每个开发者的工作都或多或少要依赖于javascript, 但大多数人并不真的理解这门语言,他们常用的学习方式是复制粘贴,使用这种方式, 你永远不会真正学会这门语言,而只能得到一个你已经懂了的假象。

根据我过去几年学习和使用javascript的经验,在你了解之前,你不会知道你其实不懂, 这听起来有点绕,你真正需要的就是有个人来告诉你你其实不懂,你需要全面系统的学习。 我经常面试一些自豪的将javascript列在他们简历中的家伙,但他们通常也就只能做个简单的onClick处理或是表单验证。 使用jQuery或者Dojo这样的框架当然没什么问题,但是除非你能了解隐藏在这些框架之后的javascript技术, 否则你不可能真正的掌握这些工具包的能量所在,下面就是我划分的从低到高的javascript知识点, 分为基础,中级和高级3个部分,看看你知道多少:

javascript的基础知识

  • 知道基本的编程语法,比如循环,判断,try/catch等等 * 理解包括多种函数定义以及赋值的方式,包括匿名函数
  • 理解基本的命名空间,全局(window)空间以及对象空间(不包括闭包)
  • 理解上下文的角色以及this变量的使用 * 理解各种对象以及函数的初始化和声明方式
  • 理解javascript比较操作符,如<, >, ==, ===,以及对象和字符串比较的原理和对象映射 * 理解对象属性和函数的数组索引,以及这和真实的数组之间的区别。

javascript中级知识

* 理解定时器,以及它的工作原理,包括何时以及如何使用定时器来异步执行方法调用

  • 关于回调的深度支持,以及如何通过call和apply方法来控制上下文和函数参数传递
  • 理解JSON标记以及eval函数 * 理解闭包以及他们如何影响你的代码效率
  • AJAX以及对象序列化

javascript高级知识点

  • 理解方法的”arguments’变量,包括如何使用它来通过arguments.length重载函数,以及通过arguments.callee来进行递归调用,需要注意使用这个特性有一定的危险性,因为ECMAScript 5 的Strict模式不支持此功能,但jQuery和Dojo都用到了它。
  • 高级闭包比如 self-memoizing函数,partially applied函数,以及最可爱的 (function(){})()调用。
  • 函数以及HTML prototype,prototype chain,以及如何使用基本的javascript对象和函数(比如Array)来简化代码。
  • 对象类型以及instanceof的使用 * 正则表达式和表达式编译
  • With语句以及为什么不要使用它们 * 最困难的部分,知道如果利用所有这些工具,并产生处干净,整洁,健壮,快速,可维护以及兼容不同浏览器的代码。

这里的最后一点特别重要并且也是最难实现的,因为javascript天生不够严格的语法, 你的程序很容易就会变成意大利面条式的难以维护的灾难代码,一旦你开始学习javascript语言本身, 你只能通过在大型的Web程序中不断实践才能真正掌握它,这可能要花好几年的时间, 并且你没法从书本上学到这些,我自己每天使用javascript好几小时,已经好几年了, 但我还是在不断寻找更好的方式来编写和重构我的代码,出于这个原因,一开始就使用jQuery这样的框架会很危险, 它会很容易让你的代码变得不可维护,Dojo的Class和Package系统则多少会帮上点忙。

考虑到javascript现在已经通过Node.js这样的项目渗透到了后端,我决定将和Web相关的部分单独拉出来讲讲, 也就是说,如果你想要在Web开发中使用javascript,那么下面这些就是每一个优秀程序员都应该了解的:

  • 如何高效的操作Dom(添加,删除以及更新),还有如何通过使用document fragments这样的工具来最小化浏览器的re-flows。
  • 夸浏览器的DOM元素属性提取(比如,style,position等等),jQuery和Dojo都可以很好的完成这些工作,尽管如此,理解从CSS和style标签中提取属性的差异,以及如何计算position和size还是很重要的。
  • 夸浏览器的事件处理,绑定,反绑定,冒泡,以及如何取得期望的回调上下文。在一次,现成的框架也可以很好的处理这些事情,但是你应该对IE浏览器和W3C标准浏览器之间的不同有所了解。
  • 正则表达式选取DOM节点 * 浏览器功能检测以及智能降级

就像你从上面的列表中看到的,对于javascript,除了alert(myval)或者myBtn.onclick=…, 你还需要了解更多东西,这些都是粘贴复制无法学到的,只有通过阅读和练习, 你才能成为一名真正的javascript程序员。

这里推荐两本关于javascript的好书,”the good parts”和”javascript忍者的秘密”, 如果你只是为了装饰简历,我建议你至少也要搞懂基础阶段的那些知识点,并且至少尝试过中极阶段的那些技术。 一旦你发现当你开始自己开发你想要的功能,而不是从其他人那里拷贝粘贴时,你就可以宣称自己懂javascript了, 在那之前,请先别这样说。

如果我错过了什么关于javascript的概念,欢迎给我留言,同时也别忘了分享任何你关于JS或者其它语言的经验。

需要说明的是我并不是一个前端开发者,我实际上是一个后台开发者,但是因为形势需要, 渐渐变成了一个全协议栈的开发者,现如今,几乎每个后端开发者都需要了解javascript, 这也是我写这篇文章的目的,我并不是想表达我对javascript有多了解, 我只是想说javascript是一门非常强大和庞杂的语言,它远比你第一眼看到的要复杂

本文翻译自”You Don’t Know javascript”(http://www.w2lessons.com/2011/04/you-dont-know-javascript.html), 作者:Michael Woloszynowicz(http://twitter.com/mwbiz)。

893
12
分享到:
评论
18 楼 lihong11 2013-01-18  
最近正在找这方面的书看
17 楼 qfstudying 2012-12-26  
无论如何,支持认真写博的童鞋!
16 楼 fangtuo90 2012-12-17  
楼主,有个简单的javascript问题想请教您,麻烦您不吝赐教,谢谢
我的目的是想添加一个右键,将网页选中文字输出到一个打开的记事本中间

//以下为新添加的注册表
Windows Registry Editor Version 5.00
[HKEY_CURRENT_USER\Software\Microsoft\Internet Explorer\MenuExt\\用记事本打开]
@="C:\\input.htm"

//以下为input.htm
<SCRIPT language="javascript" src="input.js" type=text/javascript></SCRIPT>

//以下为input.js
var selectText=document.selection.createRange().text;//获得当前选择的文本
var WshShell=new ActiveXObject("WScript.Shell");//调用外部程序
WshShell.Run("notepad.exe",3,false);//打开记事本
WScript.Sleep(1000);
var temp=selectText.split('');//在记事本中输入选择的文本
for(var i=0;i<selectText.length;i++){
WshShell.SendKeys(temp[i]);
WScript.Sleep(100);
}
运行结果:
行:    1
Char   1
错误:  未指明的错误
代码:  0
URL:   file:///C:/input.js
并提示是否要在此页面运行脚步,我选是但是没有任何反应,不知道为何,我是个新手,找了半天百度也没解决,还请多多指教,谢谢!
15 楼 yangliweng2 2012-12-06  
大神,JS我觉得好难学,而且那些真正的特效好像老师说也没多大作用,具体是做功能,也许我们都忽视了JS的魅力吧
14 楼 smiky 2012-12-03  
FlyAway2 写道
他们常用的学习方式是复制粘贴,使用这种方式, 你永远不会真正学会这门语言,而只能得到一个你已经懂了的假象.......

切记!真正的能搞懂的有几个呢?没有多年的使用经历能学好都是假的,要么就是疯子,还有天才!

真正做纯JS开发最多半年这些全会了,这算不上什么的,这连DOM都没有深入的说到,至于什么VML/SVG一些乱七八糟的东西多了去了
13 楼 FlyAway2 2012-12-03  
他们常用的学习方式是复制粘贴,使用这种方式, 你永远不会真正学会这门语言,而只能得到一个你已经懂了的假象.......

切记!真正的能搞懂的有几个呢?没有多年的使用经历能学好都是假的,要么就是疯子,还有天才!
12 楼 qq413041153 2012-12-03  
邪恶的喵呜 写道
果然是文无第一武无第二,搞技术的谁都不服谁

哥们说的太精辟了!
11 楼 邪恶的喵呜 2012-12-03  
果然是文无第一武无第二,搞技术的谁都不服谁
10 楼 smiky 2012-12-03  
会这点东西就算牛B?那我启不是很牛B?上面说的这些只能算基础,实战起来算不上什么的
9 楼 zxmlgh 2012-12-03  
我可以开发mootools插件,熟读mootools的源码。应该不是垃圾水平
8 楼 rox 2012-12-02  
qq413041153 写道
看楼主的定义,我可能中高水平.我一般都是使用jquery,我可以开发jquery插件和自定义一些现有插件.不知道是什么水平

楼主翻译或者转载的,应该去问Michael Woloszynowicz,呵呵!
7 楼 qq413041153 2012-12-02  
看楼主的定义,我可能中高水平.我一般都是使用jquery,我可以开发jquery插件和自定义一些现有插件.不知道是什么水平
6 楼 wb284551926 2012-12-02  
看完了 我感觉我的javascript还是入门级的
5 楼 o_o_0 2012-12-02  
    
4 楼 laogao3232 2012-11-30  
我觉得,这个东西还是得用,得是工作驱动的,我之前也老写javascript,大概写了2年。
现在基本上不用了,只能偶尔拿出来炫耀一下,这个我会。
3 楼 蓝琪儿 2012-11-29  
值得读的一篇文章,很好!作为一名在校学生,这学期把Javasript很多书籍阅读和理解完之后,看这篇文章,很有感触~~
2 楼 sunxuetao2010 2012-11-29  
讲的还算中肯,其实javascript的面向对象编程,原型继承还有函数式编程的理解都很重要。
1 楼 blackproof 2012-11-29  
楼主javascript这么nb,不如写一篇javascript的prototype,还有prototype之间引用什么滴,还有关于html5中的javascript什么滴

相关推荐

    JavaScript核心参考手册

    如果你是对javascript没有任何基础的小菜,就不要下载它了,因为它并非JavaScript教程,下载了你可能不懂用。 如果你是javascript的老菜,对javascript内置对象与函数非常熟悉,你也不要下载它,下了你也不必查它。

    JavaScript闭包 懂不懂由你反正我是懂了

    如果你不能向一个六岁的孩子解释清楚,那么其实你自己根本就没弄懂。好吧,我试着向一个27岁的朋友就是JS闭包(JavaScript closure)却彻底失败了

    5你不懂JS_异步与性能

    You Don’t Know JS You Don’t Know JS 你不懂JS 你不懂JS 你不懂JS javascript

    javascript翻译机(翻译htmlCSS代码)v3.01绿色版

    javascript翻译机是一款好用的javascript翻译软件,该软件界面简洁,操作方便,体积小巧,功能强大,使用后可以帮助翻译html CSS代码,... 2、实现了不懂英文但是看得懂英文源码,不懂英文但是写得出英文源码。 3、目前

    javascript-interpreter:不懂编译也能造JavaScript解释器 —— 手把手教你造 JavaScript 解释器

    《不懂编译也能造JavaScript解释器》这个仓库适用于装示例代码,已全部迁移至语雀。等我把内容基本写完了再做交互式版本吧。内容地址目录

    3你不懂JS_this与对象原型对

    You Don’t Know JS javascript 你不懂JS_this与对象原型对 你不懂JS_this与对象原型对

    javaScript脚本游戏学习,看懂了这个游戏就没有什么脚本你解决不了了

    javaScript脚本游戏学习,看懂了这个游戏就没有什么脚本你解决不了了疯狂坦克 疯狂坦克

    不懂JavaScript应该怎样学

    我不懂JavaScript [Help! I Don’t Know JavaScript!] June 5th, 2007, 作者 Michelle 为了帮助所有对Mootool有兴趣却碰上很多麻烦的人,我整理了这些能够教给你开始从事客户端应用开发所需的所有知识的网上资源。 ...

    【JavaScript源代码】一文读懂JavaScript 中的延迟加载属性模式.docx

    一文读懂JavaScript 中的延迟加载属性模式  传统上,开发人员在 JavaScript 类中为实例中可能需要的任何数据创建属性。对于在构造函数中随时可用的小块数据来说,这不是问题。但是,如果在实例中可用之前需要计算...

    JavaScript中文帮助文档

    你还在学习JavaScript而发愁吗?现在有一部中文帮助文档,提供你遇到难题时去查,你还会担心学不会吗?

    4你不懂JS_类型与文法

    你不懂JS You Don’t Know JSYou Don’t Know JSYou Don’t Know JS javascript

    div+javascript的弹出框

    div,javascript,弹出框, javascript写的类,通过调用想页面注入html标签! 被人对ps不懂,没有做图片!

    JavaScript教程

    关于JavaScript的教程,让你了解JavaScript的世界,让你从不懂到懂

    javascript的骰子

    使用了javascript、CSS3、ES6,如果不懂ES6的朋友,可以去相应的地方转为ES5。之前发过一个资源,也是骰子的,但是第一个骰子设置最大值不是6,所以这个算是重发......

    javascript真经

    大家看了慧能的偈子都说:“写的什么乱七八糟的啊,看不懂”。师父弘忍看了神秀的诗偈也点头称赞,再看慧能的诗偈之后默然摇头。就在当天夜里,弘忍却悄悄把慧能叫到自己的禅房,将珍藏多年的软件真经传授于他,然后...

    Photoshop-CS6-JavaScript.zip

    Photoshop CS6 JavaScript 编程 参考手册,英文版本的,要是看不懂英文的话可以用工具翻译,要是不想看英文版本的话,就不要下载了。

    javascript翻译机

    可以把英文代码翻译为中文,也可以把写的中文代码翻译为标准英文代码。 实现了不懂英文但是看得懂英文源码,不懂英文但是写得出英文源码。 目前实现了html+CSS+Javascript的中文化。

Global site tag (gtag.js) - Google Analytics