JavaScript-11子集和扩展
Js的精华不包括什么?
- 体长使用函数定义表达式而不是函数定义语句
- 循环体和条件分支都是用花括号括起来,不允许再循环体和条件分支中只包含一条语句时省略花括号
- 不包含逗号运算符,位运算符以及++和—
- 不包含==和!= ,这样会进行类型转换,推荐\=\=\=和!\=\=
- var 语句只能出现在函数体的顶部,将所有的变量声明写在一条单独的var语句中
- 禁止使用全局变量
子集的安全性
- 禁用eval()和Function()构造函数,无法做静态分析
- 禁止使用this关键字,因为函数可以通过this访问全局对象
- 禁止使用with,增加静态代码的难度
- 禁止使用某些全局变量
- 完全禁止window或document对象
- 提供一个外观面板或代理
- 禁止使用某些属性和方法。如caller和callee,函数的call()和apply()方法,以及constructor和prototype,非标准的属性_proto_
- 静态分析可以有效地防止带有点 . 运算符的属性存储表达式去独写特殊属性。方括号[]无法做静态分析,安全子集通常精致使用[],除非方括号内是一个数字或字符串直接量