JavaScript严格模式use strict的介绍

目录
  • 1.概述
    • 1.1严格模式是什么
    • 1.2严格模式的目的
  • 2.开启严格模式
    • 2.1全局开启严格模式
    • 2.2局部开启严格模式
  • 3.严格模式中的变量
    • 3.1禁止意外创建变量
    • 3.2静默失败转为异常
    • 3.3禁用delete关键字
    • 3.4对变量名的限制
  • 4.严格模式中的对象
    • 4.1不可删除的属性
    • 4.2只读属性的赋值
    • 4.3不可扩展的对象
  • 5.严格模式中的函数
    • 5.1参数名必须唯一
    • 5.2arguments的不同
    • 5.3arguments.callee属性
    • 5.4函数声明的限制
  • 6.增加eval()作用域
  • 7.抑制this

1.概述

1.1严格模式是什么

严格模式是JavaScript中的一种限制性更强的变种方式。严格模式并不是JavaScript中的子集,它在语义上与正常的代码有明显的差异。

虽然说现在大部分浏览器都已经支持严格模式,但是还是有部分老版本的浏览器不支持严格模式,所以不要在未经严格模式特性测试情况下使用严格模式。

JavaScript中的严格模式与非严格模式可以共存,所以在脚本中可以选择性的加入严格模式。

1.2严格模式的目的

使用严格模式的目的如下所示:

首先,严格模式会将JavaScript陷阱直接变成明显的错误。
其次,严格模式修正了一些引擎难以优化的错误:同样的代码有些时候严格模式会比非严格模式下更快。
严格模式禁用了一些可能在未来版本定义的语法。

2.开启严格模式

JavaScript中开启严格模式分为两种,分别是全局开启严格模式和局部开启严格模式。

2.1全局开启严格模式

开启全局严格模式只需要在所有的代码前面输入一段字符串,字符串如下:

"use strict";//或者'use strict';

需要注意的是,如果之前的JavaScript代码是非严格模式的话,建立是不要为这段代码开启严格模式,这样可能会出现问题。建议先从局部开启严格模式,一步一步的调整代码。

2.2局部开启严格模式

局部开启严格模式可以在某个指定的函数中的第一行加入"use strict";这段字符串,这个函数体外还是非严格模式。

开启严格模式的实例代码如下所示:

//全局开启严格模式
//"use strict"
v = 100
console.log(v)

function fun() {
  //局部开启严格模式
  'use strict'
  vv = 200
  console.log(vv)
}
// fun() 抛出异常 vv is not defined

3.严格模式中的变量

3.1禁止意外创建变量

所谓的意外创建变量就是指不使用var关键字声明的变量。当在严格模式下,如果意外创建全局变量,将会抛出异常,

示例代码如下所示:

'use strict'
//在非严格模式下,这样创建变量将不会报错,但是在严格模式下这样创建变量将会抛出异常
v = 100
console.log(v)

3.2静默失败转为异常

所谓静默失败就是既不报错也没有任何效果,在严格模式下将会转为异常。

3.3禁用delete关键字

在非严格模式下,对全局变量使用delete关键字将会出现静默失败,而在严格模式下,将会抛出异常,示例代码如下所示

'use strict'
var v = 100
delete v // SyntaxError:Deleteofanunqualifiedidentifierinstrictmode.
console.log(v)

3.4对变量名的限制

在严格模式下,JavaScript对变量名也有限制,特别是不能使用保留字作为变量名,使用保留字作为符作为变量名会导致语法错误。

4.严格模式中的对象

4.1不可删除的属性

在非严格模式下,对不可删除的属性使用delete关键字将会出现静默失败,而在严格模式下,将会抛出异常。

示例代码如下所示:

"use strict"
delete Object.prototype;//抛出异常

4.2只读属性的赋值

在非严格模式下,对一个只读的属性进行赋值操将会静默失败,但是在严格模式下将会抛出异常,示例代码如下:

'use strict'

var obj = {}
Object.defineProperty(obj, 'name', {
  value: '一碗粥',
})
obj.name = '一碗周' //抛出异常

4.3不可扩展的对象

