作者: 李松峰

转发链接:https://mp.weixin.qq.com/s/guAN1Cz2gYfKdBhmUpLyVA

前言

JavaScript这门语言的第一个演示版差不多就在25年前诞生。

没记错的话,25年前的今天,1995年5月10日,星期三,我刚刚过了创造JavaScript(代号为“Mocha”)的“5月的10天”冲刺的一半。我正在写下个周一就要交付的一个演示,目的是展示JS与Netscape的深度浏览器集成(相对于Java小应用)。

1995年秋天,这门语言在Netscape Navigator的一个测试版中发布,当时叫LiveScript。那一年的年底,又被改名为JavaScript。也是在那一年,David Flanagan开始写JavaScript: The Definitive Guide的第一版,并由O'Reilly在1996年8月出版。如今,24年过去了。

犀牛书(英文版)第7版再过几个星期就要面世了。为此,David回忆了一下,想告诉大家有哪些JavaScript特性可以放心地忘掉。一个原因是第七版比第6版薄了不少。而这主要是因为之前的很多东西2020年的开发者已经不用关心了。Web兼容性永远存在(至少25年以来一直如此),浏览器厂商可能在很长时期内仍然需要支持那些陈旧的、难以理解的语言和平台特性。但对我们而言,已经没有必要再为这些特性分心了。

也就是说,有不少JavaScript和Web平台特性在第7版里已经销声匿迹了。应该说,能对这些特性说再见是件高兴的事。以下就是David凭记忆列出的几个应该忘记的特性。

arguments对象

arguments对象已经被ES6的...args语法完全取代。要解释清楚arguments与命名参数的关系,以及始终注意它对性能的影响着实不易。在遗留的前端代码中,也许还会看到它的身影。在严格模式下如果想将局部变量或函数参数命名为arguments,那浏览器也会提醒你它的存在。不过现在有了剩余参数,它就应该悄悄地被人遗忘了。

拼接字符串

曾几何时,我们还会担心重复拼接字符串导致的性能问题。有一段时间,大家都学会了先把字符串推到数组里,最后再使用join()把它们拼接起来。后来,JavaScript变快了,我们就把这个模式给忘了。而现在有了模板字面量,谁还会再拼接字符串呢?

document.write()

document.write()在很早以前,确切地说是在DOM问世之前,曾经是JavaScript中最重要的特性。(如果你没在20世纪写过JavaScript,那可能想象不到DOM出现之前的日子,但那个时代真的存在过。)如果没记错的话,人们甚至可以使用document.write()向文档中插入脚本。不过这时候要小心,因为你得把末尾的标签拆成两个字符串。这样HTML解析器才不会把它解释为当前运行脚本的结束标签。

frame 相关

HTML早期是没有

直接引用特定元素相关

在文档中直接引用特定元素的技术基本上都废弃了。前面说到的frames数组是一个,没记错的话,还有links和images数组,包含文档中的所有链接和所有图片。IE(我记得应该是版本4)一步到位,引入了document.all,这是一个包含文档中所有元素的数组。(这也是“DHTML”也就是“动态HTML”及后来DOM的发端,有点像人类进化史上第一条爬上陆地的鱼。)document.all有各种各样新奇的特性,它这个数组本身还有很多按名字或按其他条件来查询元素的方法。document.all最终没有被写进标准,但即便是标准的document.getElementById()、document.getElementsByName()、document.getElementsByTagName()和docuemnt.getElementsByClassName()方法,在今天看来似乎也已经没多少人用了。因为受到了jQuery的$()及受它启发而引入标准的document.querySelector()和document.querySelectorAll()的排挤。借用CSS选择符的威力,这两个方法直接就把之前的那些方法都给废掉了。

事件及其处理程序兼容

说起我最恨Internet Explorer的一件事,就是他们非要使用attachEvent()来注册事件处理程序。在我的印象中,他们是在标准已经规定了addEventListener()方法之后这么搞的,这可真是太讨厌了。事件及其处理程序一直以来都是Web开发中一个最大的不兼容问题。多少年以来,JavaScript程序员(和JavaScript图书作者)都必须处理IE事件模型与标准事件模型的各种差异。为此,处理事件的代码必须写两遍,一遍针对IE,一遍针对Firefox。书中介绍事件的章节相应地也会两倍长,因为有两套非常相似但却完全不兼容的事件处理机制。jQuery的一个主要特性就是实现了自己的事件兼容层,于是开发者只需掌握一种事件处理方式即可。我怀疑这也是它快速流行的一个重要原因。

DOM API 相关

