javascript中的严格模式(use strict)

news2025/6/13 19:57:15

下面是一个使用JavaScript严格模式的代码示例。在这个示例中,我将展示如何在整个脚本中启用严格模式,并演示一些严格模式下可能遇到的问题。

"use strict"; 

a = 1;  // Uncaught ReferenceError: a is not defined
// 尝试使用一个未声明的变量 
// 在严格模式下,这将抛出一个 ReferenceError 
// var undeclaredVariable; 
console.log(undeclaredVariable); // ReferenceError: undeclaredVariable is not defined 


// 尝试删除一个变量 
var declaredVariable = "Hello, World!"; 
delete declaredVariable; // SyntaxError: Identifier 'declaredVariable' can't be deleted 
console.log(declaredVariable); // "Hello, World!" 


// 尝试使用八进制字面量 
var octalLiteral = 010; // SyntaxError: Octal literals are not allowed in strict mode. 


// 尝试修改 this 的值 
function exampleFunction() { 
return this; 
} 


var obj = { prop: 42 }; 
var func = exampleFunction.bind(obj); 
func.this = "newThis"; // TypeError: Cannot assign to read only property 'this' of function 


// 尝试使用 with 语句 
// 在严格模式下,with 语句是不允许的 
// with (Math){x = cos(2)}; 


// 尝试使用 eval 或 arguments 作为变量名 
// 在严格模式下,这将抛出 SyntaxError 
// var eval = 1; 
// var arguments = 2; 


// 尝试使用函数的 caller 或 callee 属性 
function showCaller() { 
console.log(showCaller.caller); // TypeError: 'caller', 'callee', and 'arguments' properties may not be accessed on strict mode functions or the arguments objects for calls to them 
} 


showCaller(); 


// 严格模式下的函数参数变化 
function strictFunction(a, b) { 
"use strict"; 
a = 42; 
var b = "Hello"; 
console.log(arguments[0]); // 仍然输出原始值,不会受到函数内部 a变量变化的影响 
} 


strictFunction(10, "World"); // 输出 10 


// 严格模式下的其他正常代码 
function safeFunction() { 
"use strict"; 
var safeVariable = "Safe to use"; 
console.log(safeVariable); 
} 

当然,关于JavaScript严格模式,还有很多细节和用法可以探讨。下面我将继续提供一些关于严格模式的示例和说明。

严格模式下的函数参数和arguments对象
在严格模式下,函数内的参数改变不会影响到arguments对象,反之亦然。这是为了避免一些混淆和潜在的错误。

javascript
"use strict";  
  
function exampleFunction(value) {  
    value = "new value";  
    console.log(arguments[0]); // 输出 "original value",因为在严格模式下,value的改变不会影响arguments[0]  
    arguments[0] = "changed value";  
    console.log(value); // 输出 "new value",因为arguments[0]的改变不会影响value  
}  
  
exampleFunction("original value");
严格模式下的只读属性
在严格模式下,尝试为只读属性赋值会抛出错误。

javascript
"use strict";  
  
var obj = Object.freeze({  
    property: "Hello"  
});  
  
obj.property = "World"; // TypeError: Cannot assign to read only property 'property' of object '#<Object>'
严格模式下的eval使用
在严格模式下,eval内的变量和函数声明不会创建全局变量,也不会修改外部作用域。

javascript
"use strict";  
  
eval("var test = 42;");  
console.log(test); // ReferenceError: test is not defined  
  
function outerFunction() {  
    var outerVariable = "outer";  
    eval("var innerVariable = 'inner';");  
    console.log(innerVariable); // 输出 "inner",但是不会影响到外部作用域  
}  
  
outerFunction();  
console.log(innerVariable); // ReferenceError: innerVariable is not defined
严格模式下的this值
在严格模式下,全局作用域下的this值为undefined,而不是全局对象(在浏览器中通常是window)。

javascript
"use strict";  
  
console.log(this === undefined); // 输出 true
在函数内部,this的值不会因为外部函数的调用方式而随意改变(比如通过call、apply或bind方法)。

javascript
"use strict";  
  
function exampleFunction() {  
    return this;  
}  
  
var obj = { value: 42 };  
var func = exampleFunction.bind(obj);  
  
console.log(func()); // 输出 obj 对象
严格模式下的重复属性名
在严格模式下,对象字面量中不能包含两个相同的属性名。

javascript
"use strict";  
  
