过去几年我注意到技术圈一个很奇怪的现象,有太多程序员将那些他们只是有过非常浅显的了解, 但其实根本就不懂的技术写到他们的简历中,这个现象几乎每种语言都有,但这其中最严重的就要数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.οnclick=…, 你还需要了解更多东西,这些都是粘贴复制无法学到的,只有通过阅读和练习, 你才能成为一名真正的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)。

转自 :http://coffeescript.iteye.com/blog/1736048

你不知道你不懂javascript相关推荐

  1. 别告诉我你懂Javascript

    2019独角兽企业重金招聘Python工程师标准>>> 过去几年我注意到技术圈一个很奇怪的现象,有太多程序员将那些他们只是有过非常浅显的了解,但其实根本就不懂的技术写到他们的简历中, ...

  2. JSON 之父新作,JavaScript “葵花宝典”参悟 JS 之道

    道格拉斯新作<JavaScript悟道>上市以来,深受读者喜爱.译者死月(朱凯迪)在翻译道格拉斯这本书的过程中,加入了很多自己的思考,让这本书的内容更加传神.丰满,也展现出了 JavaSc ...

  3. 详解动态规划最长公共子序列--JavaScript实现

    前面两篇我们讲解了01背包问题和最少硬币找零问题.这篇将介绍另一个经典的动态规划问题--最长公共子序列.如果没看过前两篇,可点击下面链接. 详解动态规划最少硬币找零问题--JavaScript实现 详 ...

  4. 经典的《JavaScript 权威指南》中的“对象”不经典

    这些天在为Qomo项目写"JavaScript面向对象的支持"这组文章.也一直在期待网上购得的那本<JavaScript 权威指南>(第四版)快快到来. 在前公司,有这 ...

  5. 使用JavaScript在文本框中的Enter键上触发按钮单击

    我有一个文本输入和一个按钮(见下文). 当在文本框中按下Enter键时,如何使用JavaScript 触发按钮的click事件 ? 当前页面上已经有一个不同的"提交"按钮,因此我不 ...

  6. JavaScript 对引擎、运行时、调用堆栈的概述理解

    JavaScript 对引擎.运行时.调用堆栈的概述理解  随着JavaScript越来越流行,越来越多的团队广泛的把JavaScript应用到前端.后台.hybrid 应用.嵌入式等等领域. 这篇文 ...

  7. Javascript的变量作用域居然可以跨越多个函数!

    今天,编写一个JavaScript的代码,是这样子的: function a(){ ... for(i=0;i<abc.length;i++){ ... b(); ... } ... } fun ...

  8. JavaScript中的全局变量介绍

    Global variables are declared outside of a function for accessibility throughout the program, while ...

  9. JavaScript将焦点设置为HTML表单元素

    本文翻译自:JavaScript set focus to HTML form element I have a web form with a text box in it. 我有一个带有文本框的W ...

最新文章

  1. Xilinx FPGA全局时钟和第二全局时钟资源的使用方法
  2. 学习CSS了解单位em和px的区别
  3. nginx不记录指定文件类型的日志
  4. Hyper-V群集对群集复制
  5. 多线程下C#如何保证线程安全?
  6. 【MySQL】时区设置引发的卡顿
  7. Linux远程连接与sshd服务安全设定
  8. 【Rpc】基于开源Dubbo分布式RPC服务框架的部署整合
  9. 理财产品收益可以保证吗?
  10. azure云数据库_Azure SQL数据库上的透明数据加密(TDE)
  11. Android 应用资源及R文件的位置
  12. UVA - 10534
  13. Android电视远程桌面,【当贝市场】教你使用小米电视远程控制Windows桌面
  14. Matlab2016a安装libsvm
  15. 融资融券开户超干货学习!
  16. 房租,社会教给年轻人的第一课
  17. android 权限整理
  18. R绘图 第八篇:绘制饼图(ggplot2)
  19. 【Egret优化分享】白鹭引擎王泽:重度H5游戏性能优化技巧
  20. 九度OJ题目1163:素数

热门文章

  1. 1048 行 MySQL指令(经典)
  2. html5获取gps坐标,html5获取手机GPS信息的示例代码
  3. stm32单片机屏幕一直闪_用STM32做一个微型掌上示波器项目——终于鼓起在大牛前献丑的无比勇气...
  4. ironpython最新版本_Microsoft IronPython2.7.5 最新版
  5. 面向对象、继承、多态、封装、匿名内部类的基本知识点复习总结
  6. 双路由器双小型交换机组建公司网络,2个公网IP上网案例(转载)
  7. 09 进程池的异步方法
  8. Harbor的搭建(vmware企业级docker镜像私服)
  9. 01python初识—编辑器版本变量知识
  10. Func和Action的介绍及其用法