javascript中使用‘use strict’和不使用的區別

  1. 錯誤處理:

嚴格模式使得 JavaScript 對某些可能的問題拋出錯誤,而在非嚴格模式下,這些問題可能會被忽略。例如,未聲明的變量(即全局變量)在非嚴格模式下會被隱式地創建為全局變量,而在嚴格模式下會拋出錯誤。(例子如下:)

非嚴格模式:
// 未聲明的變量在非嚴格模式下不會拋出錯誤  
var x = y; // y 未聲明,但不會被報錯嚴格模式:
"use strict";  
// 嚴格模式下,未聲明的變量會拋出錯誤  
var x = y; // ReferenceError: y is not defined
  1. 變量聲明

在嚴格模式下,變量必須在使用之前聲明。否則,會拋出引用錯誤。這有助于防止使用未聲明的變量,從而減少潛在的錯誤(例子如下:)

非嚴格模式:
// 在使用變量之前未聲明,在非嚴格模式下不會報錯  
function example() {  x = 10;  var x;  
}
嚴格模式:
// 嚴格模式下,在使用變量之前未聲明會拋出錯誤  
"use strict";  
function example() {  x = 10; // ReferenceError: x is not defined  var x;  
}
  1. 對象字面量

在嚴格模式下,重復的屬性名稱或參數名稱在對象字面量或函數參數列表中會導致語法錯誤。這有助于捕獲可能的錯誤和不一致性。(例子如下:)

// 非嚴格模式下,重復的屬性名稱不會拋出錯誤  
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. 函數聲明

在嚴格模式下,函數聲明必須在代碼塊的頂部,否則會導致語法錯誤。這有助于保持代碼的可讀性和一致性。(例子如下:)

非嚴格模式下,函數聲明可以在代碼塊中間  
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 關鍵字行為的混淆。(例子如下:)

非嚴格模式下,函數內的this可能不指向全局對象  
function example() {  console.log(this);  
}  
example(); // 輸出全局對象,通常是 window嚴格模式下,函數內的this在函數調用時始終為undefined  
"use strict";  
function example() {  console.log(this); // undefined  
}  
example();
  1. 刪除變量、函數和函數參數

在嚴格模式下,嘗試刪除變量、函數或函數參數會拋出錯誤。這有助于防止意外地修改代碼的狀態。(例子如下:)

非嚴格模式下,可以刪除變量  
var x = 10;  
delete x; // 在非嚴格模式下不會拋出錯誤,但x仍然存在嚴格模式下,嘗試刪除變量會拋出錯誤  
"use strict";  
var x = 10;  
delete x; // TypeError: Cannot delete property 'x' of #<Object>
  1. 八進制字面量

在嚴格模式下,八進制字面量會導致語法錯誤。這有助于防止使用可能導致混淆的八進制表示法。(例子如下:)

非嚴格模式下,八進制字面量有效  
var num = 010; // 等于 8嚴格模式下,八進制字面量會拋出錯誤  
"use strict";  
var num = 010; // SyntaxError: Octal literals are not allowed in strict mode.
  1. eval() 函數

在嚴格模式下,eval() 函數的作用域限制在調用它的函數內部,而不是全局作用域。這有助于減少 eval() 函數可能帶來的安全風險。(例子如下:)

非嚴格模式下,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.pswp.cn/news/711737.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/711737.shtml
英文地址,請注明出處:http://en.pswp.cn/news/711737.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

十一、 二進制位運算

描述 Python有位運算&#xff0c;是直接將數字看成二進制&#xff0c;直接對二進制數字的每一位進行運算。現輸入兩個十進制整數x、y&#xff0c;請計算它們的位與、位或&#xff0c;輸出按照十進制的形式。 輸入描述&#xff1a; 一行輸入兩個整數x、y&#xff0c;以空格間…

git:合并兩個不同倉庫的代碼

