javascript中使用‘use strict’和不使用的区别

news/2024/7/24 8:35:12 标签: javascript, 前端, 开发语言
  1. 错误处理:

严格模式使得 JavaScript 对某些可能的问题抛出错误,而在非严格模式下,这些问题可能会被忽略。例如,未声明的变量(即全局变量)在非严格模式下会被隐式地创建为全局变量,而在严格模式下会抛出错误。(例子如下:)

javascript">非严格模式:
// 未声明的变量在非严格模式下不会抛出错误  
var x = y; // y 未声明,但不会被报错

严格模式:
"use strict";  
// 严格模式下,未声明的变量会抛出错误  
var x = y; // ReferenceError: y is not defined
  1. 变量声明

在严格模式下,变量必须在使用之前声明。否则,会抛出引用错误。这有助于防止使用未声明的变量,从而减少潜在的错误(例子如下:)

javascript">非严格模式:
// 在使用变量之前未声明,在非严格模式下不会报错  
function example() {  
    x = 10;  
    var x;  
}
严格模式:
// 严格模式下,在使用变量之前未声明会抛出错误  
"use strict";  
function example() {  
    x = 10; // ReferenceError: x is not defined  
    var x;  
}
  1. 对象字面量

在严格模式下,重复的属性名称或参数名称在对象字面量或函数参数列表中会导致语法错误。这有助于捕获可能的错误和不一致性。(例子如下:)

javascript">// 非严格模式下,重复的属性名称不会抛出错误  
var obj = {  
    a: 1,  
    a: 2  
};  
console.log(obj.a); // 输出 2
  
// 严格模式下,重复的属性名称会抛出错误  
"use strict";  
var obj = {  
    a: 1,  
    a: 2 // SyntaxError: Duplicate data property in object literal not allowed in strict mode  
};
  1. 函数声明

在严格模式下,函数声明必须在代码块的顶部,否则会导致语法错误。这有助于保持代码的可读性和一致性。(例子如下:)

javascript">非严格模式下,函数声明可以在代码块中间  
if (true) {  
    function example() {  
        console.log("Hello");  
    }  
}  
example(); // 输出 "Hello"

严格模式下,函数声明必须在代码块顶部  
"use strict";  
if (true) {  
    function example() { // SyntaxError: Function declaration not allowed in strict mode  
        console.log("Hello");  
    }  
}
  1. this 关键字

在严格模式下,this 关键字的值在函数调用时始终为 undefined(除非该函数是对象的方法)。这有助于减少关于 this 关键字行为的混淆。(例子如下:)

javascript">非严格模式下,函数内的this可能不指向全局对象  
function example() {  
    console.log(this);  
}  
example(); // 输出全局对象,通常是 window

严格模式下,函数内的this在函数调用时始终为undefined  
"use strict";  
function example() {  
    console.log(this); // undefined  
}  
example();
  1. 删除变量、函数和函数参数

在严格模式下,尝试删除变量、函数或函数参数会抛出错误。这有助于防止意外地修改代码的状态。(例子如下:)

javascript">非严格模式下,可以删除变量  
var x = 10;  
delete x; // 在非严格模式下不会抛出错误,但x仍然存在

严格模式下,尝试删除变量会抛出错误  
"use strict";  
var x = 10;  
delete x; // TypeError: Cannot delete property 'x' of #<Object>
  1. 八进制字面量

在严格模式下,八进制字面量会导致语法错误。这有助于防止使用可能导致混淆的八进制表示法。(例子如下:)

javascript">非严格模式下,八进制字面量有效  
var num = 010; // 等于 8

严格模式下,八进制字面量会抛出错误  
"use strict";  
var num = 010; // SyntaxError: Octal literals are not allowed in strict mode.
  1. eval() 函数

在严格模式下,eval() 函数的作用域限制在调用它的函数内部,而不是全局作用域。这有助于减少 eval() 函数可能带来的安全风险。(例子如下:)

