Web 前端代码规范 v1.0 Beta

一套利于团队协作的前端代码风格规范,用以书写标准、清晰、易维护的 HTML、CSS 和 JavaScript 代码

腾讯 AlloyTeam 团队 致敬,参考了其团队规范

文件/资源命名

通用规则

  • 在 web 项目中,所有的文件名应该都遵循同一命名约定,使用语义化的文件命名,文件名要能“望文生义”,尽量避免使用拼音;
  • 文件名只使用字母 a-z,数字 0-9,连字符 -,下划线 _ 和句点 .
  • 文件命名以字母开头而不是数字,而以特殊字符开头命名的文件,一般都有特殊的含义与用处;
  • 文件名中字母全部采用小写,多个单词用下划线分隔(识别效率较驼峰体高);
  • 如需缩写单词,则应使用约定俗成的缩写形式,如 btn、nav、num、img 等,不能自造单词,以免引起歧义。
					
  1. /* Not good */
  2. xinzengyonghu.jsp
  3. 8926376.png
  4. CITYNAMES.json
  5. 1001-scripts.js
  6. MyHome.php
  7. npld.css
  8. /* Good */
  9. my_file_name.html
  10. man-made_list.html // man-made 是一个连字符单词

目录命名

参照文件命名通用规则。

要合理将文件分类到不同目录,避免一个目录下存放大量的文件。

HTML文件命名

参照文件命名通用规则。

CSS, SCSS 文件命名

参照文件命名通用规则。

以下划线 _ 开头的 SCSS 文件不会被编译成一个 CSS 文件。

压缩版本的 CSS 文件,文件名后面需加上 .min 后缀。

					
  1. basic_layout.css
  2. _mixin.scss
  3. common.min.css

JavaScript 文件命名

参照文件命名通用规则。

压缩版本的 JavaScript 文件,文件名后面需加上 .min 后缀。

					
  1. format_string.js
  2. public.min.js

图片命名

参照文件命名通用规则。

  • 图标类图片,需在文件名前面加上 ico_ 前缀。
  • 背景类图片,需在文件名前面加上 bg_ 前缀。
  • 雪碧图图片,需在文件名后面加上 _sprite 后缀。
  • Retina 图片,需在文件名后面加上 _1x_2x 后缀来标记原图和 2 倍图。
					
  1. ico_user_default.png
  2. bg_login_poster.jpg
  3. ico_station_rank_sprite.png
  4. ico_tools_1x.png
  5. ico_tools_2x.png

通用规则

  • 尽量遵循 HTML 标准和语义,但是不应该以浪费实用性作为代价;
  • 任何时候都要用尽量小的复杂度和尽量少的标签来解决问题;
  • 不要使用 HTML5 规范中已经被废弃的标签;
  • 使用 label 包裹附加文字的表单输入框(radio、checkbox);
  • 标签名全小写;
  • 属性名全小写,用中划线做分隔符;
  • 属性值使用双引号,不要使用单引号;
  • 不要在自动闭合标签结尾处使用斜线(HTML5 规范指出他们是可忽略的)。
					
  1. <!-- Not good -->
  2. <center class="header">...</center>
  3. <input type="checkbox"> Remeber me
  4. <DIV CLASS="my-style">...</DIV>
  5. <span data-fmtDate="1507593600000">2017-10-10</span>
  6. <a href='http://github.com'>GitHub</a>
  7. <input type="text" />
  8. <!-- Good -->
  9. <header class="header">...</header>
  10. <label><input type="checkbox"> Remeber me</label>
  11. <div class="my-style">...</div>
  12. <span data-fmt-date="1507593600000">2017-10-10</span>
  13. <a href="http://github.com">GitHub</a>
  14. <input type="text">

缩进

  • 缩进使用 1 个 Tab(占 4 个空格宽度);
  • headbody 外,嵌套的节点应该缩进;
  • 每个块级、列表、表格元素单独占一行,每个子元素都相对父元素缩进;
  • 坚决不要使用 Tab 和空格混搭的缩进方式。
