技术标签: use strict JavaScript Node js javascript 严格模式
消除js语法的一些不合理、不严谨之处,减少一些怪异行为;
1).消除代码运行的一下不安全之处,保证代码运行的安全;
2).提高编译器效率,增加运行速度;
3)为未来新版本的js做好铺垫。
“严格模式”提现了js更合理、更安全、更严谨的发展方向,包括IE10在内的主流浏览器,都已经支持它,许多大项目已经开始全面拥抱它。
另一方面,同样的代码,在“严禁模式”中,可能会有不一样的运行结果;一些在“正常模式”下可以运行的语句,在“严禁模式”下将不能运行。掌握这些内容,有助于更细致深入地理解js,让你成为更好的程序员。
严格模式其指令出现的位置
<script></script>
中的第一行;(表示该篇js都处于严格模式下)<script>
"use strict"
// 以下的所有代码都处于严格模式
</script>
<script>
function foo(){
"use strict"
//该方法下的代码处于严格模式
}
</script>
严格模式下,不能使用未声明的变量
<script>
// 严格模式
"use strict"
x=123; //报错( Uncaught ReferenceError: x is not defined)
</script>
<script>
// 非严格模式
x=123;
console.log(x) //输出:123
</script>
<script>
// 严格及非严格模式
x=123;
console.log(x) //输出:123
foo(); //Uncaught ReferenceError: y is not defined
function foo(){
"use strict"
y=234; //报错,y未定义
}
</script>
严格模式下,不允许删除 变量或对象 (强调:只有configurable设置为true的对象属性,才能被删除。)
<script>
"use strict";
var x = 123;
delete x; // Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
</script>
<script>
"use strict";
var x;
// 第一种:
delete x; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
//第二种:
var o = Object.create(null, {
'x':{
value:1234,
configurable:true
}
});
console.log(o.x) //输出:1234
delete o.x; //删除成功
console.log(o.x) //输出:undefined
</script>
严格模式下,不允许删除函数
<script>
"use strict";
function foo(p1,p2){
}
delete foo; //Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.
</script>
严格模式下,函数不允许参数名相同
<script>
function a(a1, a1) {
console.log(a1, a1)
}
a(1,3) // 3 3
</script>
<script>
"use strict";
function a(a1, a1) {
// SyntaxError: Duplicate parameter name not allowed in this context
console.log(a1, a1)
}
</script>
严格模式下,不允许使用八进制
<script>
"use strict";
var x = 010; //Uncaught SyntaxError: Octal literals are not allowed in strict mode.
</script>
严格模式下,不允许对只读属性赋值
<script>
"use strict";
var obj = {
};
Object.defineProperty(obj, "x", {
value: 0,
writable: false
});
obj.x = 3.14; //Uncaught TypeError: Cannot assign to read only property 'x' of object '#<Object>'
</script>
严格模式下,不允许对一个使用getter方法读取的属性进行赋值
<script>
"use strict";
var obj = {
get x() {
return 0
}
};
obj.x = 3.14; //Uncaught TypeError: Cannot set property x of #<Object> which has only a getter
</script>
严格模式下,不允许删除一个不允许删除的属性
<script>
"use strict";
delete Object.prototype; //Uncaught TypeError: Cannot delete property 'prototype' of function Object() { [native code] }(不能删除函数对象()的属性“原型”{ [本机代码] })
</script>
严格模式下,变量名不能使用 “eval” 字符串
<script>
//严格模式下
"use strict";
var eval = 3.14; //Uncaught SyntaxError: Unexpected eval or arguments in strict mode(严格模式下的意外EVE或参数)
console.log(eval)
</script>
<script>
//非严格模式下
var eval = 3.14;
console.log(eval) //3.14
</script>
严格模式下,变量名不能使用 “arguments” 字符串
<script>
// 严格模式下
"use strict";
var arguments = 3.14; //Uncaught SyntaxError: Unexpected eval or arguments in strict mode(严格模式下的意外EVE或参数)
console.log(arguments)
</script>
<script>
// 非严格模式下
var arguments = 3.14;
console.log(arguments) //3.14
</script>
严格模式下,不允许使用以下这种语句
<script>
"use strict"
with(Math) {
x = cos(2)
}; //Uncaught SyntaxError: Strict mode code may not include a with statement
</script>
严格模式下,由于一些安全原因,在作用域 eval() 创建的变量不能被调用
<script>
"use strict"
eval ("var x = 2");
alert (x); // Uncaught ReferenceError: x is not defined
</script>
文章浏览阅读1.9w次,点赞4次,收藏12次。前言在婚语APP中,分别使用了AVAudioPlayer,AVPlayer,AVQueuePlayer来实现音频播放功能,下面以婚语的实际需求分别介绍它们的使用方法和区别。需求1 档期备忘:用户新建档期记录时,可以进行录音备忘,录音完成后可直接播放,保存档期时将录音文件上传到服务器。分析1:因为录音备忘一般时长较短文件较小,所以录音完将录音文件上传到服务器的同时,本地也保留录音文件,用户查看档期并点_avaudioplayer avplayer 区
文章浏览阅读1k次。单个热图内容太多了,全部放一章滑都滑不到底,所以先分成上下章,到时候再整合起来。2. 单个热图2.1 颜色2.2 标题2.3 聚类2.3.1 距离方法2.3.2 聚类方法2.3.3 渲染树..._complexheatmap调整聚类树枝粗细
文章浏览阅读1.3k次,点赞4次,收藏15次。对于pid整定,sisotool的可视化效果更强,但是规定了系统反馈的样子。而response optimization则是完全根据系统的输出值进行调整的。首先,要使用Check Step Response Characteristics和response optimization必须要有变量。不然它们调什么参数呢?先参考上一篇论文,定义好系统的变量。注意这一步应该在打开response optimization之前完成,否则变量不会更新进去。当然也有别的方法,懒得写了。总之这样是最简单的。_simulink response optimization
文章浏览阅读2k次。latex算法分页问题引入的包可分页的算法格式使用方法引入的包\usepackage{algorithmic}\usepackage{algorithm,float}这些包会和其他的算法包比如algorithml2e冲突。可分页的算法格式\makeatletter\newenvironment{breakablealgorithm} {% \begin{breakablealgo..._\makeatletter \newenvironment{breakablealgorithm} {% \begin{breakablealgorit
文章浏览阅读321次。测试平台在我的上一篇博客中对比了VS2010中C#和C++在运算密集型程序中的性能。上一篇博客的链接:http://www.cnblogs.com/ytyt2002ytyt/archive/2011/11/24/2261104.html当时是在AMD 速龙9650 CPU(4核心)下的测试结果。随着VS2012、Intel Parallel Studio XE 2013中新一..._c# 与fortran 计算能力对比
文章浏览阅读1.5w次,点赞5次,收藏14次。外接硬盘安装win10 2019官方镜像,进入win10发现bootcamp尝试访问启动磁盘设置时出错,报错如下。解决方案:按照以下步骤创建一个新用户右击用户,创建新用户。这里注意最好要设置用户名为Apple, 密码必须设置。其他不要勾选最后win+R 输出命令即可打开bootcamp面板:C:\Windows\System32\runas.exe /user:App..._尝试访问启动磁盘设置时出错
文章浏览阅读6.4k次,点赞5次,收藏10次。文章目录一、业务场景二、选用技术三、准备四、服务器准备五、配置步骤1、配置网卡(所有节点)2、配置hosts映射(主节点)3、配置主节点到各个机器的ssh(主节点)4、安装ansible5、配置ansible的hosts(ansible使用的ip和定义主机组的映射)六、编写playbook七、附件-脚本1.closeTHP.sh2.modifyLimits.sh3.modifyNtpMaster.sh4.modifyNtpSlave.sh5.installJdk.sh6. closeSelinux.sh7._ansible-playbook,shell
文章浏览阅读1.1k次。from bs4 import BeautifulSoupimport requestsimport timeimport pandas as pdfrom selenium import webdriverimport csvimport reimport numpy as npimport osafterLogin_headers = {'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.3_专利全量信息爬虫
文章浏览阅读169次。静态库所有的编译系统都提供一种机制,将所有相关的目标模块打包成为一个单独的文件,成为static library——静态库相关的函数可以被编译为独立的目标模块,然后封装成一个单独的静态库文件。然后应用程序可以通过在命令行上指定的单独的文件名字来时用这些在库中定义的函数。在链接时,链接器将只复制程序引用的目标模块:1.减少了可执行文件在磁盘和内存中的大小。2.应用程序员只需要包含..._csapp库
文章浏览阅读62次。对于 100 % 100\% 100% 的数据: 1 ≤ n ≤ 1 0 4 1 \le n \le 10^4 1≤n≤104, 1 ≤ m ≤ 5 × 1 0 5 1\le m \le 5\times 10^5 1≤m≤5×105, 1 ≤ u , v ≤ n 1\le u,v\le n 1≤u,v≤n, w ≥ 0 w\ge 0 w≥0, ∑ w < 2 31 \sum w< 2^{31} ∑w_q.push( ( node ){0, s} );是什么意思
文章浏览阅读338次。解决方法:修改echarts引入语句为 import * as echarts from 'echarts';或const echarts = require('echarts');_export 'config' (imported as 'echarts') was not found in 'echarts
文章浏览阅读148次。程序员1.对于程序员来说学什么语言并不重要,针对一些业务去学习,在工作中要把工作中常用的技术学会,学习项目经验,从开始到结束有总筹意识,技术只是细枝末节。关键是道,学习之道,工作之道。如果只沉浸于一向技术,最终结果可能会随着时代的进步而泥沙俱下。所有要有工程师的意识,而不是搬砖农民工的意识。一个项目从设计到结束,要选择考虑什么技术去做,根据具体情况采用最快最优最好的设计去完成工作。这个才是技术之本...