有兩個代碼倉庫&#xff1a;代碼倉庫A、代碼倉庫B&#xff0c;其中一個倉庫的代碼是為了新項目拉取的新分支&#xff0c;所以分支的部分修改歷史是相同的 現在要將代碼倉庫B 的代碼合并到代碼倉庫A 實現思路&#xff1a;分支合并 實現步驟&#xff1a; # 1、clone代碼倉庫A…

外匯天眼:ASIC 獲得針對前 Blockchain Global 董事的臨時出行限制令

澳大利亞證券與投資委員會&#xff08;ASIC&#xff09;已經針對前Blockchain Global Limited&#xff08;清算中&#xff09;董事梁國&#xff08;又名Allan Guo&#xff09;獲得了臨時旅行限制令。這些命令在其他方面&#xff0c;阻止郭先生在2024年8月20日或進一步命令之前離…

(done) 如何計算 Hessian Matrix 海森矩陣 海塞矩陣

參考視頻1&#xff1a;https://www.bilibili.com/video/BV1H64y1T7zQ/?spm_id_from333.337.search-card.all.click 參考視頻2&#xff08;正定矩陣&#xff09;&#xff1a;https://www.bilibili.com/video/BV1Ag411M76G/?spm_id_from333.337.search-card.all.click&vd_…

【JGit】 AddCommand 新增的文件不能添加到暫存區

執行git.add().addFilepattern(".").setUpdate(true).call() 。新增的文件不能添加到暫存區&#xff0c;為什么&#xff1f; 在 JGit 中&#xff0c;setUpdate(true) 方法用于在調用 AddCommand 的 addFilepattern() 方法時&#xff0c;將已跟蹤文件標記為需要更新。…

C語言基礎—習題及代碼(一)

1.讀取一個65到122之間的整型數&#xff0c;然后以字符形式輸出它&#xff0c;比如讀取了97&#xff0c;輸出字符a #include <stdio.h> int main(){int n;scanf("%d",&n);if(n>65 && n<122){printf("%c\n",n);} } 2.判斷某個年份…

windows安裝部署node.js以及搭建運行第一個Vue項目

一、官網下載安裝包 官網地址&#xff1a;https://nodejs.org/zh-cn/download/ 二、安裝程序 1、安裝過程 如果有C/C編程的需求&#xff0c;勾選一下下圖所示的部分&#xff0c;沒有的話除了選擇一下node.js安裝路徑&#xff0c;直接一路next 2、測試安裝是否成功 【winR】…

語義內核框架(Semantic Kernel)

語義內核框架-Semantic Kernel 首先看看官方描述&#xff1a;Semantic Kernel 是一個開源 SDK&#xff0c;可讓您輕松構建可以調用現有代碼的代理。作為高度可擴展的 SDK&#xff0c;可以將語義內核與來自 OpenAI、Azure OpenAI、Hugging Face 等的模型一起使用&#xff01;通…

vue3.4新特性:v-bind同名簡寫、defineModel

在上一篇 vue3.3 文章中&#xff0c;雖然寫了 defineModel &#xff0c;但并未考慮到寫的時候3.4版本里 defineModel 才作為穩定的API正式加入( 兩年沒看vue3 更新的內容了... )&#xff0c;并增加了對支持修飾符相關的內容&#xff1b; 基于此&#xff0c;如果在vue3.3的版本…

華為OD機試真題-智能成績表-2023年OD統一考試(C卷)---Python3--開源

題目&#xff1a; 考察內容&#xff1a; sort(雙排序&#xff09; if dict(keys;items()) 代碼&#xff1a; """ analyze:input: int n 學生人數&#xff1b; int m 科目數量 科目名稱&#xff08;不重復&#xff09; 人名(不會重名&#xff09; 科目成績 …

Python 在Word中查找并高亮指定文本

當你需要在長文檔或報告中快速找到特定的關鍵詞或短語&#xff0c;Word中提供的查找并高亮這一功能可以幫助你迅速定位這些內容。本文將介紹如何使用Python在Word中查找并突出顯示指定的文本。 所需工具&#xff1a;第三方庫 Spire.Doc for Python。該庫支持創建、編輯、轉換Wo…

