JavaScript严格模式限制整理

小米的奇幻编程之旅:当 JavaScript 语法变成了一座魔法城 在写 JavaScript 的那几年,我总觉得自己像在一座脾气古怪的“语法魔法城”里闯关:大小写像护城河、标识符像身份证、注释像魔法笔记、严格模式像王宫铁律、语句更是施法咒语。直到真正理解这些规则,我才发现原来写代码也能像冒险一样有趣。 阅读详情

JavaScript中通过在全局或函数的开头写上"use strict"使用严格模式,而严格模式下的JavaScript会有些许限制。

变量必须声明后再使用


在严格模式中,变量未经声明使用不再变为全局变量,而是会报错

function strictFn(){
    "use strict";
    a=2;
}

strictFn();
// Uncaught ReferenceError: a is not defined at strictFn

但是在严格模式下还是有变量提升

function strictFn(){
    'use strict';
    a=2;
	var a;
}

strictFn();

函数的参数不能同名,否则报错


function fn(a,a){
    "use strict";
}
// Uncaught SyntaxError: Duplicate parameter name not allowed in this context

function fn(a,a){
}
// undefined

不能使用with语句


with语句在给对象属性赋值时很方便,但会在运行时修改或创建新的作用域,在严格模式下with语句被彻底禁止了。

var obj={
    a:1
}
function strictFn(obj){
    "use strict";
    with(obj){
        a=2;
    }
}
// Uncaught SyntaxError: Strict mode code may not include a with statement

这里可以看到严格模式下甚至没有调用严格模式下的函数,仅声明时就已经报错了。

不能对只读属性赋值和删除不可删除的属性,否则报错


在非严格模式下修个只读属性和删除不可删除的属性,只会静默失败,而在严格模式下则会报错

var person={};
Object.defineProperty(person,"age",{
    value:20,
    writable:false,
    configurable:false
});

// 非严格模式
function normalFn(obj){
    obj.age=21;
}
normalFn(person);
person.age;
// 20

function normalFn(obj){
    delete obj.age;
}
normalFn(person);
person.age;
// 20

//严格模式
function strictFn(obj){
    "use strict";
    obj.age=21;
}
strictFn(person);
// Uncaught TypeError: Cannot assign to read only property 'age' of object '#<Object>' at strictFn

function strictFn(obj){
	"use strict";
    delete obj.age;
}
strictFn(person);
// Uncaught TypeError: Cannot delete property 'age' of #<Object> at strictFn

不能使用前缀 0 表示八进制数,否则报错


在非严格模式下,可以使用前缀0表示八进制,而在严格模式下会报错。但是使用0o前缀表示八进制不会报错。

// 非严格模式
function normalFn(){
    console.log(011);
}
normalFn();
// 9

//严格模式
function normalFn(){
    "use strict";
    console.log(011);
}
// Uncaught SyntaxError: Octal literals are not allowed in strict mode.
// 声明时就报错

function strictFn(){
	"use strict";
    console.log(0o11);
}
strictFn()
// 9

不能删除变量,否则会报错


// 非严格模式
function normalFn(){
    var prop;
    delete prop;
}
normalFn();

// 严格模式
function strictFn(){
    "use strict";
    var prop;
    delete prop;
}
strictFn();
// Uncaught SyntaxError: Delete of an unqualified identifier in strict mode.

外层作用域不能使用eval内声明的变量


在严格模式中,eval在运行时有自己的词法作用域,这使得其中的声明无法修改其所在的作用域

//非严格模式
function normalFn(){
    eval("var a=1");
    console.log(a);
}
normalFn();
// 1

// 严格模式
function strictFn(){
    "use strict";
    eval("var a=1");
    console.log(a);
}
strictFn();
// Uncaught ReferenceError: a is not defined at fn

在严格模式下,可以避免eval修改当前作用域中的变量

