JavaScript一团乱,这是好事
译者按: JavaScript从简单变复杂了,作者从另一个角度看待这个问题。
为了保证可读性,本文采用意译而非直译。另外,本文版权归原作者所有,翻译仅用于学习。
JavaScript从不移除旧的特性,新版本总是向后兼容。我希望我们能够把那些重复的旧的特性清理一下,但是保持兼容有太多的好处。我在本文会解释。
1. 向后兼容的优势
- 迁移到新的语言版本是一件轻而易举的事情。举个例子,如果你使用ES6,所有旧代码无需任何改动。
- 只有ES模块很难采用,因为它破坏了向后兼容性。
- 避免了代码版本化。如果你允许一些代码是“旧”的,有一些是“新”的:
- 语言引擎和工具变得更加复杂
- 开发人员需要小心应对不同的版本
- 你不能随意移动代码了(如果代码基础库是混合的)
2. 一些处理JavaScript扩展功能的技巧
- 授课和学习:你可以直接忽略旧的特性,不仅仅是它们长什么样,它们干嘛也无需知道
- 使用Linter来辅助码代码
- 使用Prettier来美化代码
3. 一个干净的JavaScript
如果你想要使用一个比较简洁的JavaScript,你可以忽略很多旧的语法,下面是一些建议:
- var: 使用let和const
- function: 使用箭头函数和方法定义(method definition)。优势:更容易处理this。(具体信息)
- Promises: 只使用async函数。你不能完全避开使用Promises。
- 迭代访问对象:使用map
- 循环:避免使用for-in,尽量避免使用for, 建议使用for-of。
- 参数:使用rest parameters(…args)
- Function.prototype.apply():使用spread operator(f(..myArray))
- 构造函数:使用class
- IIFEs(立即调用函数): 使用块作用域
4. 待定
typeof和instanceof非常复杂,我无法建议哪个取代哪个。推荐这篇博客:Beyond typeof and instanceof: simplifying dynamic type checks
5. 阅读更多
- 章节:一个JavaScript:在ES6中避免版本化
- 章节:ES6的核心特性(哪些ES5的特性被更好的ES6特性替代)
- 章节:Async函数
- 博客:一种不同的角度去理解JavaScript中的this
关于Fundebug
Fundebug专注于JavaScript、微信小程序、小游戏BUG监控,自从2016年双十一正式上线,Fundebug已经服务了一年半时间,累计处理了5亿+错误事件,得到了众多知名用户的认可。Fundebug支持主流前端框架的bug监控,欢迎各位老铁体验!
JavaScript一团乱,这是好事的更多相关文章
- BZOJ2744:[HEOI2012]朋友圈(最大团,乱搞)
Description 在很久很久以前,曾经有两个国家和睦相处,无忧无虑的生活着.一年一度的评比大会开始了,作为和平的两国,一个朋友圈数量最多的永远都是最值得他人的尊敬,所以现在就是需要你求朋友圈的最 ...
- 【追寻javascript高手之路03】javascript对象大乱斗
前言 昨天我们学习了下javascript中函数的参数与作用域的东东,现在回过头来看,其实都是与函数相关的,所以javascript中的函数仍然是王道,我们今天大概会发二篇或者三篇博客一起来巩固我们的 ...
- javascript洗牌算法 乱序算法 面试题
1.2种方案代码 <!DOCTYPE html> <html lang="zh"> <head> <meta charset=" ...
- javascript专题系列--js乱序
乱序的意思想必没有不知道:就是将数组打乱. 听到乱序一般都会想到js的随机函数Math.random(); var values = [1, 2, 3, 4, 5]; values.sort(func ...
- 转:JavaScript函数式编程(一)
转:JavaScript函数式编程(一) 一.引言 说到函数式编程,大家可能第一印象都是学院派的那些晦涩难懂的代码,充满了一大堆抽象的不知所云的符号,似乎只有大学里的计算机教授才会使用这些东西.在曾经 ...
- 响应式WEB设计的9项基本原则
响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...
- jQuery 评分插件(转)
评分效果的小插件jQuery Raty.它提供的API相当丰富真的是让人爱不释手.详细文档及下载插件请移步这里. 基本使用 下面我们来实际操作,运用一下这个有爱的小插件. 需要做的事情非常简单,在页面 ...
- 九天学会Java,第一天,变量和数据类型,赋值和输出
用9天入门三门编程语言,有可能嘛,尤其是对没有基础的同学来说?对于想学好的编程的人来说,无论从哪一门语言开始入手,语言的本身其实并不是我们最应该的关心的,至少不是作为一个初学者首先关心的. 网络上,网 ...
- 响应式WEB设计的基本原则大总结
响 应式Web设计对于解决多类型屏幕问题来说是个不错方案,但从印刷的角度来看,其却存在着很多的困难.没有固定的页面尺寸.没有毫米或英寸,没有任何物理 限制,让人感到无从下手.随着建立网站可用的各种小工 ...
随机推荐
- Ubuntu 中 iptables 增删查改
iptables是linux系统自带的防火墙,功能强大.如果iptables不熟悉的话可以用apf,是一款基于iptables的防墙. 一.安装并启动防火墙 $ /etc/init.d/iptable ...
- WITH RECOMPILE 和 OPTION(RECOMPILE) 使用上的区别
在考虑重编译T-SQL(或者存储过程)的时候,有两种方式可以实现强制重编译(前提是忽略导致重编译的其他因素的情况下,比如重建索引,更新统计信息等等), 一是基于WITH RECOMPILE的存储过程级 ...
- Mybatis延迟加载、缓存
一.Mybatis中的延迟加载 1.延迟加载背景:Mybatis中Mapper配置文件中的resultMap可以实现高级映射(使用association.collection实现一对一及一对多(多对多 ...
- DRF 商城项目 - 日志处理
logging 模块 logging 模块是最基本的日志处理模块 缺陷 但是拥有一些很致命的缺陷 要求用户主动查询, 需要登录到服务器才可以查看日志文件 自带的报错外部通知也没办法判断同类取舍, 短 ...
- 深入浅出TCP/IP协议
目录 什么是网络协议? 谁来制定这个网络协议? TCI/IP协议 什么是socket? http协议属于应用层还是传输层? soap可以使用HTTP协议进行传输吗? 各层协议举例 什么是网络协议? 话 ...
- SQLServer 查看耗时较多的SQL语句(转)
total_worker_time AS [总消耗CPU 时间(ms)],execution_count [运行次数], qs.total_worker_time AS [平均消耗CPU 时间(ms) ...
- 12-部署EFK插件
配置和安装 EFK 官方文件目录:cluster/addons/fluentd-elasticsearch $ ls *.yaml es-controller.yaml es-service.yaml ...
- 【2019北京集训六】路径(path) 二分+DP
此题niubi! 题目大意:给你一颗n个点的点带权无根树,现在请您进行以下两步操作: 1,选择一个$[0,T]$之间的整数$C$,并令所有的点权$wi$变为$(wi+C)%MOD$ 2,选择若干条点不 ...
- .net core内部分享ppt
Microsoft .NET 自 2002 年发行 v1.0 以来,已经过了近 14 个年头,在这 14 年里面,.NET 日渐成熟并成为 Microsoft 的重要开发平台之一,只要是在 Windo ...
- docker+nginx实现负载均衡
配置nginx配置文件(配置文件运行时是会加载到docker进程中)先建立nginx相关文件和目录,对应下面启动命令中的挂载位置,把主配置文件nginx.conf放到对应位置“/etc/docker/ ...