您当前的位置:首页 > 电脑百科 > 程序开发 > 语言 > javascript

犀牛书作者:最该忘记的JavaScript特性

时间:2020-05-20 16:18:47  来源:  作者:

犀牛书作者:最该忘记的JavaScript特性

 

作者: 李松峰

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

前言

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

犀牛书作者:最该忘记的JavaScript特性

 

没记错的话,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()向文档中插入脚本。不过这时候要小心,因为你得把末尾的</script>标签拆成两个字符串。这样html解析器才不会把它解释为当前运行脚本的结束标签。

frame 相关

HTML早期是没有<iframe>的,不过有<frameset>和<frame>。window.frames属性是一个数组,包含嵌套的window对象,表示文档中的窗格。实际上,可以在窗格中调用文档的open()方法,然后使用document.write()在该窗格中动态生成整个文档。不管怎么说,这还真有点酷。因为窗格可以嵌套在其他窗格中,每个window对象都有一个frames数组包含自己的子窗格、一个parent属性引用包含窗口和一个top属性引用顶级窗口。犀牛书的早期版本专门用了几节篇幅和复杂的示意图来解释这些内容。

直接引用特定元素相关

在文档中直接引用特定元素的技术基本上都废弃了。前面说到的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版将不会再花笔墨描述这些陈旧的特性,这些特性大家最好还是忘掉。



Tags:JavaScript特性   点击:()  评论:()
声明:本站部分内容及图片来自互联网,转载是出于传递更多信息之目的,内容观点仅代表作者本人,如有任何标注错误或版权侵犯请与我们联系(Email:2595517585@qq.com),我们将及时更正、删除,谢谢。
▌相关推荐
一、逗号运算符, 是用于分隔表达式并返回链中最后一个表达式的运算符。let oo = (1, 2, 3)console.log(oo) // 3这里有三个主要表达式 1 、 2 和 3。所有这些表达式均被求...【详细内容】
2021-04-08  Tags: JavaScript特性  点击:(311)  评论:(0)  加入收藏
作者: 李松峰转发链接:https://mp.weixin.qq.com/s/guAN1Cz2gYfKdBhmUpLyVA前言JavaScript这门语言的第一个演示版差不多就在25年前诞生。 没记错的话,25年前的今天,1995年5月...【详细内容】
2020-05-20  Tags: JavaScript特性  点击:(82)  评论:(0)  加入收藏
▌简易百科推荐
1、通过条件判断给变量赋值布尔值的正确姿势// badif (a === &#39;a&#39;) { b = true} else { b = false}// goodb = a === &#39;a&#39;2、在if中判断数组长度不为零...【详细内容】
2021-12-24  Mason程    Tags:JavaScript   点击:(6)  评论:(0)  加入收藏
给新手朋友分享我收藏的前端必备javascript已经写好的封装好的方法函数,直接可用。方法函数总计:41个;以下给大家介绍有35个,需要整体文档的朋友私信我,1、输入一个值,将其返回数...【详细内容】
2021-12-15  未来讲IT    Tags:JavaScript   点击:(20)  评论:(0)  加入收藏
1. 检测一个对象是不是纯对象,检测数据类型// 检测数据类型的方法封装(function () { var getProto = Object.getPrototypeOf; // 获取实列的原型对象。 var class2type =...【详细内容】
2021-12-08  前端明明    Tags:js   点击:(23)  评论:(0)  加入收藏
作者:一川来源:前端万有引力 1 写在前面Javascript中的apply、call、bind方法是前端代码开发中相当重要的概念,并且与this的指向密切相关。本篇文章我们将深入探讨这个关键词的...【详细内容】
2021-12-06  Nodejs开发    Tags:Javascript   点击:(19)  评论:(0)  加入收藏
概述DOM全称Document Object Model,即文档对象模型。是HTML和XML文档的编程接口,DOM将文档(HTML或XML)描绘成一个多节点构成的结构。使用JavaScript可以改变文档的结构、样式和...【详细内容】
2021-11-16  海人为记    Tags:DOM模型   点击:(35)  评论:(0)  加入收藏
入口函数 /*js加载完成事件*/ window.onload=function(){ console.log("页面和资源完全加载完毕"); } /*jQuery的ready函数*/ $(document).ready(function(){ co...【详细内容】
2021-11-12  codercyh的开发日记    Tags:jQuery   点击:(36)  评论:(0)  加入收藏
一、判断是否IE浏览器(支持判断IE11与edge)function IEVersion() {var userAgent = navigator.userAgent; //取得浏览器的userAgent字符串var isIE = userAgent.indexOf("comp...【详细内容】
2021-11-02  V面包V    Tags:Javascript   点击:(40)  评论:(0)  加入收藏
Null、Undefined、空检查普通写法: if (username1 !== null || username1 !== undefined || username1 !== &#39;&#39;) { let username = username1; }优化后...【详细内容】
2021-10-28  前端掘金    Tags:JavaScript   点击:(51)  评论:(0)  加入收藏
今天我们将尝试下花 1 分钟的时间简单地了解下什么是 JS 代理对象(proxies)?我们可以这样理解,JS 代理就相当于在对象的外层加了一层拦截,在拦截方法里我们可以自定义一些个性化...【详细内容】
2021-10-18  前端达人    Tags:JS   点击:(51)  评论:(0)  加入收藏
带有多个条件的 if 语句把多个值放在一个数组中,然后调用数组的 includes 方法。// bad if (x === "abc" || x === "def" || x === "ghi" || x === "jkl") { //logic } // be...【详细内容】
2021-09-27  羲和时代    Tags:JS   点击:(58)  评论:(0)  加入收藏
相关文章
    无相关信息
最新更新
栏目热门
栏目头条