别告诉我你懂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“, 作者:Michael Woloszynowicz

学 JavaScript 前,这 4 个词你必须懂:JS、ES、DOM、BOM 每次有人问我“JavaScript 到底是什么?”我就忍不住想讲个故事。它不是冰冷的语法,而是让网页活过来的灵魂;它有标准、有规则、有魔法通道,还有能操控浏览器的超能力。今天就跟着小米,一起走进 JavaScript 的奇妙世界吧! 阅读详情

相关推荐

JavaScript的起源?不同的JavaScript和引擎?JS版本发展史?

1995年,JavaScript诞生了。不得不提到它的标准ECMAScript, 它是一个语言标准,而非具体的语言。JavaScript除了名字有”Java”, 其它和Java没任何关系。Netscape为推广自家的LiveScript,命名中包含当时最流行的编程语言Java来蹭蹭热度。Netscape公司有些人可能不熟悉, 它就是早期被IE做浏览器对抗后来逐渐消亡一家公司。

编程语言开发、框架原理、编程思想、最佳实践技巧经验分享。致力于各种编程技术的技巧经验干货分享,讲解开发避坑技巧,追踪开发前沿技术,实战展开解决难题。 程序员小迷助您在编程路上越走越好! 2159

artDialog入门

http://www.planeart.cn/demo/artDialog/index.html---关于此插件的一切 artDialog是一个基于javascript编写的对话框组件,它拥有精致的界面与友好的接口 自适应内容 artDialog的特殊UI框架能够适应内容变化,甚至连外部程序动态插入的内容它仍然能自适应,因此你不必去考虑消息内容尺寸使用它。它的消息容器甚至能...

IMSIB的专栏 334

javascript ArtDialog

artDialog是一个精巧的web对话框组件,压缩后只有十多KB,并且不依赖其他框架。 增加高亮按钮的样式;新增"twitter"风格皮肤;解决IE浏览器按钮字体模糊问题 推荐[稳定版]

javascript对话框(弹出层)组件artDialog

http://www.planeart.cn/downs/artDialog/

GOBY 栏目 397

artDialog 漂亮的javascript对话框(弹出层)组件

漂亮的javascript对话框(弹出层)组件 javascript对话框(弹出层)组件artDialog   artDialog是一个轻巧且高度兼容的javascript对话框组件,可让你的网页交互拥有桌面软件般的用户体验。   演示地址:http://www.planeart.cn/downs/artDialog/   项目主页:http://code.google.com/p/artdialog/   artDialog2采用全新的UI 功能: 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、...

artDialog-6

artDialog-6, 一个不错的dialog的UI组件。 基 于jquery 1.10.2的脚本库. 在平常的开发中使用。

artdialog弹出框

artDialog是一个轻巧且高度兼容的javascript对话框组件,可让你的网页交互拥有桌面软件般的用户体验。 功能: 支持锁定屏幕(遮罩)、模拟alert和confirm、多窗口弹出、静止定位、支持Ese键关闭对话框、定时关闭、自定义位置、拖动、鼠标调节窗口大小、换肤…… 优点 兼容主流浏览器: 支持IE6和IE6+, Firefox, chrome, Opera, Saf

anisweir的专栏 3448

Windows Server远程桌面断开后,PyWinAuto/按键精灵脚本失效?试试这个‘会话保持’的终极配置

本文深入解析Windows Server远程桌面断开后导致PyWinAuto/按键精灵脚本失效的问题,提供会话保持的终极配置方案。通过转换到控制台会话(console模式)和调整组策略,确保自动化程序在断开连接后持续稳定运行,适用于Windows Server各版本。

weixin_28738165的博客 227

JavaScript对话框(弹出层) – artDialog类库

artDialog是一个轻巧且高度兼容的javascript对话框组件,可让你的网页交互拥有桌面软件般的用户体验。 演示地址:http://www.planeart.cn/demo/artDialog/ 项目主页:http://code.google.com/p/artdia

Xiaowq的专栏 2939

GB28181安防平台未授权访问漏洞:原理、复现与修复指南

