首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

js中use strict

"use strict" 是 JavaScript 中的一个指令,用于启用严格模式。严格模式可以帮助开发者发现一些常见的编码错误,并且使 JavaScript 引擎以更严格的规则来执行代码,从而提高代码的安全性和性能。

基础概念

在 JavaScript 文件或函数的开头添加 "use strict" 可以使该文件或函数进入严格模式。严格模式下,JavaScript 引擎会对一些容易引发错误的语法和行为抛出异常。

优势

  1. 消除 JavaScript 语法的一些不合理、不严谨之处,减少一些怪异行为。
  2. 增加更多错误检查,提高代码安全性。
  3. 禁止使用预留的关键字作为变量名
  4. 使 this 的值为 undefined,在全局作用域下和函数内部不使用 new 调用时
  5. 使 eval() 函数的行为更接近于其他语言的 eval()
  6. 为未来的 JavaScript 版本铺平道路

类型

严格模式可以应用在全局作用域或函数作用域。

应用场景

  • 当你需要编写更加健壮和可靠的代码时。
  • 在大型项目中,有助于团队成员遵循一致的编码规范。
  • 在开发过程中,便于及时发现潜在的问题。

示例代码

代码语言:txt
复制
"use strict";

// 变量必须声明后再使用
var x = 10;
// y = 20; // 报错:ReferenceError: y is not defined

// 禁止删除变量、函数和函数参数
var a = 1;
delete a; // 报错:SyntaxError: Delete of an unqualified identifier in strict mode.

function foo(arg) {
  delete arg; // 报错:SyntaxError: Delete of an unqualified identifier in strict mode.
}

// 禁止使用八进制数字
var b = 0123; // 报错:SyntaxError: Octal literals are not allowed in strict mode.

// this 在全局作用域下和普通函数中为 undefined
function test() {
  console.log(this); // undefined
}
test();

// 禁止使用保留字作为变量名
var let = 10; // 报错:SyntaxError: Unexpected strict mode reserved word

遇到问题及解决方法

如果在启用严格模式后遇到错误,通常是因为代码中存在不符合严格模式规则的部分。解决方法是根据错误提示进行修改。

例如,如果出现 ReferenceError: y is not defined 错误,说明在使用变量 y 之前没有声明它。需要在前面加上 var y 进行声明。

如果出现 SyntaxError: Delete of an unqualified identifier in strict mode. 错误,说明尝试删除不允许删除的标识符。需要检查代码中是否有这样的删除操作,并进行修改或删除。

总之,严格模式是一种有助于提高代码质量和可维护性的工具,但也需要开发者熟悉其规则并进行相应的调整。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

【JS ES6】use strict 严格模式

往期文章 【JS ES6】const var let 一文搞懂声明关键字所有的知识点 [JS ES6]传值和传址 ---- 目录 什么是严格模式 启用严格模式 严格模式中的变化 ---- 由于 JavaScript...启用严格模式 要启用严格模式,您只需要在 JavaScript 脚本的开头添加"use strict";或'use strict';指令即可,如下所示: 中添加"use strict";,则表示只在该函数中启用严格模式。如下例所示: strict";或'use strict';指令只有在整个脚本第一行或者函数第一行时才能被识别,除了 IE9 以及更低的版本外,所有的浏览器都支持该指令。.../ 此处报错:Uncaught SyntaxError: Delete of an unqualified identifier in strict mode. 3、函数中不允许有同名的参数 在严格模式下

1.8K40

严格模式use strict