vue處理響應式數據,是Proxy性能好?還是defineProperty性能好?

注&#xff1a;本文主要論證二者性能&#xff01;&#xff01;&#xff01; 首先&#xff0c;Proxy和defineProperty是兩種不同的機制&#xff0c;用于實現JavaScript的元編程&#xff08;metaprogramming&#xff09;功能。 defineProperty是ES5引入的一個特性&#xff0c;用于…

HDL FPGA 學習 - FPGA基本要素,開發流程,Verilog語法和規范、編寫技巧

目錄 Altera FPGA 基本要素 FPGA 開發流程和適用范圍 設計和實施規范 頂層設計的要點 Verilog HDL 語法規范 編寫規范 設計技巧 編輯整理 by Staok&#xff0c;始于 2021.2 且無終稿。轉載請注明作者及出處。整理不易&#xff0c;請多支持。 本文件是“瞰百易”計劃的…

SQL注入漏洞解析--less-6

1.第六關了。 2.這個和第五關有點像&#xff0c;只是換成了雙引號&#xff0c;接下來的都一樣&#xff0c;看我操作(換個函數試一下extractvalue&#xff0c;他的報錯位置在第二個&#xff0c;那我就利用一下) 3.爆庫名 ?id1"%20and%20extractvalue(1,concat(0x7e,(sele…

刷題日記 | 字符串擴容和增強型for循環

for(char c:s)遍歷字符串 增強型for循環 C for(char c:s)遍歷字符串 增強型for循環_c for (char c : s)-CSDN博客 字符串使用前要進行擴容 reserve函數 【CString類成員函數辨析】resize(),size(),capacity(),reserve()函數的解析與對比_c reserve函數-CSDN博客 a.size() 用來…

告警閃現后的故障排查

長期以來&#xff0c;醫院信息化運維中存在著科室復雜、應用場景多、終端運維工作量大、軟件系統兼容需求強等諸多痛點&#xff0c;且對技術設備的穩定性、連續性要求極高&#xff0c;在日常運維中&#xff0c;需要應對和解決這些問題來保障業務穩定、健康運行。 1、數據孤島 …

Centos6安裝PyTorch要求的更高版本gcc

文章目錄 CentOS自帶版本安裝gcc 4的版本1. 獲取devtoolset-8的yum源2. 安裝gcc3. 版本檢查和切換版本 常見問題1. 找不到包audit*.rpm包2. 找不到libcgroup-0.40.rc1-27.el6_10.x86_64.rpm 的包4. cc: fatal error: Killed signal terminated program cc1plus5. pybind11/pybi…

安達發|可視化APS高級排產系統實現精益制造

精益制造已經成為了一種重要的生產模式&#xff0c;它的目標是通過消除浪費&#xff0c;提高生產效率&#xff0c;以實現更高的質量和更低的成本。而可視化APS高級排產系統則是實現精益制造的重要工具。下面&#xff0c;我將從接單可視化、BOM工藝可視化、計劃與排程可視化、制…

[Android 13]Input系列--獲取觸摸窗口

[Android 13]Input系列–獲取觸摸窗口 hongxi.zhu 2023-7-25 Android 13 InputDispatcher::dispatchMotionLocked bool InputDispatcher::dispatchMotionLocked(nsecs_t currentTime, std::shared_ptr<MotionEntry> entry,DropReason* dropReason, nsecs_t* nextWakeupT…

【Flink精講】Flink性能調優:CPU核數與并行度

常見問題 舉個例子 提交任務命令&#xff1a; bin/flink run \ -t yarn-per-job \ -d \ -p 5 \ 指定并行度 -Dyarn.application.queuetest \ 指定 yarn 隊列 -Djobmanager.memory.process.size2048mb \ JM2~4G 足夠 -Dtaskmanager.memory.process.size4096mb \ 單個 TM2~8G 足…