在非严格模式下,为不可扩展的对象添加新的属性将会静默失败,而在严格模式下将会抛出异常。

示例代码如下所示:

//开启全局严格模式
'use strict'
var obj = {}
//将悐变成不可扩展的
Object.preventExtensions(obj)
//为对象扩展属性
obj.name = '一碗周' // 抛出异常

5.严格模式中的函数

5.1参数名必须唯一

在非严格模式下,函数的形参可以重复,但是在严格模式中,如果函数的形参重复将会抛出异常,示例代码如下所示:

'use strict'

function fun(a, a, b) {
  console.log(a + a + b)
}
/*
 *非严格模式下结果为7=2+2+3
 *严格模式下将会抛出异常
 */
fun(1, 2, 3)

5.2arguments的不同

在严格模式和非严格模式中,arguments对象的行为是不同的

具体不同如下所示:

  • 在非严格模式下,修改实参的值会也会反映到arguments对象中。
  • 在严格模式下,命名参数与‘arguments'对象是完全独立的。

示例代码如下所示:

'use strict'

function fun(v) {
  v = '100'
  console.log(v)
  console.log(arguments[0])
}
/*
 *在非严格模式中打印的结果为100,100
 *在严格模式中打印的结果为100,200
 */
fun(200)

5.3arguments.callee属性

在非严格模式中的可以使用arguments.callee属性,结果为当前函数名称,而在严格模式中,使用此属性将会抛出异常。

示例代码如下:

'usestrict'

functionfun(){
console.log(arguments.callee);
}
fun()//抛出异常

5.4函数声明的限制

在严格模式下,只能在全局作用域和局部作用域中声明函数,除这两种作用域外声明函数语法是错误的(例如if语句块)。

示例代码如下所示:

'use strict'

function fun() {
  console.log(arguments.callee)
}
fun() //抛出异常

6.增加eval()作用域

在严格模式下,使用eval()函数创建的变量只能在函数内部使用。

在外部使用将会抛出异常,示例代码如下:

'use strict'
eval('var v=100')
console.log(v) //抛出异常

7.抑制this

在非严格模式下使用Fucntionapply()或者call()方法时,null或者undefined值会被转换为全局对象。而严格模式下,函数的this值始终是指定的值。

示例代码如下所示:

//开启严格模式
'use strict'

var v = 100

function fn() {
  console.log(this.v)
}

var obj = {
  v: 200,
}

fn.call(obj) //this指向全局对象

结语:

本篇文章基本将严格模式的所有情况大致都有所介绍,解决日常开发中关于严格模式的问题足以应对。