var obj = {  
    prop1: "value1",  
    prop1: "value2" // SyntaxError: Duplicate data property in object literal not allowed in strict mode  
};
这些示例进一步展示了严格模式如何改变JavaScript的行为,帮助开发者编写更安全、更可靠的代码。在编写JavaScript代码时,推荐始终启用严格模式,并遵循其规则,以确保代码质量和减少潜在的错误。
safeFunction(); // 输出 "Safe to use"

在这个示例中,我注释掉了那些会在严格模式下导致错误的代码,并在其下方提供了相应的错误信息。同时,我也展示了一些在严格模式下仍然可以安全使用的代码。

请注意,在真实项目中,通常你会想要避免在严格模式下使用被禁止的特性,并且确保你的代码遵循严格模式的规则,以便能够捕获潜在的错误并写出更健壮的代码。在编写新的JavaScript代码时,启用严格模式是一个很好的实践。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1504076.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

中国钛合金自行车出口海外营销策略-大舍传媒

中国是世界上自行车产量最大的国家之一&#xff0c;而如今&#xff0c;它也在自行车制造领域迈出了一大步。Titan Super Bond与Bright Laser Technologies (BLT)合作&#xff0c;成功开发了中国和亚洲首款全3D打印钛合金自行车车架。 这款创新的自行车车架采用了BLT-A320机器&a…

bat文件给多个Android设备安装apk

本文是安装一个apk 1、确保以下3个文件在同一个目录下 1>要安装的apk&#xff0c;这里是mmb.apk 2>设备名单&#xff0c;保存在.txt文件中&#xff0c;一行一个设备名&#xff0c;设备名通过adb devices获取&#xff0c;截图中是两个设备 txt文件中的样式 3>要运行…

二、实战篇 商户查询缓存

源码仓库地址&#xff1a;gitgitee.com:chuangchuang-liu/hm-dingping.git 1、什么是缓存&#xff1f; 缓存(Cache),就是数据交换的缓冲区,俗称的缓存就是缓冲区内的数据,一般从数据库中获取,存储于本地代码 1.1、为什么要使用缓存&#xff1f; 添加缓存后&#xff0c;重复的…

icp许可证年报入口在哪?icp许可证年报流程详细介绍

近期拥有ICP许可证的企业负责人都会收到各地方通管局下发的年报通知&#xff0c;需要在每年的1-3月份报送年报信息&#xff0c;最晚报送时间是2024年3月31日。 对于刚申请或者刚接触这方面的朋友来说&#xff0c;可能连icp许可证年报入口在哪都不知道&#xff0c;更不用说后面…

OpenStack之keystone(用户认证)

Keystone&#xff08;认证&#xff09; Keystone 概述 1)管理用户及其权限 2)维护OpenStack Services 的 Endpoint 3)Authentication&#xff08;认证&#xff09;和 Authorization&#xff08;授权&#xff09; keystone的名词概念 1.User&#xff08;用户或服务&#xf…

springboot256基于springboot+vue的游戏交易系统

游戏交易系统设计与实现 摘 要 在如今社会上&#xff0c;关于信息上面的处理&#xff0c;没有任何一个企业或者个人会忽视&#xff0c;如何让信息急速传递&#xff0c;并且归档储存查询&#xff0c;采用之前的纸张记录模式已经不符合当前使用要求了。所以&#xff0c;对游戏交…

制定一份完美的测试计划,让您的产品质量更上一层楼!

大家好&#xff0c;我是彭于晏。今天学习测试计划如何书写。 虽然很多人日常工作中都知道测试计划是什么&#xff0c;但是写好测试计划&#xff0c;其实并不容易。今天就来一起学习下测试计划如何书写。 什么是测试计划&#xff1f; 测试计划是一份为软件产品所准备的详细文档…

揭秘接口测试:完整流程指南!

在讲接口测试之前&#xff0c;首先需要给大家申明下&#xff1a;接口测试对于测试人员而言&#xff0c;非常非常重要&#xff0c;懂功能测试接口测试&#xff0c;就能在企业中拿到一份非常不错的薪资。 这么重要的接口测试&#xff0c;一般也是面试笔试必问。为方便大家更好的…

Qt 实现诈金花的牌面值分析工具

诈金花是很多男人最爱的卡牌游戏 , 每当你拿到三张牌的时候, 生活重新充满了期待和鸟语花香. 那么我们如果判断手中的牌在所有可能出现的牌中占据的百分比位置呢. 这是最终效果: 这是更多的结果: 在此做些简单的说明: 炸弹(有些地方叫豹子) > 同花顺 > 同花 > 顺…

