JavaScript的子集和扩展
JavaScript的子集
1.精华
Douglas Crockford的《JavaScript:The Good Parts》,专门介绍了JavaScript中的发扬光大的精华部分。语言子集的目标是简化这门语言,规避掉语言中的怪癖,缺陷部分,最终使编程更轻松,程序更健壮。
子集的安全性
子集的目的:能在一个容器或“沙箱”中更安全地运行不可信任的第三方JavaScript代码。所有能破坏这个沙箱并影响全局执行环境的语言特性和API在这个安全子集中都是禁止的。
为了让JavaScript代码静态地通过安全检查,必须移除一些JavaScript特性:
1.eval()和Function()在任何安全子集都是禁止的。
2.禁止使用this关键字,因为在函数(非严选模式中)可以通过this访问全局对象。而沙箱的目的就是阻止对全局对象的访问。
3.禁止使用with语句,因为with语句增加了检查难度
4.禁止使用某些全局变量。在客户端JavaScript中,浏览器窗口对象可以当做全局对象,但也具有双重身份,因此代码中不能有对象window对象的引用。
5.禁止使用某些属性和方法,以免在沙箱中的代码拥有过多的权限,这些属性和方法包括arguments对象的两个属性caller和callee
6.静态分析可以有效地防止带有点(.)运算符的属性存取表达式去读取特殊属性。但[]来访问属性则处理方法不相同,因为无法对方括号内的字符串表达式进行静态分析。基于这些愿意,安全子集通常禁止使用方括号,除非方括号内是一个数字或字符串直接量。