在知识星球陆续发了些eslint小知识,意在通过eslint知识去了解规则内部的原理,汇总在此:

prefer-const

含义:始终用const定义你从不修改的变量,如果会被修改则使用let,永不使用var。

理由:让你写代码的时候更明确哪些变量是会被修改的,哪些是不会修改的。帮你理清逻辑,减少bug

no-array-constructor

含义: 不要使用Array构造器去创建数组,总是使用字面量。

理由: 当给Array构造器传一个参数时可能造成混淆,比如 new Array(3),它表示什么呢?

1) [undefined, undefined, undefined];

2)[3],

你可能在这两种结果中犹豫 另外一个理由就是,Array构造器可能被改写,有不可预知的风险。

no-prototype-builtins

含义: 禁止直接调用Object原型上的方法,如foo.hasOwnProperty('name'). 应该换用Object.prototype.hasOwnProperty.call(foo, 'name')

理由:Object.create方法允许给新创建的对象指定原型,意味着对象的原型可能是不明确的。如果用Object.create(null)创建了无原型的对象,再调用Object原型上的方法就报错

func-style

含义:用于指定定义函数的方式,有两个值:expression--表达式,declaration--函数声明

理由:用函数声名的方式定义的函数,会进行变量提升,有可能给人带来理解上的困惑,而表达式定义的不会。为了统一代码风格,最好确定一种函数定义风格。

prefer-rest-params

含义: 建议用剩余参数语法function f(a, b, ...args)来动态获取函数参数,而不是使用arguments

理由:

1. 剩余参数得到的是真正的数组,而arguments是类数组,有时候还需要再转化一步。

2. 剩余参数的语义更明确,即声明的形参之外的实参会被归进数组

 

no-useless-escape

含义:不使用多余的转义符,官方列出了一些没必要使用转义符的情况: "\'"; '\"'; "\#"; "\e"; `\"`; `\"${foo}\"`; `\#{foo}`; /\!/; /\@/; 以及需要使用转义符的地方: "\""; '\''; "\x12"; "\u00a9"; "\371"; "xs\u2111"; `\``; `\${${foo}}`; `$\{${foo}}`; /\\/g; /\t/g; /\w\$\*\^\./;

no-param-reassign

含义: 不要给函数的参数重新赋值。比如:function f(arg) { arg = 1; }或function f(obj) { obj.num = 1; }

理由:

1. 给函数的参数重新赋值会改变arguments对象,给后面的代码带来风险

2. 如果参数是引用类型,比如对象,修改对象的属性会影响到传入函数的那个原始对象

3. 影响V8引擎的性能

4. 改动传入的参数本身也是不明智的逻辑,如果需要可以复制一份数据再改。

arrow-body-style

含义: 箭头函数的内容是否用大括号包起来,取值有:always--始终用大括号,as-needed--需要的时候使用,never--从不使用

理由: 为了规避箭头函数语法区别可能带来的错误:函数体只有一行的时候,若不加大括号,会默认把这行代码的返回结果给return。函数体有多行的时候,必须使用大括号,并且需要自己写return语句。

import/no-mutable-exports

含义:用export暴露模块内容时,不应暴露可更改的数据。也就是说export出的必须用const定义,如:const name = 'a'; export default name;

理由:模块暴露的数据、函数等不应被更改。

no-multi-assign

含义: 禁止连续赋值,例如:let a = b = c = 1;

理由:

1. b和c会变成全局变量,造成意外风险

2. 阅读起来不清晰,debug困难

no-case-declarations

含义: 不要在switch语句的case中定义变量,包括使用let/const/function/class

理由:

1. switch语句是一个块级作用域,case下的let看起来是在整个作用域下可见的,但其实是在执行到当前case的时候才被初始化。容易使人迷惑。

2. 避免了在多个case中创建同名变量

推荐写法:

1. 在switch语句外部定义变量

2. 在case中使用大括号创建新的作用域,如: switch(name){ case 'a': { let xx = 1; break; } }

欢迎博主的加入知识星球~

