JavaScript 语言规范
- 变量
- 声明变量必须加上
var
关键字: 当你没有写var
, 变量就会暴露在全局上下文中, 这样很可能会和现有变量冲突. 另外, 如果没有加上, 很难明确该变量的作用域是什么, 变量也很可能像在局部作用域中, 很轻易地泄漏到document
或者window
中, 所以务必用var
去声明变量.
- 声明变量必须加上
- 常量
- 常量的形式如:
NAMES_LIKE_THIS
, 即使用大写字符, 并用下划线分隔. 你也可用 @const 标记来指明它是一个常量. 但请永远不要使用const
关键词.
- 常量的形式如:
- 分号
- 总是使用分号.
- 嵌套函数
- 可以使用, 嵌套函数很有用, 比如,减少重复代码, 隐藏帮助函数, 等. 没什么其他需要注意的地方, 随意使用.
块内函数声明
- 不要在块内声明一个函数, 不要写成:
if (x) { function foo() {} }
- 虽然很多 JS 引擎都支持块内声明函数, 但它不属于 ECMAScript 规范 (见 ECMA-262, 第13和14条). 各个浏览器糟糕的实现相互不兼容, 有些也与未来 ECMAScript 草案相违背. ECMAScript 只允许在脚本的根语句或函数中声明函数. 如果确实需要在块中定义函数, 建议使用函数表达式来初始化变量:
if (x) { var foo = function() {} }
- 异常
- 可以:你在写一个比较复杂的应用时, 不可能完全避免不会发生任何异常. 大胆去用吧.
- 自定义异常
- 可以: 有时发生异常了, 但返回的错误信息比较奇怪, 也不易读. 虽然可以将含错误信息的引用对象或者可能产生错误的完整对象传递过来, 但这样做都不是很好, 最好还是自定义异常类, 其实这些基本上都是最原始的异常处理技巧. 所以在适当的时候使用自定义异常.
- 标准特性
- 总是优于非标准特性. 最大化可移植性和兼容性, 尽量使用标准方法而不是用非标准方法, (比如, 优先用string.charAt(3) 而不用 string[3] , 通过 DOM 原生函数访问元素, 而不是使用应用封装好的快速接口.
封装基本类型
- 没有任何理由去封装基本类型, 另外还存在一些风险:
var x = new Boolean(false); if (x) { alert('hi'); // Shows 'hi'. }
- 除非明确用于类型转换, 其他情况请千万不要这样做!
var x = Boolean(0); if (x) { alert('hi'); // This will never be alerted. } typeof Boolean(0) == 'boolean'; typeof new Boolean(0) == 'object';