最初的DOM API是在人们疯狂迷恋XML的时代定义的。(当时的人们确实相信用不了几年,XML就可以解决所有数据问题。真是个难以置信的时代。)某种程度上,正是W3C的认可,才让Java那些人影响了DOM API,这些人觉得最好只定义一套API,JavaScript程序员能用它操作HTML文档,而Java程序员能用它操作XML数据。这也是为什么会有Attr节点(最好当它不存在)这么怪异的东西的原因。DOM Level 3 API中最让我不理解的一个操作是从文档中删除元素e,你不能像今天这样写成e.remove(),而是必须写成e.parentNode.removeChild(e)。

不管怎么说,现在都已经2020年了。犀牛书第7版将不会再花笔墨描述这些陈旧的特性,这些特性大家最好还是忘掉。

推荐JavaScript经典实例学习资料文章

《36个工作中常用的JavaScript函数片段「值得收藏」》

《Node + H5 实现大文件分片上传、断点续传》

《一文了解文件上传全过程(1.8w字深度解析)「前端进阶必备」》

《【实践总结】关于小程序挣脱枷锁实现批量上传》

《手把手教你前端的各种文件上传攻略和大文件断点续传》

《字节跳动面试官:请你实现一个大文件上传和断点续传》

《谈谈前端关于文件上传下载那些事【实践】》

《手把手教你如何编写一个前端图片压缩、方向纠正、预览、上传插件》

《最全的 JavaScript 模块化方案和工具》

《「前端进阶」JS中的内存管理》

《JavaScript正则深入以及10个非常有意思的正则实战》

《前端面试者经常忽视的一道JavaScript 面试题》

《一行JS代码实现一个简单的模板字符串替换「实践」》

《JS代码是如何被压缩的「前端高级进阶」》

《前端开发规范:命名规范、html规范、css规范、js规范》

《【规范篇】前端团队代码规范最佳实践》

《100个原生JavaScript代码片段知识点详细汇总【实践】》

《关于前端174道 JavaScript知识点汇总(一)》

《关于前端174道 JavaScript知识点汇总(二)》

《关于前端174道 JavaScript知识点汇总(三)》

《几个非常有意思的javascript知识点总结【实践】》

《都2020年了,你还不会JavaScript 装饰器?》

《JavaScript实现图片合成下载》

《70个JavaScript知识点详细总结(上)【实践】》

《70个JavaScript知识点详细总结(下)【实践】》

《开源了一个 JavaScript 版敏感词过滤库》

《送你 43 道 JavaScript 面试题》

《3个很棒的小众JavaScript库,你值得拥有》

《手把手教你深入巩固JavaScript知识体系【思维导图】》

《推荐7个很棒的JavaScript产品步骤引导库》

《Echa哥教你彻底弄懂 JavaScript 执行机制》

《一个合格的中级前端工程师需要掌握的 28 个 JavaScript 技巧》

《深入解析高频项目中运用到的知识点汇总【JS篇】》

《JavaScript 工具函数大全【新】》

《从JavaScript中看设计模式(总结)》

《身份证号码的正则表达式及验证详解(JavaScript,Regex)》

《浏览器中实现JavaScript计时器的4种创新方式》

《Three.js 动效方案》

《手把手教你常用的59个JS类方法》

《127个常用的JS代码片段,每段代码花30秒就能看懂-【上】》

《深入浅出讲解 js 深拷贝 vs 浅拷贝》

《手把手教你JS开发H5游戏【消灭星星】》

《深入浅出讲解JS中this/apply/call/bind巧妙用法【实践】》

《手把手教你全方位解读JS中this真正含义【实践】》

《书到用时方恨少,一大波JS开发工具函数来了》

《干货满满!如何优雅简洁地实现时钟翻牌器(支持JS/Vue/React)》

《手把手教你JS 异步编程六种方案【实践】》

《让你减少加班的15条高效JS技巧知识点汇总【实践】》

《手把手教你JS开发H5游戏【黄金矿工】》

《手把手教你JS实现监控浏览器上下左右滚动》

《JS 经典实例知识点整理汇总【实践】》

《2.6万字JS干货分享,带你领略前端魅力【基础篇】》

《2.6万字JS干货分享,带你领略前端魅力【实践篇】》

《简单几步让你的 JS 写得更漂亮》

《恭喜你获得治疗JS this的详细药方》

《谈谈前端关于文件上传下载那些事【实践】》

《面试中教你绕过关于 JavaScript 作用域的 5 个坑》

《Jquery插件(常用的插件库)》

《【JS】如何防止重复发送ajax请求》

《JavaScript+Canvas实现自定义画板》

《Continuation 在 JS 中的应用「前端篇」》

作者: 李松峰

转发链接:https://mp.weixin.qq.com/s/guAN1Cz2gYfKdBhmUpLyVA