javascript">非严格模式下,eval() 的作用域是全局作用域  
var x = 20;  
function testEval() {  
    var x = 10;  
    eval("console.log(x);"); // 输出 20,因为使用的是全局变量 x  
}  
testEval();

严格模式下,eval() 的作用域限制在调用它的函数内部 
"use strict";   
var x = 20;  
function testEval() {  
    var x = 10;  
    eval("console.log(x);"); // 输出 10,因为使用的是函数内部的 x  
}  
testEval();

http://www.niftyadmin.cn/n/5400469.html

相关文章

MFC教程 -- Windows界面开发

MFC教程 -- Windows界面开发 Windows消息机制 初步认识MFC 要想熟练掌握 Windows 应用程序的开发&#xff0c; 首先需要理解 Windows 平台下程序运行的内部机制。如果想要更好的学习掌握 MFC&#xff0c;必须要先了解Windows 程序的内部运行机制&#xff0c;为我们扫清学习路…

Opencv实战(5)平滑处理与常见函数

平滑处理 Opencv实战&#xff1a; Opencv(1)读取与图像操作 Opencv(2)绘图与图像操作 Opencv(3)详解霍夫变换 Opencv(4)详解轮廓 文章目录 平滑处理1.均值滤波2.方框滤波3.高斯滤波4.中值滤波5.双边滤波 常见函数(1).createTrackbar()(2).SetMouseCallback() 图像的平滑处理是…

《互联网的世界》第三讲-tcp

dns 找到了地址&#xff0c;spf 确定了路径&#xff0c;如何运输数据呢&#xff1f;今天讲 tcp。 计算机网络领域的特定技术是最后当你干这个事时才要用的&#xff0c;我对孩子们这样说&#xff0c;实际上你可以随便看一个快递单子来理解端到端传输协议。 源地址&#xff0c…

使用Docker搭建一款实用的个人IT工具箱——It-Tools

作为程序员&#xff0c;在日常工作中&#xff0c;需要借助一些工具来提高我们工作效率&#xff0c;IT-Tools是为开发人员度身打造的一套便捷在线工具。它提供全面功能&#xff0c;使开发者能以更高效方式完成任务。经由IT-Tools&#xff0c;开发人员能轻松应对各类技术挑战&…

关于音频编码标准AAC,Opus,MP3的概念、原理、优缺点

音频编码标准是用于压缩数字音频数据的技术规范&#xff0c;以减少存储和传输所需的带宽。以下是关于AAC、Opus和MP3这些音频编码标准的概念、原理、优缺点的简要描述&#xff1a; AAC (Advanced Audio Coding) 概念&#xff1a; AAC是一种音频编码标准&#xff0c;由MPEG-2和…

每日一题——LeetCode1556.千位分隔符

方法一 个人方法&#xff1a; 把n转为字符串&#xff0c;逆序遍历n&#xff0c;把n的每个元素加入res&#xff0c;每三次加入.&#xff0c;最后将res翻转再转为字符串即为符合题目要求的结果 var thousandSeparator function(n) {nlet res[],lenn.length-1for(let ilen;i>…

自动化测试摸索:python+selenium+pytest(持续更新.....)

一、环境搭建 1、python 安装 下载链接&#xff1a;Python Releases for Windows | Python.org 自己选择合适的版本下载 当下载完毕时&#xff0c;找到该安装程序&#xff1a;python-3.12.2-amd64.exe文件&#xff0c;双击启动安装向导。 为了防止C:盘文件因系统故障或者无…

【C# 】进度条控件 ProgressBar 使用

进度条控件ProgressBar控件&#xff0c;一般作为UI界面表示某个事情进行到某个程度的外观的体现。 那么进度条控件ProgressBar控件&#xff0c;在form中是怎么使用的呢&#xff1f; 该控件必须要用的属性如下&#xff1a; private System.Windows.Forms.ProgressBar progressB…