`

Javascript 严格模式use strict详解

阅读更多

http://www.cnblogs.com/jiqing9006/p/5091491.html

1.概述

除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

 

2.为什么用严格模式

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

 

3.进入标志

"use strict";

 

4.如何调用

4.1针对单个脚本

 <script>
    "use strict";
    console.log("这是严格模式。");
  </script>

4.2针对单个函数

复制代码
function strict(){
    "use strict";
    return "这是严格模式。";
  }
  function notStrict() {
    return "这是正常模式。";
  }
复制代码

 

5.语法与行为改变

严格模式对Javascript的语法和行为,都做了一些改变。

5.1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";
  v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
  }

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

 

5.2禁止this关键字指向全局对象

复制代码
function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
复制代码

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
  };
  f();// 报错,this未定义

 

5.3禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

复制代码
"use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功
复制代码

5.4对象不能有重名的属性

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

"use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误

5.5函数不能有重名的参数

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

 "use strict";
  function f(a, a, b) { // 语法错误
    return ;
  }


http://www.cnblogs.com/jiqing9006/p/5091491.html

1.概述

除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

 

2.为什么用严格模式

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

 

3.进入标志

"use strict";

 

4.如何调用

4.1针对单个脚本

 <script>
    "use strict";
    console.log("这是严格模式。");
  </script>

4.2针对单个函数

复制代码
function strict(){
    "use strict";
    return "这是严格模式。";
  }
  function notStrict() {
    return "这是正常模式。";
  }
复制代码

 

5.语法与行为改变

严格模式对Javascript的语法和行为,都做了一些改变。

5.1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";
  v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
  }

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

 

5.2禁止this关键字指向全局对象

复制代码
function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
复制代码

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
  };
  f();// 报错,this未定义

 

5.3禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

复制代码
"use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功
复制代码

5.4对象不能有重名的属性

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

"use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误

5.5函数不能有重名的参数

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

 "use strict";
  function f(a, a, b) { // 语法错误
    return ;
  }


http://www.cnblogs.com/jiqing9006/p/5091491.html

1.概述

除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

 

2.为什么用严格模式

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

 

3.进入标志

"use strict";

 

4.如何调用

4.1针对单个脚本

 <script>
    "use strict";
    console.log("这是严格模式。");
  </script>

4.2针对单个函数

复制代码
function strict(){
    "use strict";
    return "这是严格模式。";
  }
  function notStrict() {
    return "这是正常模式。";
  }
复制代码

 

5.语法与行为改变

严格模式对Javascript的语法和行为,都做了一些改变。

5.1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";
  v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
  }

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

 

5.2禁止this关键字指向全局对象

复制代码
function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
复制代码

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
  };
  f();// 报错,this未定义

 

5.3禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

复制代码
"use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功
复制代码

5.4对象不能有重名的属性

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

"use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误

5.5函数不能有重名的参数

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

 "use strict";
  function f(a, a, b) { // 语法错误
    return ;
  }

1.概述

除了正常运行模式,ECMAscript 5添加了第二种运行模式:"严格模式"(strict mode)。顾名思义,这种模式使得Javascript在更严格的条件下运行。

 

2.为什么用严格模式

- 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

- 消除代码运行的一些不安全之处,保证代码运行的安全;

- 提高编译器效率,增加运行速度;

- 为未来新版本的Javascript做好铺垫。

"严格模式"体现了Javascript更合理、更安全、更严谨的发展方向,包括IE 10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。

另一方面,同样的代码,在"严格模式"中,可能会有不一样的运行结果;一些在"正常模式"下可以运行的语句,在"严格模式"下将不能运行。掌握这些内容,有助于更细致深入地理解Javascript,让你变成一个更好的程序员。

 

3.进入标志

"use strict";

 

4.如何调用

4.1针对单个脚本

 <script>
    "use strict";
    console.log("这是严格模式。");
  </script>

4.2针对单个函数

复制代码
function strict(){
    "use strict";
    return "这是严格模式。";
  }
  function notStrict() {
    return "这是正常模式。";
  }
复制代码

 

5.语法与行为改变

严格模式对Javascript的语法和行为,都做了一些改变。

5.1 全局变量显式声明

在正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,全局变量必须显式声明。

"use strict";
  v = 1; // 报错,v未声明
  for(i = 0; i < 2; i++) { // 报错,i未声明
  }

因此,严格模式下,变量都必须先用var命令声明,然后再使用。

 

5.2禁止this关键字指向全局对象

复制代码
function f(){
    return !this;
  } 
  // 返回false,因为"this"指向全局对象,"!this"就是false
  function f(){ 
    "use strict";
    return !this;
  } 
  // 返回true,因为严格模式下,this的值为undefined,所以"!this"为true。
复制代码

因此,使用构造函数时,如果忘了加new,this不再指向全局对象,而是报错。

function f(){
    "use strict";
    this.a = 1;
  };
  f();// 报错,this未定义

 

5.3禁止删除变量

严格模式下无法删除变量。只有configurable设置为true的对象属性,才能被删除。

复制代码
"use strict";
  var x;
  delete x; // 语法错误
  var o = Object.create(null, {'x': {
      value: 1,
      configurable: true
  }});
  delete o.x; // 删除成功
复制代码

5.4对象不能有重名的属性

正常模式下,如果对象有多个重名属性,最后赋值的那个属性会覆盖前面的值。严格模式下,这属于语法错误。

"use strict";
  var o = {
    p: 1,
    p: 2
  }; // 语法错误

5.5函数不能有重名的参数

正常模式下,如果函数有多个重名的参数,可以用arguments[i]读取。严格模式下,这属于语法错误。

 "use strict";
  function f(a, a, b) { // 语法错误
    return ;
  }
分享到:
评论

相关推荐

    Javascript 严格模式详解

    ### JavaScript 严格模式详解 #### 引言 在JavaScript中,**严格模式**(strict mode)是ECMAScript 5引入的一种新特性,旨在改善语言的一些不足,提高代码质量和安全性,以及为未来的JavaScript版本铺平道路。...

    深入JavaScript严格模式:最佳实践与应用指南

    启用严格模式非常简单,只需在脚本或函数的开始处添加`"use strict";`指令即可。 ##### 3.1 全局范围内启用 在脚本的顶部添加`"use strict";`,可以使整个脚本文件在严格模式下运行。 ```javascript "use strict";...

    JavaScript严格模式详解

    JavaScript的严格模式(strict mode)是对JavaScript编程的一种增强模式,旨在消除语言中的一些不安全、不合理和不严谨的特性,从而提升代码质量和安全性。在严格模式下,如果开发者违反了某些特定规则,JavaScript...

    javascript严格模式详解(含严格模式与非严格模式的区别)

    JavaScript中的“严格模式”(Strict Mode)是一种特殊的执行模式,它在代码的开头通过`'use strict';`声明,旨在使代码更加规范和安全。严格模式不仅有助于提高代码质量,还可以帮助开发者避免一些常见的错误。以下...

    JavaScript严格模式下关于this的几种指向详解

    相信不少人在学习或者使用Javascript的时候,都曾经被 JavaScript 中的 this 弄晕了,那么本文就来整理总结一下在严格模式下 this 的几种指向。 一、全局作用域中的this 在严格模式下,在全局作用域中,this指向...

    跟我学习javascript的严格模式

    要让JavaScript代码以严格模式运行,必须在脚本或函数的开始处加上"strict mode"指令:"use strict";。该指令可以单独放在脚本文件的第一行或者函数体的第一行。 ### 三、严格模式的调用方法 严格模式有两种调用...

    详解JavaScript的BUG和错误

    严格模式的开启非常简单,只需要在函数体或文件的顶部添加字符串"use strict"即可。这样,JavaScript引擎就知道接下来的代码需要按照严格模式来执行。例如,如果在严格模式下忘记用let或const声明一个变量,会立即抛...

    JavaScript面试题集锦

    "use strict"是ECMAScript 5添加的一种严格模式,使得JavaScript在更严格的条件下运行,消除JavaScript语法的一些不合理、不严谨之处,减少一些怪异行为。使用use strict模式可以使JS编码更加规范化,消除一些糟糕的...

    JavaScript 规范

    在JavaScript代码中启用严格模式非常简单,只需要在代码顶部添加`'use strict';`即可。 **不推荐的写法**: ```javascript // 脚本开始 'use strict'; (function () { // 你的代码从这里开始 }); ``` **推荐的...

    详解Javascript 中的this指针

    然而,在严格模式下(`'use strict';`),独立调用的函数中的`this`将被设置为`undefined`。 #### 示例分析 考虑以下示例: ```javascript var name = "KevinYang"; function sayHi() { alert("你好,我的名字叫...

    JavaScript中this指向.docx

    - **严格模式(Strict Mode)**: 使用`"use strict";`声明严格模式后,全局作用域中的`this`将被设为`undefined`。 **2. 函数调用中的`this`** - **普通函数调用**: 如果一个函数被简单地调用(即不作为对象方法...

    JavaScript this绑定过程深入详解

    但在严格模式下(`"use strict"`),`this`不会绑定到全局对象,而是被设置为`undefined`。例如: ```javascript function foo() { console.log(this.a); } var a = 2; foo(); // 非严格模式下输出2,严格模式...

    万恶的前端内存泄漏及万善的解决方案详解.docx

    * 使用严格模式,在 JavaScript 文件头部或者函数的顶部加上 "use strict" 二、闭包引起的内存泄漏 闭包可以读取函数内部的变量,然后让这些变量始终保存在内存中。如果在使用结束后没有将局部变量清除,就可能...

Global site tag (gtag.js) - Google Analytics