未授权访问漏洞是Web安全中常见的访问控制缺陷,其本质在于应用在提供对敏感功能或数据的访问前,未能对请求者的身份和权限进行充分验证。从技术原理上看,这类漏洞常源于拦截器配置错误、安全注解遗漏或自定义校验逻辑缺陷,导致本应受保护的API接口被意外暴露。在工程实践中,此类漏洞危害巨大,攻击者无需登录即可直接访问系统核心接口,可能引发敏感信息泄露、权限提升甚至系统接管。尤其在安防监控、物联网管理平台等场景中,一旦涉及用户管理接口(如`/api/user/**`),风险会急剧放大。本文以GB28181视频监控管理平

weixin_30271335的博客 438

5G物理层基础知识

1、关于RB和RE (1) RB(Resource Block,资源块)频率上连续12个子载波,时域上一个slot(时隙,14个ofdm符号) (2) RE(Resource Element,资源单元)频率上一个子载波,及时域上一个ofdm符号 注意:协议规定,5G每个时隙(非扩展CP)的符号数为14个(扩展CP情况下每个时隙有12个符号),而LTE(非扩展CP)每个时隙的符号数为7个。 简单说:一个12X14的方格,大的整个叫一个RB,每一个小块叫一个RE。另外,一个RE可存放一个调制符号(mo.

qq_39074243的博客 2万+

在 artDialog 窗口中追加最大化、最小化按钮

这些天做一个项目,使用了 artDialog 作为弹出窗口,将部分页面嵌入到窗口中,感觉操作起来还比较方便,但 artDialog 没有提供窗口最大化和最小化,这就比较烦人了,没办法,自己扩展吧 首先,我研究了一下,artDialog 的窗口关闭按钮,源码如下: /* * artDialog 4.1.6 * file:artDialog.source.js */ artDialog.fn =

文盲的专栏 6568

Colmap中 patchmatch源码

惊世骇俗的Colmap PatchMatch源码 500多行,简明易懂 先了解PatchMatch的options: max_image_size: 任一维度的最大图像尺寸 gpu_index: gpu的下标 depth_min,depth_max: 随机采样的深度范围 window_radius:用于计算NCC(两图片的归一化互相关),NCC的计算需要用到 win_size. 图像匹配 | NCC 归一化互相关损失 | 代码 + 讲解 - 知乎 (zhihu.com) window_step: 用.

qq_24884193的博客 2209

js堆和栈的区别_前端必懂的33个js难点,这个github项目告诉你,1万多Star!

最近有个项目一直出现在GitHub的Trending页面,这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。这些概念虽然不是硬性要求具备,但你可以把它作为未来可能用到的一部参考指南。目前该项目在 GitHub 上已经获得 18828 个Star,1520 个Fork(项目地址:https://github.com/leonardomso/33-js-concepts)该项目已经被翻...

weixin_35285276的博客 317

踩坑ubuntu24.04 编译vtk9.3.1的安卓版本

NDK官方明确废弃了旧版 armeabi ABI,强制使用armeabi-v7a或arm64-v8a。错误信息显示你的构建系统仍在使用超级构建(superbuild)模式,并且内部引用了已不再支持的。生成的合并库: $(pwd)/libvtk_combined.a"超级构建过程可能内部未充分考虑现代NDK变化导致内部配置ARM老ABI,重复失败。echo "正在提取所有.o文件..."echo "合并前所有库的总大小:"# 提取所有.a文件中的.o文件。echo "创建合并库..."

zhangyihu321的专栏 1892

01 底盘制动产品之轮速传感器

轮速传感器是用来测量汽车车轮转速的传感器。对于现代汽车而言,轮速信息是必不可少的,汽车动态控制系统(VDC)、汽车电子稳定程序(ESP)、防抱死制动系统(ABS)、自动变速器的控制系统等都需要轮速信息。

汽车软件工程师 | 好奇博主 | 处女座 4656

js 中文英文混排a-z_前端必懂的33个js难点,这个github项目告诉你,3万多Star!

前端媛猿读完需要5分钟速读仅需 3分钟开源最前线 整编 综合自:GitHub项目页去年有个项目一直出现在GitHub的Trending页面,这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。这些概念虽然不是硬性要求具备,但你可以把它作为未来可能用到的一部参考指南。目前该项目在 GitHub 上已经获得三万多个Star,三千多个Fork(项目地址:https:...

weixin_36368715的博客 1484

大模型多智能体协作面试题及参考答案

在多智能体系统里,代理定义自身目标或效用函数的过程与系统架构、应用场景紧密相关。从本质上讲,目标是代理行为的导向,而效用函数则是对目标达成程度的量化评估。代理通常依据自身角色、系统全局需求以及与其他代理的交互关系来确立目标。比如在合作型 MAS 中,代理目标可能需要与全局目标对齐,像多个物流机器人协作完成货物配送时,每个机器人的目标会围绕 “高效完成分配任务”“避免路径冲突” 等展开,其效用函数可能涉及任务完成时间、能耗等指标的加权求和。目标定义的方式存在多种类型。

大模型大数据攻城狮的专栏 1022

js 中文英文混排a-z_前端必懂的33个js难点,这个github项目告诉你,1万多Star!

(点击上方前端大学星标/置顶本公众号,提升前端技能.)开源最前线 整编 综合自:GitHub项目页最近有个项目一直出现在GitHub的Trending页面,这个项目是为了帮助开发者掌握 JavaScript 概念而创立的。这些概念虽然不是硬性要求具备,但你可以把它作为未来可能用到的一部参考指南。目前该项目在 GitHub 上已经获得18828个Star,1520个Fork(项...

weixin_29018335的博客 197

STM32F767 GPIO跑马灯工程从零搭建指南

嵌入式开发中,基于HAL库的STM32工程初始化是确保外设可靠运行的基础环节。其核心在于理解芯片时钟树配置原理、GPIO工作模式与硬件电气特性之间的映射关系。正确启用RCC时钟源、合理分配AHB/APB总线分频系数,可保障系统主频稳定;而精准设置推挽输出、上下拉状态及引脚速度,则直接影响LED等基础外设的驱动可靠性。结合STM32CubeMX图形化配置工具,开发者能将寄存器级操作抽象为可视化流程,显著提升工程可追溯性与复用性。本文以STM32F767IGT6和阿波罗开发板为载体,详解从Repository固

weixin_42453228的博客 61

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

js逆向破解 —— 懂车帝视频链接

背景 话说下午有一朋友发我一链接https://zjbyte.cn/i6615388842591518733/,让我帮忙看一下这个网页中视频链接是怎么获取的。我断断续续地花了两三个小时,最后终于把它给拿下了。在整个分析的过程中,我觉得还算是有点意思,所以写下这便博客,记录一下。 初步分析 话不多说,撸起袖子就是干。我打开了网页,并打开了 开发者工具 ,并在 network选项卡中清除掉请求,重新刷...

Mr.louis 7264

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

node.js和javascript的关系

node.js是一个基于 Chrome V8引擎的 JavaScript 运行时环境 一、类比JavaScript和java JavaScript java V8 JVM node.js JRE JavaScript和java都是一门编程语言,至于两者的关系,是雷锋和雷峰塔的关系 V8是google开源的JavaScript引擎,用于执行JavaScript,...

【小石头的茅坑】 71万+

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Three.js开发团队建设策略:如何快速培养既懂图形学又懂业务的复合人才?

在当今数字化时代,Three.js 开发需求日益增长,但找到既懂图形学又懂业务的复合型人才却难如登天。图形学专家可能不了解业务需求,业务人员又可能对复杂的图形学知识一知半解。这种矛盾让许多项目推进困难重重,开发效率大打折扣。那么,如何打破这种僵局,快速培养出满足项目需求的复合型人才呢?本文将为你揭秘,从团队建设策略到人才培养方法,从实践案例到实施步骤,全方位解析如何打造一支高效、全能的 Three.js 开发团队。

2401_82943878的博客 686

Node.js和Javascript的异同

JavaScript的组成: ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) DOM(一些操作页面元素的方法) BOM(一些操作浏览器的方法) Nodejs的组成: ECMAScript(语言基础,如:语法、数据类型结构以及一些内置对象) os(操作系统) file(文件系统) net(网络系统) ...

【小石头的茅坑】 71万+
上一篇: 企业网站用户体验度的5点小建议
下一篇: 六分钟八法则塑造优秀程序员
SleepInDelphi
博客等级 码龄19年 32粉丝 388原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值