文章详情

短信预约-IT技能 免费直播动态提醒

请输入下面的图形验证码

提交验证

短信预约提醒成功

JavaScript严格模式usestrict的介绍

2024-04-02 19:55

关注

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)
}

fun(1, 2, 3)


5.2arguments的不同

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

具体不同如下所示:

示例代码如下所示:


'use strict'

function fun(v) {
  v = '100'
  console.log(v)
  console.log(arguments[0])
}

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内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

阅读原文内容投诉

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

软考中级精品资料免费领

  • 历年真题答案解析
  • 备考技巧名师总结
  • 高频考点精准押题
  • 2024年上半年信息系统项目管理师第二批次真题及答案解析(完整版)

    难度     813人已做
    查看
  • 【考后总结】2024年5月26日信息系统项目管理师第2批次考情分析

    难度     354人已做
    查看
  • 【考后总结】2024年5月25日信息系统项目管理师第1批次考情分析

    难度     318人已做
    查看
  • 2024年上半年软考高项第一、二批次真题考点汇总(完整版)

    难度     435人已做
    查看
  • 2024年上半年系统架构设计师考试综合知识真题

    难度     224人已做
    查看

相关文章

发现更多好内容

猜你喜欢

AI推送时光机
位置:首页-资讯-前端开发
咦!没有更多了?去看看其它编程学习网 内容吧
首页课程
资料下载
问答资讯