javascript犀牛书_犀牛书作者:最该忘记的JavaScript特性相关推荐

  1. java犀牛书_犀牛书学习笔记(9):继承

    OOP的特性之一就是继承,只有实现了继承的语言才能称之为OOP,本篇将说明javasctipt如何使用继承. 原型.构造函数和对象中的基于原型的继承概念 虽然本地对象都继承自Object,但实际上,可 ...

  2. java犀牛书_犀牛书学习笔记(1):语法结构、数据类型和值、表达式和运算符...

    把这三个部分写在一起,是因为这些和JAVA几乎相同,如果你有JAVA或者C的基础,可以快速阅读.这里只记录几个不一样的,需要记住的地方: 1.直接量概念:其实就是用具体值直接赋值来创建变量,比如&qu ...

  3. python抓取小红书_小红书很难爬?最新爬取方法教给你啦~

    前言 大家好,我是Kuls. 之前写的那篇App抓包软件charles的配置说过,超过30在看,马上更下一篇.有读者问我怎么爬App,我手把手教了他(多图警告) 所以加班加点给大家写了今天这篇文章. ...

  4. 新巴巴运动网项目需求书_项目申报书、项目可行性研究报告傻傻分不清楚?

    点击蓝色字关注我们 在企业的日常运作中,会出现很多种报告,比如:企业初建厂房时,需要去发改委取得备案文件,这个时候需要一份可行性研究报告:企业发展过程中,需要通过项目形式,去申请一笔资金时候,又需要一 ...

  5. javascript 保存原函数_前端工程师必须掌握的几个JavaScript设计模式及场景应用

    作者 | 考拉海购前端团队链接 | https://juejin.im/post/59df4f74f265da430f311909设计模式的定义:在面向对象软件设计过程中针对特定问题的简洁而优雅的解决 ...

  6. 《JavaScript 权威指南》犀牛书阅读详解

    前言: <JavaScript 权威指南>(JavaScript:The Definitive Guide)是一本由David Flanagan所著的JavaScript领域的经典书籍,它 ...

  7. 算法题指南书_分类算法指南

    算法题指南书 Today, we will see how popular classification algorithms work and help us, for example, to pi ...

  8. 智能有声书_有声小说全套资料_SSM_PPT_演示视频

    软件需求规约 1. 简介 1.1 目的 本文档目的在于提供关于智能有声书系统的功能需求的详述以及系统性能参数的说明. 1.2 开发语言及工具 组号 06 项目名称 智能有声书 编程语言 JavaScr ...

  9. 简书优秀IT专栏作者推荐

    简书优秀IT专栏作者 (个人整理,排名不分先后,欢迎留言补充) 推荐简书作者:不知霜舞哀伤udspj 简介: 专题:<程序员的日常生活> 推荐简书作者:s2dongman申悦 微博ID:@ ...

最新文章

  1. Mysql系列七:分库分表技术难题之分布式全局唯一id解决方案
  2. Julia程序设计2 数值类型
  3. CRM Fiori Opportunity应用点了edit之后超时的问题分析
  4. 《超级女声》新增 9月4日 娱乐无极限 回顾超女专辑(都是超女) [共39G的精品]
  5. 安卓操作系统版本(Version)与应用程序编程接口等级(Application Programming Interface Level)对照表...
  6. 他开发了 redux,昨晚字节一面却挂了?
  7. 服务器创建新文件夹权限设置密码,在服务器上修改文件夹权限设置密码
  8. 支付宝出征世界杯!白岩松:“中国除了足球队没去,其他都去了”
  9. 把人工智能体验做到极致,微软深挖人工情感的商机
  10. 第三篇——哈希值校验工具
  11. waves效果器_waves效果器:《我不是药神》配乐炼成记—Waves访时俊峰黄超
  12. Cpp Careless Tony
  13. 100Mbps 和 100Mb/s 单位Mbps和Mb/s有什么不同
  14. 11月更新M1芯片专用PS photoshop 2021/2022安装 PS2021/22 Mac版 附详细教程
  15. 怎么将文字转图片?这三个办法很好用
  16. 仿SDWebImage
  17. Android clippling使用
  18. sass入门_Sass入门
  19. 客户端命令行工具 - 接口调试神器 HTTPie
  20. leetcode 974. 和可被 K 整除的子数组 详解

热门文章

  1. pyhon量化数据处理小细节3---日期格式转换
  2. 实现一个通用的生产者消费者队列(c语言版本)
  3. JVM中安全点safePoint有哪些?
  4. 学成在线--9.页面静态化
  5. 无线连接 服务器,服务器无线远程连接
  6. curl -L get.rvm.io | bash -s stable报错:连接不上服务器
  7. docker二进制安装mysql_Docker搭建MySQL读写分离主从模式 分布式数据库中间件Mycat分库分表应用...
  8. python编写命令行框架_python的pytest框架之命令行参数详解(上)
  9. 什么可以作为gcroot_面包果既能当水果又可以作为粮食,国内却无法普及,这是为什么?...
  10. linux报网络设备繁忙,【分享】linux常用命令