function fn(){
    "use strict";
	var a=1;
    eval("var a=2;console.log('eval:'+a)");
    console.log("out:"+a);
}
fn();
// eval:2
// out:1

上面代码中,在eval中使用了自己作用域中的变量a,而外部函数作用域中的变量a的值没有被改变

禁止this指向全局对象


在非严格模式中,使用call传入null作为第一个参数会使this指向全局对象,而在严格模式中会报错

var a=1;
function fn(){
	"use strict";
    console.log(this.a);
}
fn.call(null);
// Uncaught TypeError: Cannot read property 'a' of null at fn

不能使用arguments.callee,arguments.callee和arguments.caller


"use strict";
function fn(){
	console.log(fn.caller);
}
fn();
// Uncaught TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them at fn

eval和arguments不能被重新赋值


function fn(){
	"use strict";
    var eval=1;
    console.log(eval);
}
// Uncaught SyntaxError: Unexpected eval or arguments in strict mode

增加了保留字


为了向后面的JavaScript过渡,严格模式下增加了一些保留字,implements, interface, let, package, private, protected, public, static, yield,class, enum, export, extends, import, super等,使用这些保留字作为变量名会报错

function fn(){
    "use strict";
    var class=1;
}
// Uncaught SyntaxError: Unexpected token class

若有所缺漏和错误,请各位大佬帮忙指出

关于token无痛刷新的两个方案 目录方案一方案二 方案一 思路: 后端需要返回一个token过期的时间,在请求发起前拦截每个请求,判断token的有效时间是否已经过期,如果已过期,则暂时将请求挂起,先刷新token后再继续请求。 前期思考: 返回过期时间是为了判断是否过期的,但是如果服务器时间和系统时间不一致呢? 如果同时发起多个请求时怎么办? 实现: 因为是在请求前进行拦截,所以这里用axios的axios.interceptors.request.use()方法 首先,关于服务器时间和系统时间不一致的问题,我的解决方法是: 阅读详情

相关推荐

Field-Oriented Control (FOC) 矢量控制 磁场定向控制

Field-Oriented Control (FOC) 磁场定向控制(FOC),也称为矢量控制,是一种用于控制永磁同步电动机(PMSM)和交流感应电动机(ACIM)的技术。 FOC在整个扭矩和速度范围内都具有良好的控制能力。 FOC的实现需要将定子电流从固定参考系转换为转子磁通参考系(也称为d-q参考系)。 速度控制和转矩控制是FOC最常用的控制模式。位置控制模式不太常见。大多数牵引应用使用转矩控制模式,在该模式下,电动机控制系统遵循参考转矩值。在速度控制模式下,电机控制器遵循参考速度值,并生成用于形成内

>>> 1万+

JS严格模式(use strict)

这是你看到的最完美的JS严格模式(use strict)详解!!!

全栈科学家的博客 654

解决Visual C++2008安装失败,error 1935

重装系统后Visual C++没了,其他都能装上但VC2008会报这个error 1935。鉴于我把网上所有的解决方法排了一遍错,我也不知道是哪一步起效,所以就都放上来了。特别注意:报error 1935的错误原因可能不尽相同,比如我的报错开头为An error occurred,结尾为HRESULT:0x80070005。80070005 拒绝访问通常是权限问题,安装Visual C++无法写入文件夹或注册表(直接跳转第7步)

weixin_44427808的博客 1万+

JavaScript 调试错误类型

Uncaught ReferenceError: x is not defined 无法捕获的引用错误: x没有定义 Uncaught ReferenceError: y is not defined 无法捕获的引用错误:y没有定义 Uncaught SyntaxError: Delete of an unqualified identifier in strict mode 无法捕获的语法错误:在严格模式下删除不合格的标识符。不允许删除变量或对象。 Uncaught SyntaxError: Dele..

ningmeng666_c的博客 1339

Python+whisper/vosk实现语音识别