使用 Tab 缩进比空格缩进有哪些优势?
  • 空格缩进一般通过键入 2 或 4 个空格来缩进对齐,其按键成本比 Tab 高得多(有些 IDE 可以设置空格宽度),使用 Tab 缩进更快捷;
  • 使用 Shift + Tab 组合键可以选取多行向前缩进,使用空格缩进做不到;
  • Tab 可以替换,在支持正则搜索的编辑器里,使用 \t 可以匹配搜索全部 Tab,空格缩进做不到。
					
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <title>Page title</title>
  5. </head>
  6. <body>
  7. <img src="images/company_logo.png" alt="Company">
  8. <h1 class="class-name" data-tip="slogan">Hello, world!</h1>
  9. </body>
  10. </html>

文档头

页面开头必须有文档头声明,推荐使用 HTML5 简单的 doctype 声明来启用标准模式,使页面在每个浏览器中尽可能一致的展现。

按照惯例,doctype 应大写。

					
  1. <!DOCTYPE html>
  2. <html>
  3. ...
  4. </html>

字符编码

在 HTML 中指定字符编码,让浏览器轻松、快速的确定适合网页内容的渲染方式。

字符编码通常设为 UTF-8

					
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta charset="UTF-8">
  5. </head>
  6. ...
  7. </html>

渲染模式

指定使用本地最高版本的 IE 来渲染页面。

对于国内常见的双核浏览器,指定优先采用极速模式(webkit 内核)来渲染页面。(目前仅 360 浏览器支持)

					
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <meta http-equiv="X-UA-Compatible" content="IE=Edge">
  5. <meta name="renderer" content="webkit">
  6. </head>
  7. ...
  8. </html>

CSS 和 JavaScript 文件引入

  • 无需为引入的 CSS 和 JavaScritp 指明 type 属性(在 HTML5 规范中,text/css 和 text/javascript 分别是他们的默认值,省略后对页面无影响);
  • 通常引入的 CSS 文件放在 <head></head> 内;
  • 一般情况下,JavaScript 脚本应放在页面底部,</body> 标签前面,以免阻塞页面加载,同时也避免了文档加载完成前 JS 无法获取 DOM 元素的问题。
					
  1. <!DOCTYPE html>
  2. <html>
  3. <head>
  4. <link rel="stylesheet" href="my_style.css">
  5. <style>
  6. ...
  7. </style>
  8. </head>
  9. <body>
  10. ...
  11. <script src="my_script.js"></script>
  12. <script>
  13. ...
  14. </script>
  15. </body>
  16. </html>

属性顺序

HTML 属性应当按照特定的顺序依次排列,确保代码的易读性和可维护性。

Class 用于标识高度可复用组件,因此应该排在首位;id 用于标识具体组件,排在第二位。

					
  1. class
  2. id
  3. name
  4. data-*
  5. src, for, type, href, value , max-length, max, min, pattern
  6. placeholder, title, alt
  7. aria-*, role
  8. required, readonly, disabled

Boolean 属性

HTML5 规范中,boolean 属性不需要声明属性值。

Boolean 属性的存在表示取值为 true,不存在则表示取值为 false。

					
  1. <input type="text" disabled="disabled"> <!-- Not good -->
  2. <input type="text" disabled> <!-- Good -->
  3. <input type="text" readonly="true"> <!-- Not good -->
  4. <input type="text" readonly> <!-- Good -->
  5. <input type="checkbox" checked="checked"> <!-- Not good -->
  6. <input type="checkbox" checked> <!-- Good -->
  7. <!-- Not good -->
  8. <select>
  9. <option value="1" selected="selected">1</option>
  10. </select>
  11. <!-- Good -->
  12. <select>
  13. <option value="1" selected>1</option>
  14. </select>
  15. <audio src="my_voice.mp3" controls="controls"> <!-- Not good -->
  16. <audio src="my_voice.mp3" controls> <!-- Good -->

通用规则

  • 代码风格上要以具有可读性、可维护性为基本原则,压缩代码的工作交给工具去做;
  • css 文件使用无 BOM 的 UTF-8 编码;
  • 不允许有空的规则;
  • 元素选择器用小写字母;
  • 不要在一个文件里出现两个相同的规则;
  • 每个属性声明末尾都要加分号。
					
  1. .style {} /*-- Not good --*/
  2. UL > LI {font-size: 18px;} /*-- Not good --*/
  3. ul > li {font-size: 18px;} /*-- Good --*/
  4. .style {color: red} /*-- Not good --*/
  5. .style {color: red;} /*-- Good --*/

缩进

与 HTML 缩进方式一样,缩进使用 1 个 Tab(占 4 个空格宽度)。

					
  1. .style {
  2. width: 100px;
  3. height: 80px;
  4. }

