ECMAScript 5 严格模式

1. 变量必须使用var声明,杜绝不小心将本地变量声明成一个全局变量

  在常规模式下,如果我们声明一个变量时省略了var关键字,解析引擎会自动将其声明为全局变量,但在严格模式下,会直接抛出异常,不会为我们转为全局变量:  

message = ‘hello world‘;

var color = ‘red‘;
delete color;

2. 禁止函数参数重名

3. 禁止对象属性重名

‘use strict‘;
//it should throw a SyntaxError in ES5 strict mode
var person = {
  name: ‘Scott‘
  name: ‘John‘
};
console.log(person.name);

4.禁止使用八进制数字

以0开头的八进制数字常常会让开发者迷惑,严格模式禁止以0开头的八机制表示法,另外,ES6已经支持新的语法标准,八进制以0o来表示,这样一来就与16进制的0x形成统一的语法格式:

‘use strict‘;
var a = 017;  //Uncaught SyntaxError: ...

var b = 0o17; //ES6 Octal syntax: 8 + 7 = 15

5. 强制为eval创建新作用域

常规模式下,使用eval函数可能会影响当前作用域或全局作用域,给程序的运行结果带来不确定性,严格模式为JavaScript程序创建了第三种作用域:eval作用域。eval函数中的字符串只能在eval作用域内运行,其结果不会影响外层作用域,下面这两种形式都可以使eval在严格模式下运行:

‘use strict‘;
eval("var a = 1;");
console.log(a); //Uncaught ReferenceError: a is not defined

//or

eval("‘use strict‘; var b = 3;");
console.log(b); //Uncaught ReferenceError: b is not defined

6. 禁止对eval和arguments做非法操作

以下几种使用方式都会抛出语法错误:

使用var声明;

赋予另一个值:

尝试修改包含的值,如使用++;

用作函数名;

用作命名的函数参数;

7.禁止使用arguments.callee

8.禁止this指向全局

9. 函数必须声明在整个脚本或函数层面

‘use strict‘;
if (true) {
  function doSomething() {
    console.log(‘1‘);
  }
} else {
  function doSomething() {
    console.log(‘2‘);
  }
}

for (var i = 0; i < 5; i++) {
  function doSomething() {
    console.log(‘3‘);
  }
}

doSomething();  //Uncaught ReferenceError: doSomething is not defined
时间: 2024-09-14 13:33:43

ECMAScript 5 严格模式的相关文章

前端开发规范总结 总结前端开发模式和规范

1.前端开发规范 WEB客户端开发自成体系, 主要用于智能终端(iPhone.Android手机.iPad.Android Pad)和传统PC的开发.JS规范.HTML规范和CSS规范对客户端开发进行全方位指导,统一编码规范.提高可读性.降低维护成本. 1.1一般规范 应用在 HTML, JavaScript 和 CSS上的通用规则. 1.1.1文件/资源命名 1)     以可读性而言,减号(-)用来分隔文件名: 2)     使用驼峰方式命名文件名与文件所在的文件夹,便于统一配置: 3)  

浅谈ECMAScript

JS的三大组成部分 BOM DOM  ECMAScript ES5 严格模式 在全局作用域前加一个 "use strict" 严格模式带来了那些好处: 1.增加了更多的报错的场合 使代码编译更加规范 2.为未来的新版本做好了铺垫 3.提高编译器效率,增加运行速度. 体现: 1.声明变量必须用var 2.不允许删除变量 3.this的指向在全局中指向window,不然则是 undefined 4.不能自调用 ES5新增的常见方法 数组中: indexOf  输入val 判断第一个出现字符

【前端小小白的学习之路】JavaScript常用代码书写规范

javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 var x = 10, y = 100; console.log(window.x + ' ' + window.y); 推荐 ;(function(window){ 'use strict'; var x = 10, y = 100; console.log(window.x + ' ' + window.y);

javascript代码规范 [转]

原文:http://www.css88.com/archives/5366 全局命名空间污染与 IIFE 总是将代码包裹成一个 IIFE(Immediately-Invoked Function Expression),用以创建独立隔绝的定义域.这一举措可防止全局命名空间被污染. IIFE 还可确保你的代码不会轻易被其它全局命名空间里的代码所修改(i.e. 第三方库,window 引用,被覆盖的未定义的关键字等等). 不推荐 1 var x = 10, 2 y = 100; 3 4 // Dec

学习JavaScript之全局变量和隐式全局变量

隐式全局变量和明确定义的全局变量间有些小的差异,就是通过delete操作符让变量未定义的能力. 通过var创建的全局变量(任何函数之外的程序中创建)是不能被删除的. 无var创建的隐式全局变量(无视是否在函数中创建)是能被删除的. 这表明,在技术上,隐式全局变量并不是真正的全局变量,但它们是全局对象的属性.属性是可以通过delete操作符删除的,而变量是不能的: // 定义三个全局变量 var global_var = 1; global_novar = 2; // 反面教材 (function

深入理解JavaScript系列(1):编写高质量JavaScript代码的基本要点(转)

才华横溢的Stoyan Stefanov,在他写的由O’Reilly初版的新书<JavaScript Patterns>(JavaScript模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量JavaScript的一些要素,例如避免全局变量,使用单变量声明,在循环中预缓存length(长度),遵循代码阅读,以及更多. 此摘要也包括一些与代码不太相关的习惯,但对整体代码的创建息息相关,包括撰写API文档.执行同行评审以及运行JSLint.这些习惯和最佳做法可以

深入理解 JavaScript(一)

编写高质量 JavaScript 代码的基本要点 转载:http://wiki.jikexueyuan.com/project/javascript-depth-understanding/start-javascript.html 才华横溢的 Stoyan Stefanov,在他写的由 O’Reilly 初版的新书<JavaScript Patterns>(JavaScript 模式)中,我想要是为我们的读者贡献其摘要,那会是件很美妙的事情.具体一点就是编写高质量 JavaScript 的一

JavaScript权威指南 - 函数

函数本身就是一段JavaScript代码,定义一次但可能被调用任意次.如果函数挂载在一个对象上,作为对象的一个属性,通常这种函数被称作对象的方法.用于初始化一个新创建的对象的函数被称作构造函数. 相对于其他面向对象语言,在JavaScript中的函数是特殊的,函数即是对象.JavaScript可以把函数赋值给变量,或者作为参数传递给其他函数,甚至可以给它们设置属性等. JavaScript的函数可以嵌套在其他函数中定义,这样定义的函数就可以访问它们外层函数中的任何变量.这也就是所谓的"闭包&qu

《JavaScript 代码优化指南》

  ~~教你向老鸟一样敲代码~~. 1. 将脚本放在页面的底部 ... <script src="./jquery.min.js"></script> <script src="./index.js"></script> </body> </html> 2. 变量声明合并 将多条var语句合并为一条语句,我建议将未赋值的变量放在最后面. 并且为了代码的美观,还可以将等号对齐. //糟糕 var