Whisper 是一个由 OpenAI 开发的人工智能语音识别模型,它能够将语音转换为文本。Whisper 模型特别之处在于它的设计目标是能够理解和转录多种语言的语音,包括但不限于英语。Whisper 模型在训练时使用了大量不同语言的语音数据,这使得它具有很好的跨语言能力。Vosk 是一个开源的语音识别库,它可以在离线环境下工作,不依赖于任何外部服务。Vosk 基于Kaldi语音识别框架,支持多种语言,包括中文。Vosk提供了多种预训练模型,可以根据需求选择适合的模型进行语音识别。

weixin_44458771的博客 5941

【学习笔记】人群归因分数 PAF 以及combined PAF

人群归因风险比例(Population Attributable Fraction,PAF)是一个流行病学指标,它估计了在总体中,如果能消除一个特定的危险因素,能预防多少百分比的疾病或健康结果。简单来说,PAF回答的是:“如果没有这个风险因素,总体中会有多少病例是可以避免的?

weixin_53499537的博客 4900

javascript严格模式

1 javascript严格模式(use strict) javascript严格模式(strict mode)即在严格的条件下运行。 “use strict”指令在javascript 1.8.5(ECMAScript5)中新增。它不是一个语句,是一个字面量表达式,在javascript旧版中忽略。 为什么使用严格模式? 消除javascript语法的一些不合理、不严谨之处,减少一些怪异行为 消除代码运行的不安全之处,保证代码运行的安全 提高编译...

...... 528

在ABAQUS中使用VUMAT子程序实现Hashin失效准则的详细解析与实践:深入探讨复合材料模拟仿真的高级编程技巧

Hashin失效准则是由材料科学家Shlomo Hashin于1962年提出的一种基于能量方法的多向失效理论,主要用于预测复合材料的破坏行为。与传统的单向失效理论不同,Hashin准则考虑了材料内部的多种独立破坏机制,如基体断裂、界面脱粘、纤维断裂等,这些机制在不同应力状态下可能同时或分别发生。通过计算各个机制的能量释放率,Hashin失效准则能够更为准确地预测复合材料在复杂应力状态下的破坏行为。

qq_38334677的博客 1949

ES5严格模式

开启严格模式:在顶部或者函数顶部加上'usestrict'; 1,未经声明禁止赋值和使用 'usestrict'; a=1; UncaughtReferenceError:aisnotdefined 2,禁止使用with with(expression){ statement } expression 将给定的表达式添加到在评估语句时使用的作用域链上。表达式周围的括号是必需的。 statement 任何语句。要执行多个语句,请使用一个块语句...

qq_41995398的博客 321

ARM与PC共享文件方式【samba】移植与配置

方式推荐指数适用平台优点缺点⭐⭐⭐⭐⭐全平台 (Win/Mac/Linux)兼容性最强,操作像本地文件配置稍繁琐,协议开销略大NFS⭐⭐⭐⭐Linux/Mac (Win支持一般)速度极快,CPU占用低Windows配置复杂,权限管理较难SFTP (SSH)⭐⭐⭐⭐全平台 (需客户端)安全加密,无需额外配置服务需使用FileZilla/Xftp等专用软件物理U盘⭐⭐⭐全平台无需网络,速度取决于接口需要人工插拔,不适合自动化Syncthing⭐⭐⭐⭐全平台自动同步,支持远程。

浩瀚之水的专栏 263

ROCm rocr-libhsakmt分析系列1-2:多GPU跨卡VRAM访问机制分析

本文基于ROCr-Runtime的libhsakmt库源码,深入分析了多GPU系统中跨设备内存访问的实现机制。主要内容包括: 实现流程概述:通过P2P拓扑发现、统一虚拟地址空间、页表映射和硬件转发四个步骤,实现零拷贝的跨GPU内存访问。

图形/计算GPU的驱动与虚拟化技术分享园地 2507