空格

  • 属性值前,即属性名的 : 后加空格;
  • 多个规则的分隔符 , 后加空格;
  • 选择器 >+~ 前后加空格;
  • { 前加空格;
  • !important! 前加空格;
  • @else 前后加空格;
  • 属性值中的 , 后加空格;
  • SCSS 中的运算符前后要加空格;
  • 每行行末不要有多余的空格。
					
  1. /* Not good */
  2. .style {
  3. color :red! important;
  4. background-color: rgba(0,0,0,.5);
  5. }
  6. /* Good */
  7. .style {
  8. color: red !important;
  9. background-color: rgba(0, 0, 0, .5);
  10. }
  11. /* Not good */
  12. .style ,
  13. .box{
  14. ...
  15. }
  16. /* Good */
  17. .style,
  18. .box {
  19. }
  20. /* Not good */
  21. .box>.style {
  22. ...
  23. }
  24. /* Good */
  25. .box > .style {
  26. ...
  27. }
  28. /* Not good */
  29. .style{
  30. ...
  31. }
  32. /* Good */
  33. .style {
  34. ...
  35. }
  36. /* Not good */
  37. @if($variable*2>10){
  38. ...
  39. }@else{
  40. ...
  41. }
  42. /* Good */
  43. @if ($variable * 2 > 10) {
  44. ...
  45. } @else {
  46. ...
  47. }

换行与空行

  • { 后和 } 前要换行,如果只有一条属性则例外,无需换行;
  • 每个属性独占一行;
  • 多个选择器的分隔符 , 后要换行;
  • 相邻的两段样式之间要用一个空行隔开;
  • 属性组之间需要有一个空行隔开。属性分组规范请参阅“声明顺序”部分。
					
  1. /* Not good */
  2. .style
  3. {color: red; background-color: black;}
  4. /* Good */
  5. .style {
  6. color: red;
  7. background-color: black;
  8. }
  9. /* Not good */
  10. .style {
  11. width: 100px;
  12. }
  13. /* Good */
  14. .style {width: 100px;}
  15. /* Not good */
  16. .container, .form-box {
  17. ...
  18. }
  19. /* Good */
  20. .container,
  21. .form-box {
  22. ...
  23. }

引号

  • 最外层统一使用双引号
  • 属性选择器中的属性值要用引号;
  • font-family 中含有空格的字体名需要加引号;
  • url 的内容要用引号。
CSS url 的内容加引号有什么好处?
  • 降低内容路径被 XSS 注入攻击的风险;
  • 避免一些浏览器兼容问题。
					
  1. .style:before {
  2. content: "";
  3. background-image: url("logo.png");
  4. }
  5. li[data-type="single"] {
  6. font-size: 18px;
  7. font-family: "Segoe UI", "Microsoft Yahei";
  8. }

注释

  • 注释使用 /* 注释内容 */
  • SCSS 中单行注释用 // 注释内容,不会输出到编译后的 CSS 中;
  • 如果希望将 SCSS 中的注释保留输出(即使在 compressed 输出模式下),则使用 /*! 注释内容 */
  • 注释的缩进与下一行代码保持一致;
  • /* 之后、*/ 之前和 // 之后要加一个空格;
  • // 写在代码右侧时,其与左侧代码间隔 2 个空格。

注: // 注释只用于 SCSS 中。

					
  1. /* Modal header */
  2. .modal-header {
  3. ...
  4. }
  5. /*
  6. * Modal header
  7. */
  8. .modal-header {
  9. ...
  10. }
  11. .modal-header {
  12. /* 150px = left + right */
  13. width: 150px;
  14. &.wide { // 宽屏模式
  15. width: 300px;
  16. }
  17. }

命名

  • 命名要符合语义,尽量避免使用拼音(约定俗成的除外,例如 youku)、无意义或理解困难、易产生歧义的字符;
  • Class 类名使用小写字母,以中划线分隔;
  • 仅当作 JS 中选择器使用的 class 类名,加上 js- 前缀;
  • SCSS 中的变量和 placeholder 使用小写字母,中划线分隔;
  • id 采用小驼峰式命名;
  • SCSS 中的函数、混合采用小驼峰式命名。
					
  1. /* Not good */
  2. .b { ... }
  3. .yonghu-list { ... }
  4. .spcart { ... }
  5. /* Good */
  6. .btn { ... }
  7. .user-list { ... }
  8. .shopping-cart { ... }
  9. /* class */
  10. .element-content {
  11. ...
  12. }
  13. /* id */
  14. #myDialog {
  15. ...
  16. }
  17. /* SCSS 变量 */
  18. $color-black: #000;
  19. /* SCSS placeholder */
  20. %dialog-border {
  21. ...
  22. }
  23. /* SCSS 函数 */
  24. @function pxToRem($px) {
  25. ...
  26. }
  27. /* SCSS 混合 */
  28. @mixin centerBlock {
  29. ...
  30. }