【Web】浅聊Java反序列化之Rome——关于其他利用链

目录 前言 JdbcRowSetImpl利用链 BasicDataSource利用链 Hashtable利用链 BadAttributeValueExpException利用链 HotSwappableTargetSource利用链 前文&#xff1a;【Web】浅聊Java反序列化之Rome——EqualsBean&ObjectBean-CSDN博客 前言 Rome中ToStringBean的利用…

ElasticSearch 底层读写原理

ElasticSearch 底层读写原理 ​ 写请求是写入 primary shard&#xff0c;然后同步给所有的 replica shard&#xff1b;读请求可以从 primary shard 或 replica shard 读取&#xff0c;采用的是随机轮询算法。 1、ES写入数据的过程 1.选择任意一个DataNode发送请求&#xff0c…

山泉还可以申请商标不,现阶段通过率如何!

在32类类别啤酒饮料是许多生产水企业主要申请注册的类别&#xff0c;那现在山泉在这个类别还可以申请注册商标不&#xff0c;山泉在这个类别基本上是通用词&#xff0c;首先是需要前面词具有显著性&#xff0c;没的相同或近似才可以。 经普推知产老杨检索发现&#xff0c;在32…

数据分析-Pandas数据画箱线图

数据分析-Pandas数据画箱线图 数据分析和处理中&#xff0c;难免会遇到各种数据&#xff0c;那么数据呈现怎样的规律呢&#xff1f;不管金融数据&#xff0c;风控数据&#xff0c;营销数据等等&#xff0c;莫不如此。如何通过图示展示数据的规律&#xff1f; 数据表&#xff…

全网最最最详细centos7如何安装docker教程

在CentOS 7上安装Docker主要包括以下步骤&#xff1a; 1. 卸载旧版本的Docker 首先&#xff0c;需要确保系统上没有安装旧版本的Docker。可以通过以下命令来卸载它们&#xff1a; sudo yum remove docker \docker-client \docker-client-latest \docker-common \docker-late…

阿珊详解Vue Router的守卫机制

&#x1f90d; 前端开发工程师、技术日更博主、已过CET6 &#x1f368; 阿珊和她的猫_CSDN博客专家、23年度博客之星前端领域TOP1 &#x1f560; 牛客高级专题作者、打造专栏《前端面试必备》 、《2024面试高频手撕题》 &#x1f35a; 蓝桥云课签约作者、上架课程《Vue.js 和 E…

nginx代理minio客户端

错误方式 在点击桶名查看文件时, 会一直处于loading加载中 worker_processes 1; #设置 Nginx 启动的工作进程数为 1。events {worker_connections 1024; ##设置每个工作进程的最大并发连接数为 1024。 }http {include mime.types; #该文件定义了文件扩展名和 MIME 类型…

AJAX学习(一)

版权声明 本文章来源于B站上的某马课程&#xff0c;由本人整理&#xff0c;仅供学习交流使用。如涉及侵权问题&#xff0c;请立即与本人联系&#xff0c;本人将积极配合删除相关内容。感谢理解和支持&#xff0c;本人致力于维护原创作品的权益&#xff0c;共同营造一个尊重知识…

全网最新最全的Jmeter接口测试:jmeter_定时器

固定定时器 如果你需要让每个线程在请求之前按相同的指定时间停顿&#xff0c;那么可以使用这个定时器&#xff1b;需要注意的是&#xff0c;固定定时器的延时不会计入单个sampler的响应时间&#xff0c;但会计入事务控制器的时间 1、使用固定定时器位置在http请求中&#xf…

CVHub | 初识langchain,3分钟快速了解!

本文来源公众号“CVHub”&#xff0c;仅用于学术分享&#xff0c;侵权删&#xff0c;干货满满。 原文链接&#xff1a;初识langchain 1 什么是langchain langchain[1]是一个用于构建LLM-Based应用的框架&#xff0c;提供以下能力: 上下文感知&#xff1a;可以为LLM链接上下文…

汽车零部件制造中的信息抽取技术:提升效率与质量的关键

一、引言 在汽车制造业中&#xff0c;零部件的生产是整个制造流程的关键一环。这些零部件&#xff0c;包括但不限于制动系统、转向系统和传动系统&#xff0c;是确保汽车安全、可靠运行的基础。为了满足现代汽车工业对效率和质量的严格要求&#xff0c;制造商们纷纷投入到高度…