Uncaught (in promise) Error: 权限校验未通过,请参考文档:错误的处理方法

使用uniapp在编程过程出现如下错误:Uncaught (in promise) Error: 权限校验未通过,请参考文档:ttps://uniapp.dcloud.net.cn/uniCloud/schema.html#handler-permission-error at chunk-vendors.js:40836:20。3、最终原因:以上2个数据库文件均有一个字段seller_note,其中有一个属性permission设置成了false。2、其他数据库文件未出现以上错误。

m0_64213914的博客 2607

时间序列预测 — 预测数据集(负荷、风电、光伏、销量等)

GEFCom2014 “负荷预测数据”为竞赛的公共数据集,GEFCom2014 的负荷预测轨迹为概率负荷预测。

几度春风里的博客 2万+

100道React高频题整理(附答案背诵版)

在React中,key是一个特殊的字符串属性,你需要在创建元素数组时将其传递。在React的diff算法中,key用于识别哪些元素发生了变化,哪些被添加或删除。具体来说,当我们渲染一个元素列表时,React需要追踪每个元素的身份,以便在状态发生变化时能正确地更新和渲染元素。key就是这个身份的标识。例如,如果我们有一个待办事项列表,每次添加一个新的待办事项时,React需要确定是添加新的待办事项,还是重新排序现有的待办事项。如果每个待办事项都有一个稳定的、独一无二的key。

IT6666_it的博客 724

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

Devexpress16.2.6破解工具

Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具Devexpress16.2.6破解工具

Javascript基础(2) - 严格模式特点

/非严格模式}”;eval(str1);//这个name定义在了全局,而不是函数内eval(str2);//严格模式}”;eval(str1);eval(str2);//修改全局变量name//Bobfun2();})();大厂面试问深度,小厂面试问广度,如果有同学想进大厂深造一定要有一个方向精通的惊艳到面试官,还要平时遇到问题后思考一下问题的本质,找方法解决是一个方面,看到问题本质是另一个方面。

m0_60607971的博客 985

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

JavaScript面向对象 - 严格模式

下面是对JavaScript中严格模式的整理,严格模式会对代码会有更高的要求,希望可以帮助到有需要的小伙伴。 一、严格模式概述 1、严格模式是什么 严格模式是JavaScript中的一种限制性更强的变种方式。 严格模式不是一个子集:它在语义上与正常代码有着明显的差异。 不支持严格模式的刘览器与支持严格模式的刘览器行为上是不一样的,所以不能在未经严格模式特性测试情况下使用严格模式。 严格模式可以与非严格模式共存,所以脚本可以逐渐的选择性加人严格模式。 2、严格模式的目的 严格模式会将JavaScript陷阱

weixin_46370867的博客 115

lwip-2.0.3

lwip是瑞典计算机科学院(SICS)的Adam Dunkels 开发的一个小型开源的TCP/IP协议栈。实现的重点是在保持TCP协议主要功能的基础上减少对RAM 的占用。

too few arguments to function是什么意思_为什么需要在JavaScript中使用严格模式?

严格模式是什么意思?有什么用途?为什么我们应该使用它?本文将主要从这几个问题入手,讲述在 JavaScript 中使用严格模式的必要性。严格模式是现代 JavaScript 的重要组成部分。通过这种模式,我们可以选择使用更为严格的 JavaScript 语法。严格模式的语义不同于以前的 JavaScript“稀松模式”(sloppy mode),后者的语法更宽松,并且会静默代码中的错误。这意味着错...

weixin_39924674的博客 3710

嵌入式工程师生存地图:从裸机PID到Linux驱动全链路