声明顺序

推荐的样式编写顺序依次为:
  • Positioning(定位)
  • Box model(盒模型)
  • Typographic(排版)
  • Visual(视觉)
  • Misc(杂项)
					
  1. .declaration-order {
  2. /* Positioning */
  3. position: absolute;
  4. top: 0;
  5. right: 0;
  6. bottom: 0;
  7. left: 0;
  8. z-index: 100;
  9. /* Box model */
  10. display: block;
  11. float: right;
  12. width: 100px;
  13. height: 100px;
  14. /* Typography */
  15. font: normal 13px "Helvetica Neue", sans-serif;
  16. line-height: 1.5;
  17. color: #333;
  18. text-align: center;
  19. /* Visual */
  20. background-color: #f5f5f5;
  21. border: 1px solid #e5e5e5;
  22. border-radius: 3px;
  23. /* Misc */
  24. opacity: 1;
  25. }

简写和省略

  • 颜色 16 进制用小写字母,可以简写的要简写;
  • 根据实际情况选择属性的简写方式;
  • 属性值如果是类似 0.x 的小数,则省略小数点前的 0;
  • 属性值如果是 0,则省略单位。
					
  1. /* Not good */
  2. .style {color: #333333;}
  3. .style {padding: 0.5em 1em 0.5em 1em;}
  4. .style {margin: 0px 0px 0px 10px;}
  5. /* Good */
  6. .style {color: #333;}
  7. .style {padding: .5em 1em;}
  8. .style {margin: 0 0 0 10px;}

前缀属性

  • 同个属性不同前缀的写法需要在垂直方向保持对齐,具体参照示例的写法;
  • 无前缀的标准属性应该写在有前缀的属性后面。

如非必要,尽量不要手写前缀属性,推荐使用自动化工具来处理,例如:autoprefixer。

					
  1. /* Not good */
  2. .style {
  3. user-select: none;
  4. -webkit-user-select: none;
  5. -moz-user-select: none;
  6. -ms-user-select: none;
  7. }
  8. /* Good */
  9. .style {
  10. -webkit-user-select: none;
  11. -moz-user-select: none;
  12. -ms-user-select: none;
  13. user-select: none;
  14. }

杂项

通用规则

缩进

与 HTML 缩进方式一样,缩进使用 1 个 Tab(占 4 个空格宽度)。

					
  1. var x = 1,
  2. y = 1;
  3. if (x === y) {
  4. ...
  5. } else {
  6. ...
  7. }

空格

  • 运算符前后要加空格:+, -, *, /, %, =, <, >等;
  • 代码块 { 前要加空格
  • 下列关键字前后都需要加空格:else, catch, finally
  • 下列关键字后需要加空格:if, for, while, do, switch, case, try, return, typeof
  • 下列逻辑运算符前后需要加空格:&&, ||
  • 三元运算符 ?, : 前后需要加空格;
  • 对象的属性值前需要加空格;
  • for 循环,分号后留有一个空格,前置条件如果有多个,逗号后留一个空格;
  • 函数的参数之间要加空格;
  • 一元运算符的符号前后不要加空格;
  • 调用函数的 (不要加空格。
					
  1. if (x && x === y) {
  2. x++;
  3. } else {
  4. z = x < 10 ? '0' + x : x;
  5. }
  6. var a = {
  7. b: 'string',
  8. c: function() {
  9. ...
  10. }
  11. };
  12. var arr = [1, 2, 3];
  13. for (var i = 0, len = arr.length; i < len; i++) {
  14. ...
  15. }
  16. function doSomething(a, b, c) {
  17. foo();
  18. ...
  19. }

换行与空行

  • 代码块 { 后和 } 前要换行;
  • 变量赋值后要换行,如同时赋值多个变量,且赋给变量初始值时,则 , 后要换行;
  • 同一行的代码过长时要考虑换行,具体换行规则如下:
    • jQuery 的链式调用,在 jQuery 方法的 . 前换行;
    • 逻辑运算语句换行时,运算符必须在新行的行首;
    • 三元运算语句换行时,在 ? 后换行。
  • 变量声明后要空一行(当变量声明在代码块的最后一行时,则无需空行);
  • 代码块后要空一行(在函数调用、数组、对象中则无需空行)。
					
  1. var x = 1,
  2. y = 1,
  3. a, b, c;
  4. (function($) {
  5. $('#elementId').find('.a-very-long-name-sub-element')
  6. .css({
  7. color: 'red',
  8. fontSize: '18px'
  9. })
  10. .fadeIn(300);
  11. })(jQuery);
  12. var iHaveVeryLongName =
  13. ((a && b) || (b && c) || (a && c)) ?
  14. x + y : x - y;

分号

  • 变量声明之后要加分号;
  • 表达式之后要加分号;
  • return 语句末尾要加分号;
  • throw 语句末尾要加分号;
  • break 后面要加分号;
  • continue 后面要加分号;
  • do-while 语句末尾要加分号。
					
  1. var x = 1;
  2. for (var i = 0; i < 10; i++) {
  3. x++;
  4. if (x % 2 === 0) {
  5. ...
  6. continue;
  7. }
  8. }

引号

最外层统一使用单引号。

不但比双引号输入更快捷(不用按 Shift 键),而且在插入 HTML 片段时好处十分明显。

					
  1. var x = 'string text';
  2. var html =
  3. '<div class="box">' +
  4. '<h1>Title</h1>' +
  5. '<p>Hello World!</p>' +
  6. '</div>';

括号

下列关键字后必须有大括号(即使代码块的内容只有一行):if, else, for, while, do, switch, try, catch, finally

					
  1. /* Not good */
  2. if (conditions)
  3. return true;
  4. /* Good */
  5. if (conditions) {
  6. return true;
  7. }

代码注释

  • JavaScript 的注释有两种 // 注释内容/* 注释内容 */
    • // 注释内容 用于单行代码注释;
    • /* 注释内容 */ 常用作代码段的注释,或较正式的声明中,如函数、业务功能等的描述中。
  • /* 之后、*/ 之前和 // 之后要加一个空格;
  • // 写在代码右侧时,其与左侧代码间隔 2 个空格。
					
  1. var a = true; // 同行注释
  2. // 顶格写的单行注释
  3. var elm = ((a && b) || (b && c)) ? x + y : x - y;
  4. /**
  5. * function name
  6. * @desc 一个带参数的高大上函数
  7. * @param {string} a - 参数 a
  8. * @param {number} b - 参数 b,默认值为1
  9. * @param {string} c - 参数 c 有两种支持的取值
    x - 表示情况1
    y - 表示情况2
  10. * @param {object} d - 参数 d 为一个对象
  11. * @param {object[]} e - 参数 e 为一个对象数组
  12. * @param {boolean} [f] - 参数 f 是一个可选参数
  13. * @return {array} - 返回一个数组
  14. */
  15. function foo(a, b, c, d, e, f) {
  16. ...
  17. }

变量命名

  • 命名要符合语义,尽量避免使用拼音(约定俗成的除外,例如 youku)、无意义或理解困难、易产生歧义的字符;
  • 标准变量采用小驼峰式命名(第一个字母小写);
  • 不要使用 JavaScript 中的 关键字保留字
  • 不要使用未声明的变量(会变成全局变量,引起意想不到的后果);
  • 尽量不用全局变量;
  • 全局变量、常量全大写,用下划线连接;
  • 上下文中的 this 引用,请使用 _thisthatself 中的一个来命名;
  • jQuery 对象必须以 $ 开头命名;
  • 一些常见的英文单词:
    • 字符 ID 在变量名中全大写;
    • 字符 URL 在变量名中全大写;
    • 字符 Android 在变量名中大写第一个字母;
    • 字符 iOS 在变量名中小写第一个,大写后两个字母。
					
  1. var thisIsMyName;
  2. var goodID;
  3. var reportURL;
  4. var AndroidVersion;
  5. var iOSVersion;
  6. var MAX_COUNT = 10;
  7. var self = this;
  8. var $body = $('body');

函数

  • 无论是函数声明还是函数表达式,( 前不要空格,但 { 前一定要有空格;
  • 函数参数之间用 , 分隔,注意逗号后有一个空格;
  • 函数名采用小驼峰式命名(第一个字母小写);
  • 构造函数,大写第一个字母;
  • 私有函数(方法),命名以下划线 _ 开头;
  • 函数名应使用动宾短语,即动词开头的短语,常用动词如下:
    • 进行:do
    • 新增:add
    • 删除:del
    • 编辑:edit
    • 查询:query
    • 查看:view
    • 获取:get
    • 设置:set
    • 构建:build
    • 校验:check
    • 确认:confirm
    • 保存:save
					
  1. /* Not good */
  2. function UserList (a,b){
  3. ...
  4. }
  5. /* Good */
  6. function buildUserList(a, b) {
  7. ...
  8. }
  9. /* Not good */
  10. doSomething (item);
  11. /* Good */
  12. doSomething(item);
  13. function SetPerson(name){
  14. this.name = name;
  15. }
  16. var people = new SetPerson('王大锤');

对象

  • 对象属性名不需要加引号;
  • 对象以缩进的形式书写,不要写在一行;
  • 对象最后一项末尾不要有逗号。
					
  1. /* Not good */
  2. var a = {
  3. 'b': 1,
  4. 'c': 2,
  5. };
  6. var a = {b: 1, c: 2};
  7. /* Good */
  8. var a = {
  9. b: 1,
  10. c: 2
  11. };

null

适用场景:
  • 初始化一个将来可能被赋值为对象的变量;
  • 与已经初始化的变量做比较;
  • 标记一个不再被使用的变量,来触发浏览器的垃圾回收,以便及时释放其引用。
					
  1. /* Not good */
  2. var a;
  3. if (a === null) {
  4. ...
  5. }
  6. /* Good */
  7. var a = null;
  8. if (a === null) {
  9. ...
  10. }
  11. var userInfos = data.userInfo;
  12. buildUserList(userInfos);
  13. userInfos = null; // 及时清除 userInfos 的引用,释放内存资源
  14. doOtherThings();

undefined

永远不要直接使用 undefined 进行变量判断。

使用 typeof 和字符串 undefined 对变量进行判断。

					
  1. /* Not good */
  2. if (person === undefined) {
  3. ...
  4. }
  5. /* Good */
  6. if (typeof person === 'undefined') {
  7. ...
  8. }

杂项

  • ===, !== 代替 ==, !=
  • 不要在内置对象的原型上添加方法,如 Array, Date
  • 不要声明了变量却不使用;
  • 不要在同个作用域下声明同名变量;
  • 不要在内层作用域的代码里声明了变量,之后却访问到了外层作用域的同名变量;
  • 不要在循环内部声明函数;
  • 避免使用 eval
  • 不要使用 with
  • for-in 里一定要有 hasOwnProperty 的判断;
  • setTimeout()setInterval() 传入函数而不是字符串。
					
  1. /* Not good */
  2. if (a == 1) {
  3. a++;
  4. }
  5. /* Good */
  6. if (a === 1) {
  7. a++;
  8. }
  9. /* Not good */
  10. Array.prototype.count = function(value) {
  11. return 4;
  12. }
  13. /* Not good */
  14. var x = 1;
  15. function test() {
  16. if (x === 10) {
  17. var x = 0;
  18. }
  19. x += 1;
  20. }
  21. /* Good */
  22. for (key in obj) {
  23. if (obj.hasOwnProperty(key)) {
  24. // 确保 obj[key] 属于对象而不是继承
  25. console.log(obj[key]);
  26. }
  27. }
  28. /* Not good */
  29. setInterval('getStatus()', 1000);
  30. setTimeout('if(!true){ doSomething() }', 500);
  31. /* Good */
  32. setInterval(getStatus, 1000);
  33. setTimeout(
  34. if (!true) {
  35. doSomething();
  36. }
  37. }, 500);

前端开发首推的编辑器是 VSCode,微软出品,免费且功能强大,颜值极高,拥有较为丰富的插件资源,是一个“披着编辑器外衣的 IDE”。

其次是 Atom,GitHub 御用编辑器,也是一款非常不错的免费编辑器,但对机器性能有一定要求,启动较慢。

最后是 Sublime Text,小巧轻便,速度快,是一款收费编辑器(可无限试用)。

(插件和配置文件玩命整理中...)

TOP
Fork me on GitHub