使用:"use strict" 可以在整个js开头声明,也可以在函数里面声明: "use strict"; 或者: function fn() { "use...禁止了八进制表示法 ECMAScript 6中的严格模式禁止设置primitive值的属性.不采用严格模式,设置属性将会简单忽略(no-op),采用严格模式,将抛出TypeError错误。...严格模式简化了代码中变量名字映射到变量定义的方式,JavaScript有些情况会使得代码中名字到变量定义的基本映射只在运行时才产生....var a = 10; delete a;//报错 严格模式下更容易写出“安全”的JavaScript 禁止this执行全局对象: function fn() { "use strict";...console.log(this);} fn()//undefinednew fn()指向window 禁止函数内部遍历调用栈: function fn() { "use strict";

95920
  • 重学JS-1.1-知识点:严格模式“use strict”

    "use strict"出现的原因 ES旧标准中,存在不完善的特性,ES5规范对这些不完善的特性进行了修改。 但是为了兼容老版本浏览器,这些不完善的特性还是默认可以使用。...为了使用新特性,避开老版本中这些不完善的特性,我们可以开启严格模式“use strict”。 简单来说,严格模式的作用就是: 消除ES旧标准中不合理的特性。 保证代码的安全和准确。...利于JS引擎执行优化,提升运行速度。 "use strict"如何开启 要开启严格模式,我们可以把"use strict"放在文件顶部或者函数顶部。...具体的说明参考严格模式 MDN,进一步理解,可以看JS 中的严格模式【 经典前端面试题 】这个视频,下面的例子将再进一步方便大家理解。...strict" 现代模式 JS 中的严格模式【 经典前端面试题 】

    93720

    js的严格模式(strict mode)

    JavaScript 严格模式(strict mode)即在严格的条件下运行。 "use strict" 指令只允许出现在脚本或函数的开头。...为脚本开启严格模式 为整个脚本文件开启严格模式,需要在所有语句之前放一个特定语句 "use strict"; (或 'use strict';) // 整个脚本都开启严格模式的语法 "use strict...; 为函数开启严格模式 同样的,要给某个函数开启严格模式,得把 "use strict"; (或 'use strict'; )声明一字不漏地放在函数体所有语句之前。...function strict() { // 函数级别严格模式语法 'use strict'; function nested() { return "And so am I!"..." + nested(); } 非严格模式到严格模式的区别 语法错误 如果代码中使用"use strict"开启了严格模式,则下面的情况都会在脚本运行之前抛出SyntaxError异常: 八进制语法:

    81930

    javascript中的Strict模式

    "; } 如果使用的是ES6中引入的modules,那么modules中默认就已经是strict模式了,我们不需要再额外的使用”use strict”: function myModule() {...强制抛出异常 在js中,有很多情况下本来可能是错误的操作,但是因为语言特性的原因,并没有抛出异常,从而导致最终运行结果并不是所期待的。 如果使用strict模式,则会直接抛出异常。...如果加入use strict,eval中的变量将不会被加入到现有的Scope范围中,我们将会得到结果17. var x = 17; var evalX = eval("'use strict'; var...syntax error~~ 简化arguments 在js中,arguments代表的是参数数组,首先在Strict模式下,arguments是不能作为变量名被赋值的: 'use strict'; arguments...本文作者:flydean程序那些事 本文链接:http://www.flydean.com/js-use-strict/ 本文来源:flydean的博客 欢迎关注我的公众号:「程序那些事」最通俗的解读,

    91430

    javascript中的Strict模式

    "; } 如果使用的是ES6中引入的modules,那么modules中默认就已经是strict模式了,我们不需要再额外的使用”use strict”: function myModule() {...强制抛出异常 在js中,有很多情况下本来可能是错误的操作,但是因为语言特性的原因,并没有抛出异常,从而导致最终运行结果并不是所期待的。 如果使用strict模式,则会直接抛出异常。...如果加入use strict,eval中的变量将不会被加入到现有的Scope范围中,我们将会得到结果17. var x = 17; var evalX = eval("'use strict'; var...syntax error~~ 简化arguments 在js中,arguments代表的是参数数组,首先在Strict模式下,arguments是不能作为变量名被赋值的: 'use strict'; arguments...JS的后续发展和现有编程模式的规范都起到了非常重要的作用。

    86830

    Firefox内容安全策略中的“Strict-Dynamic”限制

    概述在本文中,我们将重点分析如何绕过Firefox内容安全策略中的“Strict-Dynamic”限制。...接下来,我们来看看这个列表中借助require.js实现Strict-Dynamic绕过的方法。...假设目标页面使用了Strict-Dynamic的内容安全策略,并且加载require.js,同时具有简单的XSS漏洞。...这样一来,就可以借助某些已经加载的JavaScript代码行为,在某种情况下绕过内容安全策略的Strict-Dynamic。而在Firefox中的漏洞,正是由于require.js的这种情况引起的。...在该目录中,有一个用于绕过内容安全策略的require.js。只需要将该require.js加载到使用内容安全策略Strict-Dynamic的页面中,即可实现Strict-Dynamic的绕过。

    2.1K52

    node中Express的use深入理解

    可以认为,在express内部,有一个函数的数组,暂时叫这个数组tasks,每来一个请求express内部会依次执行这个数组中的函数(这里说依次并不严谨,每个函数必须满足一定条件才行,这个后面说),应该可以想到...后面我们会写一些试验来体验一下这个next,先总结一下: 对于一个典型的使用express的app.js(这个满大街都是代码,就不贴了),做了以下几件事 1.导入相关模块 2.执行过 var app =...向express中注册自定义函数 注册进express中的函数,需要满足(请见下面更正) 1.长成下面这个样子 function(req,res,next){ //...我们自己的逻辑 next...启动服务后,每来一个请求,控制台会依次输出haha hehe,然后浏览器是there is nothing happened 当然如果要更深一步,可以去看原代码,实际上这一部分的主要代码是在connect中的...,在connect/lib/proto.js 这个源文件中,主要是app.use,和app.handle 两个函数中 更正: 上面说,自定义的函数应该满足两个条件,一般使用是那样。

    1.1K40

    use关键字在PHP中的几种用法

    use关键字在PHP中的几种用法 在学习了和使用了这么多年的PHP之后,您知道use这个关键字在PHP中都有哪些用法吗?今天我们就来看一下它的三种常见用法。 1....用于命名空间的别名引用 // 命名空间 include 'namespace/file1.php'; use FILE1\objectA; use FILE1\objectA as objectB;...trait特性还是非常方便的一种类功能扩展模式,其实我们可以看作是将这个use放在了类中就成为了trait的引用定义了。 3....'use' (T_USE), expecting '{' function test($fn) { global $b; echo 'test:', $a, '---', $b, PHP_EOL...; }); // 1------3 这个就有点意思了吧,方法中要调用外部的变量是需要global的,在这里我们直接通过use()也是可以将变量传递过去的。

    1K40

    js中find的用法_js中find函数

    今天我们要说的是结合ES6新特性谈一下js里面的一个很好用的方法-find() 现在的前端和过去的不一样,过去的前端只要会画页面就行了,但是现在仅仅会画页面已经远远不够了,现在前端还需要会处理数据,而且还要会将数据分析分类处理...下面我们讲怎么用前端处理这块的逻辑 首先我们拿到了所有的数据这里我直接放到一个测试用的js里面存放, 要实现之前说的效果,就需要使用我们今天的主角find()方法。 find()是用来做什么的呢?...find()方法返回数组中符合测试函数条件的第一个元素。否则返回undefined 在本文章需要注意的几个点: ①、第一个元素 ②、测试函数 那么如何使用呢?.../find_testcodes.js" type="text/javascript" charset="utf-8"> js/jquery-1.11.2....min.js" type="text/javascript" charset="utf-8">

    11.7K30

    express框架中app.use和app.all的区别

    在使用express框架时,在app.js中经常会发现app.use和app.all的身影,下面我们来看一下这两者期间有什么共同点和不同点。...先来看一段代码示例: const express = require('express'); const app = express(); app.use('/a',function(req,res,...app.use app.use一般情况下主要应用于中间件,use('/a') 只用路径以 /a 开始即可匹配,如果有路径 /a/b 、 /a/b/c ,都会经过该函数处理,也就是说都会输出111,相当于自带匹配效果...app.use前面的路径是可以省略的,如果省略的话则代表匹配所有路径,所以一般应用于中间件的处理,比如说网站启用GZip压缩: const compression = require('compression...") app.use("/hehe",session({ name: 'sessionID',//存储在用户cookie中的key名 secret: 'secret', // 用来对session

    1.9K20
    领券