js 严格模式
1、去除with
我好像从没用过with
2、局部变量再赋值前必须声明
我好像一直这样做的
3、this不再默认指向全局
sayColor.call(); sayColor.call(null); sayColor.call(undefined);
//都提示错误
执行构造函数需要new:this在被赋值之前会一直保持为undefined,这意味着当一个构造函数在执行时,如果之前没有明确的new关键词,会抛出异常。
function Person(name){ this.name = name; } var me = Person('sfp'); // error var me = new Person('sfp');
4、防止重名
5、eval
(function(){ eval('var a = 0;'); var result = eval('var x = 10, y = 20; x + y;');
// 在eval()中执行的变量和函数申明不会直接在当前作用域中创建相应变量或函数 alert(a);
// 任何在eval()执行过程中创建的变量或者函数保留在eval()中。但你能明确的从eval()语句的返回值来获取eval()中的执行结果 alert(result); }());
6、对只读属性修改时抛出异常
var person = {}; Object.defineProperty(person, 'name', { writable: false, value: 'sfp' }); person.name = 'wj'; //不能修改
使用
不要再全局环境下启动strict
两种方式
// 单个函数strict function doSomething() { "use strict"; // 这个函数中的代码将会运行于严格模式 } function doSomethingElse() { // 这个函数中代码不会运行于严格模式 } // 多个函数同时strict (function() { "use strict"; function doSomething() { // 这个函数运行于严格模式 } function doSomethingElse() { // 这个函数同样运行于严格模式 } }());