糟粕:
1.全局变量(首当其冲)
三种定义全局变量的方法:
var foo=bar; // 并未在任何函数中声明,在函数之外声明是全局变量
window.foo=bar; //定义在全局对象上是全局变量
foo=bar ;// 定义在函数中,如果函数被执行,也成了全局变量,如果定义在函数外也是全局变量
2.作用域
JavaScript采用了C级代码块,但是没有提供块级作用域:代码块中声明的变量在函数的任何位置可见
3.自动插入分号(不知道为什么有如此糟的特性)
4.保留字
JavaScript的保留字很特别:对于一些没用过的单词也强行加入到保留字的行列:
abstract boolean byte debugger do等,尽量少碰有可能是保留字的单词
5.Unicode
JS字符是16位的
6.typeof
记住几个特殊的typeof就好了 typeof null 返回 object(判断某个变量是null用 val===null)
如果判断某个是对象 应该用下面的表达式:
val&&typeof val ==='object'
对于增则表达式,尽量不要用typeof,各个版本不同
7.parseInt
parseInt将字符串转化成整数,但是遇到非数字会停止解析
8.+
太多歧义,小心
9.浮点数
二进制的浮点数不能够用10进制来衡量,比如0.1+0.2===0.3是错误的
10.NaN
NaN不是一个数字,但是typeof NaN =='number',
判断是数字就用下面的表达式
typeof val ==='number' && isFinite(val)
11.伪数组
好处也是坏处
12.假值
可以列举的假值:0,false,null,[],NaN,‘’,undefined
13.hasOwnProperty
14.对象
对象都会有原型链,所以实质上没有空的对象,要对象赋属性值的时候要小心不要重名。
鸡肋:
1. ==
记住:能使用===和!==的地方就不要用==,因为有时候转换的规则谁也搞不清楚
2.with
能避免就避免,处理速度影响,有时候逻辑会自己乱
3.eval
eval是被滥用的最多的JS特性,使用eval会使得代码难以阅读,Function是eval的另一种形式,也应该避免,setTiemout
和setInterval函数当传递的是字符串的时候会想eval一样去处理,字符串形式也应该避免使用
4,switch
太容易出错了。
5. ++ --
6.new
new运算符创建一个继承于其运算输的原型的新对象,然后把新对象绑定给this,尽量少用this
7.void
避免使用