从eslint规则学点JavaScript知识的更多相关文章

  1. Web前端基础怎么学? JavaScript、html、css知识架构图

    以前开发者只要掌握 HTML.CSS.JavaScript 三驾马车就能胜任一份前端的工作了.而现在除了普通的编码以外,还要考虑如何性能优化,如何跨端.跨平台实现功能,尤其是 AI.5G 技术的来临, ...

  2. 《jQuery风暴》第2章 必须知道的JavaScript知识

    第2章 必须知道的JavaScript知识 JavaScript是jQuery应用的基础,掌握JavaScript这门语言是使用jQuery的基础条件.本章不会全面细致的讲解JavaScript的全部 ...

  3. WEBBASE篇: 第十篇, JavaScript知识5

    JavaScript知识5 <!doctype html> <html lang="en"> <head> <meta charset=& ...

  4. ESLint 规则

    ESLint由 JavaScript 红宝书 作者 Nicholas C.Zakas 编写, 2013 年发布第一个版本. ESLint是一个以可扩展.每条规则独立的,被设计为完全可配置的lint工具 ...

  5. ESLint – 可扩展的 JavaScript & JSX 校验工具

    ESLint 是一个开源的 JavaScript 代码校验工具,最初是由 Nicholas C. Zakas 在2013年创建的.经常被用来发现问题的模式或代码,不符合特定的风格准则. ESLint ...

  6. 从一行代码里面学点JavaScript

    从一行代码里面学点JavaScript 现如今,JavaScript无处不在,因此关于JavaScript的新知识也是层出不穷.JavaScript的特点在于,要学习它的语法入门简简单,但是要精通使用 ...

  7. ESLint 规则详解(一)

    前端界大神 Nicholas C. Zakas 在 2013 年开发的 ESLint,极大地方便了大家对 Javascript 代码进行代码规范检查.这个工具包含了 200 多条 Javascript ...

  8. ESLint可共享配置发布,团队自定义ESLint规则新鲜出炉

    ESLint于2013年6月份推出,至今4个年头,最新版本v4.8.0.它是目前主流的用于Javascript和JSX代码规范检查的利器,很多大公司比如Airbnb和Google均有一套自己的Java ...

  9. 详解 ESLint 规则,规范你的代码

    在很久之前就想通过工具来规范自己的代码风格,减少程序出错的概率,如果看过我的 一个前端程序猿的Sublime Text3的自我修养 ,这篇博客的朋友,肯定知道在当时我使用 SublimeLinter- ...

随机推荐

  1. python实现一可升降式的冒泡排序

    前几天看了个冒泡的排序,这里手敲了一下代码,简单记录如下: def bubble_sort(arr, order='asc'): # #可选升降序的冒泡排序, order>0升序,order&l ...

  2. 移动端touch滑动事件监听

    <!doctype html> <html> <head> <meta charset="utf-8"> <title> ...

  3. 第四章 开始Unity Shader学习之旅(3)

    1. 程序员的烦恼:Debug 调试(debug),大概是所有程序员的噩梦.而不幸的是,对一个Shader进行调试更是噩梦中的噩梦.这也是造成Shader难写的原因之一--如果发现得到的效果不对,我们 ...

  4. cesium添加多个geojson文件并分别控制显示和隐藏

    /*获取geojson数据*/ function get_geojson(name,h,n){ let x=document.getElementById(n); if(x.className === ...

  5. 从自动化到智能化,网易杭研的AIOps探索与实践

    在大数据时代下,我们借助机器学习.数据仓库.大数据平台等大数据技术手段,将运维产生的数据进行分析.处理,得出最佳运维策略,以期实现对故障的事先干预,将风险降低到最低,从而降低运维成本,提升运维效率,最 ...

  6. IO 单个文件的多线程拷贝

    package FileCopyThread; //自建的包,根据个人调整 import java.io.File; import java.io.FileNotFoundException; imp ...

  7. leaflet 结合 geoserver 实现地图空间查询(附源码下载)

    前言 leaflet 入门开发系列环境知识点了解: leaflet api文档介绍,详细介绍 leaflet 每个类的函数以及属性等等 leaflet 在线例子 leaflet 插件,leaflet ...

  8. 微信小程序 buton清除默认样式

    相信很多小伙伴在开发小程序的时候都会碰到小程序Button默认样式的困扰,在重设样式的时候需要一次次的设置 分享一个自己在开发中的小方法: CSS all 简写属性 将除 unicode-bidi 与 ...

  9. 笔记||Python3之循环

    循环:          循环概念:在一定条件下,重复做某件事情(代码)          while循环:1 - while 条件表达式: 循环体 2 - 当 条件表达式 == True   才执行 ...

  10. 资源池模式和单例模式实现的自定义数据库连接池java实现版

    在企业级开发中,我们往往不会直接使用原生的JDBC操作来实现与数据库得连接.因为数据库的连接是一个很宝贵的资源且耗时,我们往往会在内存中引入一个资源池来统一管理数据库的连接.这个模式也被总结为一种设计 ...