嵌入式开发本质是软硬协同的系统工程,其核心在于理解硬件操控、资源抽象与实时约束三者关系。裸机阶段强调对寄存器、中断、时序的直接掌控,典型如裸机PID控制需兼顾确定性、实时性与资源可见性;进入Linux后则转向分层抽象,依赖设备树描述硬件、内核驱动封装访问、用户空间安全调用。技术价值体现在构建高可靠、可维护、可量产的嵌入式系统能力,应用场景覆盖工业控制、车载终端、智能硬件等对稳定性与实时性双重要求的领域。本文聚焦裸机与Linux衔接的关键断层,解析从GPIO点灯到字符设备驱动、从ADC采样到IIO框架的演进逻

weixin_33979203的博客 219

10月28日 前端js知识点整理

js知识点学习笔记

Ajiabututou的博客 109

那些年,前端学习之路的疑难杂症(一):严格模式与非严格模式

文章整理自MSDN:https://developer.mozilla.org... 1.逐步使用严格模式 ECMAScript 5的严格模式是JavaScript中的一种限制性更强的变种方式。严格模式不是一个子集:它在语义上与正常代码有着明显的差异。不支持严格模式的浏览器与支持严格模式的浏览器行为上也不一样, 所以不要在未经严格模式特性...

weixin_34260991的博客 159

JS笔记

1、js——引用类型和基本类型 基本类型:Number Boolean String undefined null 引用类型:Object Function 2、

Liuqz2009的专栏 449

web前端程序员面试必备的知识点有哪些,Javascript基础(2) - 严格模式特点,为什么有人说前端开发不再吃香

由于篇幅限制,pdf文档的详解资料太全面,细节内容实在太多啦,所以只把部分知识点截图出来粗略的介绍,每个小节点里面都有更细化的内容!一个人可以走的很快,但一群人才能走的更远。不论你是正从事IT行业的老鸟或是对IT行业感兴趣的新人,都欢迎扫码加入我们的的圈子(技术交流、学习资源、职场吐槽、大厂内推、面试辅导),让我们一起学习成长!里面都有更细化的内容![外链图片转存中…(img-4M03pyyl-1712458012313)][外链图片转存中…(img-BvI3oYGL-1712458012313)]

m0_61943758的博客 404

JavaScript面向对象学习(part3&&part4)——笔记整理+正则表达式+this指向_函数整理

文章目录 一.函数的定义和调用 二. this 三.严格模式 四.正则表达式模块 一.函数的定义和调用 1.1函数的定义方式 方式1 函数声明方式 function 关键字 (命名函数) function fn(){} 方式2 函数表达式(匿名函数) var fn = function(){} 方式3 new Function() var f = new Function('a', 'b', 'console.log(a + b)'); f(1, 2); var fn = new Func

Myself's 优快云 316

对象中multipartfile 空报错_JavaScript语言入门教程记录整理:面向对象

本系列基于阮一峰老师的《JavaScrip 语言入门教程》[1]或《JavaScript 教程》记录整理,教程采用知识共享 署名-相同方式共享 3.0 协议[2]。这几乎是学习 js 最好的教程之一(去掉之一都不过分)最好的教程而阮一峰老师又采用开源方式共享出来,之所以重新记录一遍,一是强迫自己重新认真读一遍学一遍;二是对其中知识点有个自己的记录,加深自己的理解;三是感谢这么好的教程,希...

weixin_39870413的博客 248

js中【argument】知识点详解

arguments即使你在函数定义中声明了参数,arguments对象仍然会捕获所有传递的参数。在早期的 JavaScript 中,arguments是处理不定参数的主要方法之一。arguments对象是一个类数组对象,用于访问函数调用时传递的所有参数。它具有length属性,可以通过索引访问传递的参数,但没有数组的高级方法。在严格模式下,arguments与函数参数不再同步。arguments不适用于箭头函数,它们不会创建自己的arguments对象。ES6 引入的rest参数(

2301_79858914的博客 2778
上一篇: LeetCode 12.整数转罗马数字 Java实现
下一篇: LeetCode 43.字符串相乘 Java实现
前端小黑
博客等级 码龄9年 148粉丝 222原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值