持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第9天,点击查看活动详情
阅读《JavaScript语言精粹》(修订版)的笔记记录,这章讲的是js一些有问题特性,我们有必要知道这些问题并避免它们。
-
==,会转换类型去判断,===只有类型相同值相同返回true。 弱等于转换的规则复杂。作者建议不要使用弱等于,下面是一些例子。''==0 false 0=='' true false==undefinded false false==null false null==undefinded true 详细规则参考:https://juejin.cn/post/6844903904480591880 -
with,结果可能有时不可预料,应该避免使用。
with(obj){ a=b } 先判断有没有obj.a,有则赋值obj.a = obj.b||b,没有就赋值给a。 这种方式很奇怪,但是在vue源码中模板解构可以看到有用到,很巧妙。 -
eval,传递字符串给编译器去执行。因为需要运行编译器,性能降低。安全性也被减弱。 定时器可以传函数也可以传字符串,要避免用字符串。
continue,作者说有性能问题
switch穿越,容易出问题,有时候很难找到问题所在if,while等语句最好通通使用代码块包裹代码、避免错误- 位运算符,它需要把数字运算符转化成整数,执行运算,再转换回去,运算比较慢,且js执行环境一般不是硬件处理。
function语句和表达式,因为变量提升的原因,作者建议写成表达式的形式,避免逻辑混乱。- 建议
{}不用new Object,因为多了个valueOf属性会让人困惑,作者真挑啊 new,构造函数使用的时候忘记用new,会导致对象属性声明到全局上。void,没什么用,避免使用。
JSlint
一个代码质量工具。检查语法和代码风格的问题。
- 检测拼写错误和被遗忘的
var声明 - 检测对面属性名是否拼写正确
JSLint在运行时接受一个选项对象作为参数,比如evil为true表示允许使用eval- 要求在
for等语句之外的语句都要加分号 - 自动换行
- 清除多余的逗号
if后面必须加代码块switch里每个case后面加break/return/throwvar,只能声明一次且在使用前声明,函数也是,参数不用声明。- 不用
with if里面不要有赋值语句- 尽量不用
==,判断的时候可以用感叹号。 - 标签。不认识
- 不可达代码(
return/break/continue/throw)后面加}/case/default - 不要出现三个
+/- ++、eval、位运算这些都可以关void不应该出现- 查找正则可能的错误
- 要求构造函数首字母大写,不要出现
new Number、String、Object等 - 也检查
html,标签要求小写,有结束标签,嵌套正确。 - 检查
JSON格式 JSON完成扫描,会给每个函数列出很多东西,闭包,变量啥的。