JavaScript严格模式 JavaScript代码提升 JavaScript编码习惯 "use strict"; 定义JavaScript代码应该在严格模式下执行。 "use strict" 指令 "use strict" 是在JavaScript 1.8.5(ECMAScript 5版)中的新指令。 它不是一个语句,是字面量表达式,早期版本的JavaScript忽略. "use strict"的目的是指示代码应以“严格模式”执行 以严格的方式,你不可以,例如,使用未声明的变量. 严格模式支持的浏览器有: IE from version 10. Firefox from version 4. Chrome from version 13. Safari from version 5.1. Opera from version 12. 声明严格模式 严格模式是通过添加"use strict";到脚本或函数的开头 在脚本开始时声明,它具有全局作用域(脚本中的所有代码将严格执行): "use strict"; x = 3.14; // This will cause an error because x is not declared 让我试试 "use strict"; myFunction(); function myFunction() { y = 3.14; // This will also cause an error because y is not declared } 让我试试 在函数中声明,它具有局部作用域(只有函数内的代码处于严格模式): x = 3.14; // This will not cause an error. myFunction(); function myFunction() { "use strict"; y = 3.14; // This will cause an error } 让我试试 "use strict"; 语法 语法,声明严格的模式,被设计成与旧版本的JavaScript兼容. 编写一个数字文字(4 + 5;)或一个字符串字面值("John Doe";)在JavaScript程序有没有副作用。它简单地编译为一个不存在变量。 因此 "use strict"; 只有对新的编译器“理解”它的意义. 为什么使用严格模式? 严格的模式,使得它更容易写“安全”的JavaScript. 严格的模式改变以前接受的“错误的语法”到真正的错误. 例如,在正常的JavaScript,输入变量名创建一个新的全局变量。在严格的模式下,这将抛出一个错误,使不可能意外地创建一个全局变量. 在正常的JavaScript,开发者将不会收到任何错误反馈不可写的属性分配值. 严格模式,任何分配给非可写属性,吸气剂的唯一财产,一个不存在的属性,一个不存在的变量,或一个不存在的对象,会抛出一个错误。. 允许在严格模式下 使用变量,不声明它,是不允许的: "use strict"; x = 3.14; // This will cause an error 让我试试 对象也是变量。 使用对象,而不声明它,是不允许的: "use strict"; x = {p1:10, p2:20}; // This will cause an error 让我试试 不允许删除变量(或对象). "use strict"; var x = 3.14; delete x; // This will cause an error 让我试试 不允许删除函数. "use strict"; function x(p1, p2) {}; delete x; // This will cause an error 让我试试 复制一个参数名是不允许的: "use strict"; function x(p1, p1) {}; // This will cause an error 让我试试 八进制数字字面值是不允许的: "use strict"; var x = 010; // This will cause an error 让我试试 不允许转义字符: "use strict"; var x = \010; // This will cause an error 让我试试 不允许写入只读属性: "use strict"; var obj = {}; Object.defineProperty(obj, "x", {value:0, writable:false}); obj.x = 3.14; // This will cause an error 让我试试 不允许写入只获取属性: "use strict"; var obj = {get x() {return 0} }; obj.x = 3.14; // This will cause an error 让我试试 删除一个不可删除的属性是不允许的: "use strict"; delete Object.prototype; // This will cause an error 让我试试 字符串"eval"不能作为变量使用: "use strict"; var eval = 3.14; // This will cause an error 让我试试 字符串"arguments"不能作为变量使用: "use strict"; var arguments = 3.14; // This will cause an error 让我试试 with语句不允许: "use strict"; with (Math){x = cos(2)}; // This will cause an error 让我试试 出于安全原因, eval() 不允许在其被调用的范围内创建变量: "use strict"; eval ("var x = 2"); alert (x); // This will cause an error 让我试试 在函数调用像f(),这个值是全局对象。在严格的模式下,它现在是未定义的. 未来的证明! 未来保留关键字不允许在严格模式下。这些有: implements interface let package private protected public static yield "use strict"; var public = 1500; // This will cause an error // This will cause an error 让我试试 看见了吧! "use strict" 指令仅在脚本或函数的开头被识别. JavaScript代码提升 JavaScript编码习惯