到此这篇关于JavaScript严格模式use strict的介绍的文章就介绍到这了,更多相关JavaScript严格模式use strict内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • JavaScript 严格模式(use strict)用法实例分析

    本文实例讲述了JavaScript 严格模式(use strict)用法.分享给大家供大家参考,具体如下: 使用"use strict" 的目的是指定代码在严格条件下执行. 严格模式通过在脚本或函数的头部添加 "use strict"; 表达式来声明. 不允许使用未声明的变量. "use strict"; myFunction(); function myFunction() { y = 3.14; // 报错 (y 未定义) } 在函数内部声明

  • Javascript 严格模式use strict详解

    严格模式:由ECMA-262规范定义的JavaScript标准,对javascrip的限制更强. (非严格的模式,被称为"马虎模式/稀松模式/懒散模式".) 一.严格模式的使用 严格模式可以在脚本或函数级别实现.(即全局和局部模式) 1.全局 在js文件的最前面添加    "use strict" 2.局部 在函数内部添加   "use strict",如下 function fn() { "use strict"; //so

  • JavaScript严格模式use strict的介绍

    目录 1.概述 1.1严格模式是什么 1.2严格模式的目的 2.开启严格模式 2.1全局开启严格模式 2.2局部开启严格模式 3.严格模式中的变量 3.1禁止意外创建变量 3.2静默失败转为异常 3.3禁用delete关键字 3.4对变量名的限制 4.严格模式中的对象 4.1不可删除的属性 4.2只读属性的赋值 4.3不可扩展的对象 5.严格模式中的函数 5.1参数名必须唯一 5.2arguments的不同 5.3arguments.callee属性 5.4函数声明的限制 6.增加eval()作

  • JavaScript的strict模式与with关键字介绍

    2009年12月,ECMAScript发布了ECMAScript 5,这距离上一个版本的ECMAScript 3标准发布已经整整十年了,其间JavaScript虽然大行于web编程,ECMAScript 4却最终因为利益相关的各大厂商和组织在此语言的复杂性(即是否增加大量特性以扩展ECMAScript的功能)上的分歧而夭折,使得ECMAScript新标准的制订大大落后于编程的实践.ECMAScript 5在目标上没有那么雄心勃勃,除去新增了对JSON的支持和反射的更全面的控制,一项重要改进就是引

  • 深入理解javascript严格模式(Strict Mode)

    ECMAScript5中引入的严格模式,通过让JavaScript运行环境对一些开发过程中最常见和不易发现的错误做出和当前不同的处理,来让开发者拥有一个"更好"的JavaScript语言.很长一段时间内,由于只有Firefox支持严格模式,我曾对严格模式表示怀疑.但到了今天,所有主流的浏览器都在他们的最新版本中支持了严格模式(包括IE10,Opera12和Android4,IOS5)是时候开始使用严格模式了. 严格模式能起到什么作用? 严格模式为JavaScript引入了很多变化,我把

  • ECMAScript 5严格模式(Strict Mode)介绍

    严格模式(Strict Mode)是ECMAScript 5的新特性,它允许你把整个程序,或者某个函数,放置在"严格"的操作语境中.这种严格的语境会防止某些特定的操作并抛出更多的异常. 虽然ECMAScript 5对ECMAScript 3是向下兼容的,但是在严格模式下,所有在ECMAScript 3中不赞成使用的特性都被禁用(或抛出错误)而不是兼容. 启用严格模式有以下好处: 1.捕获一些编程错误,并抛出异常. 2.阻止进行一些相对"不安全"的操作(例如访问全局变

  • JavaScript调用模式与this关键字绑定的关系

    Invocation 调用 调用一个函数将暂停当前函数的执行,传递控制权和参数给新函数. 实参与形参不一致不会导致运行时错误,多的被忽略,少的补为undefined 每个方法都会收到两个附加参数:this和arguments.this的值取决于调用的模式,调用模式:方法,函数,构造器和apply调用模式 this被赋值发生在被调用的时刻.不同的调用模式可以用call方法实现 var myObject = { value: 0, increment: function (inc) { this.v

  • JavaScript模块模式实例详解

    本文实例讲述了JavaScript模块模式.分享给大家供大家参考,具体如下: 在JS中没有Class的概念,那么如何体现Object的Public和Private属性呢,答案就是模块模式(Module Pattern). JS中有一个显著的特性: 匿名函数(anonymous function),通过匿名函数的建立和执行,匿名函数里的代码就形成了一个闭包(closure),从而形成,封装和控制一个对象的Private和Public的特性,避免了全局变量的泛滥和与其他脚本的冲突. (functio

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

    前言 相信不少人在学习或者使用Javascript的时候,都曾经被 JavaScript 中的 this 弄晕了,那么本文就来整理总结一下在严格模式下 this 的几种指向. 一.全局作用域中的this 在严格模式下,在全局作用域中,this指向window对象 "use strict"; console.log("严格模式"); console.log("在全局作用域中的this"); console.log("this.docume

  • JavaScript组合模式学习要点

    组合模式:将一组对象组合成树形结构,并统一对待组合对象和叶对象,忽略它们之间的不同(因为叶对象也可以也可以包含叶对象而成为组合对象),组合模式中的对象只能是一对多的关系,不能出现多对一. 基本单元:一个组合对象包含多个叶对象.每个基本单元又可以是别的组合对象的叶对象类似文件夹与它里面的内容的关系网,一个文件夹或文件又可以是其它文件夹的内容,但一个文件夹或文件不能同时属于多个上级文件夹. 在JavaScript中实现组合模式时,要保证组合对象和叶对象拥有相同的接口方法,对同一组叶对象的操作必须具有

随机推荐