javascript 的eval()和with是干嘛的

原來JavaScript 中的eval() 和 with 是兩個強大的功能,但同時它們也具有潛在風險的特性,所以謹慎使用。

首先說說eval() 函數:

它接收一個字符串參數,并將其作為 JavaScript 代碼來解析和執行。

這意味著你可以使用 eval() 動態地執行任何 JavaScript 代碼。

eval() 有兩個用處:

  1. 動態代碼執行:當你需要根據某些條件或用戶輸入動態生成和執行代碼時,可以使用 eval()。
  2. JSON 解析:在早期的 JavaScript 版本中,沒有內置的 JSON 解析器,因此 eval() 常被用來解析 JSON 字符串。但現在,更推薦使用 JSON.parse() 方法來解析 JSON 數據。
列如:
let expression = "2 + 3 * 4";  
try {  let result = eval(expression);  console.log(result); // 輸出:14  
} catch (error) {  console.error("執行表達式時出錯:", error);  
}let Json = {'name': 'zhangsan','age': 18};
try {  let result = eval(Json );  console.log(result); // 輸出:{name: 'zhangsan', age: 18}
} catch (error) {  console.error("執行表達式時出錯:", error);  
}

存在三個問題:

  1. 安全風險:使用 eval() 可能導致嚴重的安全問題,因為它允許執行任何代碼。如果傳遞給 eval() 的字符串來自不可信的來源(如用戶輸入),那么惡意代碼可能會被執行。
  2. 性能問題:eval() 通常比常規的 JavaScript 代碼執行更慢,因為它需要解析字符串并執行代碼。
  3. 調試困難:使用 eval() 執行的代碼可能會使錯誤調試更加困難,因為它可能涉及多個文件或位置。


with 語句
它用于臨時擴展一個對象的屬性,使這些屬性可以在語句塊中像局部變量一樣被訪問。

with的作用

簡化代碼:當你需要頻繁訪問一個對象的多個屬性時,with 可以簡化代碼,避免重復寫出對象名。

列如:
let obj = {  x: 10,  y: 20,  z: 30  
};  
with (obj) {  console.log(x); // 10  console.log(y); // 20  console.log(z); // 30  
}

存在問題:

  1. 作用域污染:with 語句會改變代碼塊中的變量查找方式,這可能導致意外的命名沖突和難以追蹤的錯誤。
  2. 性能問題:with 語句在執行時通常比普通的屬性訪問更慢,因為它需要查找和解析對象的屬性。

!!!所以不推薦使用with 語句:在現代 JavaScript 開發中,with 語句的使用已經大大減少,通常建議避免使用它。
with 語句并不推薦使用,因為它可能導致代碼難以閱讀和維護,并且可能會影響性能。
在嚴格模式下,with 語句是禁止的。

替代它的方法:

如果你只是想要簡化對象的屬性訪問,可以考慮使用 ES6 的解構賦值功能。

let { x, y, z } = obj;  
console.log(x); // 10  
console.log(y); // 20  
console.log(z); // 30

the end

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/718042.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/718042.shtml
英文地址,請注明出處:http://en.pswp.cn/news/718042.shtml

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

相關文章

《Scratch等級認證CCF-GESP真題解析》專欄總目錄

?? 專欄名稱:《Scratch等級認證CCF-GESP真題解析》 ?? 專欄介紹:中國計算機學會GESP《CCF編程能力等級認證》Scratch圖形化編程(1~4級)歷屆真題解析。 ?? 訂閱專欄:訂閱后可閱讀專欄內所有真題解析,真題持續更新中,限時9.9元,歡迎訂閱! Scratch圖形化編程一級 序…

2368. 受限條件下可到達節點的數目

2368. 受限條件下可到達節點的數目 題目鏈接:2368. 受限條件下可到達節點的數目 代碼如下: //深度優先遍歷 //參考:https://leetcode.cn/problems/reachable-nodes-with-restrictions/solutions/2662538/shu-shang-dfspythonjavacgojsrust-…

C++自學精簡實踐教程

一、介紹 1.1 教程特點 一篇文章從入門到就業有圖有真相,有測試用例,有作業;提供框架代碼,作業只需要代碼填空規范開發習慣,培養設計能力 1.2 參考書 唯一參考書《C Primer 第5版》?參考書下載: 藍奏云…

Acwing---3777. 磚塊

磚塊 1.題目2.基本思想3.代碼實現 1.題目 n 個磚塊排成一排,從左到右編號依次為 1~n。 每個磚塊要么是黑色的,要么是白色的。 現在你可以進行以下操作若干次(可以是 0 次): 選擇兩個相鄰的磚塊,反轉它…

STL——stack

目錄 stack stack都有哪些接口 模擬實現一個stack stack 1. stack是一種容器適配器,專門用在具有后進先出操作的上下文環境中,其刪除只能從容器的一端進行元素的插入與提取操作。 2. stack是作為容器適配器被實現的,容器適配器即…

數據分析-Pandas數據的畫圖設置

數據分析-Pandas數據的畫圖設置 數據分析和處理中,難免會遇到各種數據,那么數據呈現怎樣的規律呢?不管金融數據,風控數據,營銷數據等等,莫不如此。如何通過圖示展示數據的規律? 數據表&#x…

春招!啟動了

大家好,我是洋子。今年的春招很多企業已經開始招聘了,像美團今年繼續發力,24屆春招以及25屆暑期轉正實習一共招聘4000人。另外,阿里,京東,順豐等公司也已經開始春招,可以說招聘的號角已經正式吹…

GO語言學習筆記(與Java的比較學習)(十)

錯誤處理與測試 Go 沒有像 Java 和 .NET 那樣的 try/catch 異常機制:不能執行拋異常操作。但是有一套 defer-panic-and-recover 機制 錯誤處理 Go 有一個預先定義的 error 接口類型 type error interface {Error() string } errors 包中有一個 errorString 結構…

十二、類與聲明

類與聲明 什么是類? 前情總結 前面22講的課基本上就做了兩件事 學習C#的基本元素學習類的成員 析構函數: 當對象不再被引用的時候,就會被垃圾回收器gc,回收。而收回的過程當中,如果需要做什么事情,就放在…

遠程調用--Http Interface

遠程調用--Http Interface 前言1、導入依賴2、定義接口3 創建代理&測試4、創建成配置變量 前言 這個功能是spring boot6提供的新功能,spring允許我們通過自定義接口的方式,給任意位置發送http請求,實現遠程調用,可以用來簡化…

已解決org.springframework.dao.DataRetrievalFailureException數據檢索失敗異常的正確解決方法,親測有效!!!

已解決org.springframework.dao.DataRetrievalFailureException數據檢索失敗異常的正確解決方法,親測有效!!! 目錄 問題分析 出現問題的場景 報錯原因 解決思路 解決方法 總結 在使用Spring Framework進行數據庫操作時&…

關于硅金屬電阻器?

EAK金屬硅電阻器類似于陶瓷復合電阻器,在脈沖負載方面具有優勢,需要高峰值功率或高電壓與低電感(如預充電電路)的組合。硅金屬電阻器具有更高的連續額定溫度,為 350C,而陶瓷電阻器為 250C。這種擴展的溫度范…

[藍橋杯 2023 省 B] 冶煉金屬

P9240 [藍橋杯 2023 省 B] 冶煉金屬 - 洛谷 | 計算機科學教育新生態 (luogu.com.cn) 參考題解: #C3150——藍橋杯2023年第十四屆省賽真題-冶煉金屬(分塊)-Dotcpp編程社區 https://www.bilibili.com/video/BV1wc411x7KU/?spm_id_from333.1007.top_right_bar_windo…

RT-Thread操作系統 串口DMA接收時數據被拆分多包

一、問題現象 在使用RT Thread操作系統,串口DMA接收數據時,通過log打印發現,例如GPS NEMA數據一包數據量較大或者時,接收到的數據被拆分多包處理; 二、問題解決方案 修改DMA驅動程序 在drivers/drv_usart.c中屏蔽如…

板子合集1.0

版權聲明:本文為博主原創文章,遵循 CC 4.0 BY-SA 版權協議,轉載請附上原文出處鏈接和本聲明。 原文鏈接:https://blog.csdn.net/JK01WYX/ 文章目錄 1.快速冪板子2.gcd得最大公約數3.堆優化的dijkstra板子4.線段樹1板子 區間加線段…

中綴表達式轉換逆波蘭式(后綴表達式)

算法思路來自于王道的數據結構 #include <iostream> #include <stack> #include <map>using namespace std; string eq; stack<char> op; string rst ""; map<char, int> dict;// 獲取優先級 int getPrio(char op) {if (op )return …

【Dubbo專欄 01 】深入探索:dubbo的架構是什么?

文章目錄 Dubbo&#xff1a;深入解析分布式服務框架的核心概念與實現01 Dubbo簡介02 Dubbo核心概念2.1 服務提供者&#xff08;Provider&#xff09;2.2 服務消費者&#xff08;Consumer&#xff09;2.3 注冊中心&#xff08;Registry&#xff09;2.4 負載均衡&#xff08;Load…

如何對用OpenCV開發的API進行測試 (Google Test 版本)

如何對用OpenCV開發的API進行測試 &#xff08;Google Test 版本&#xff09; 如何對用OpenCV開發的API進行測試斷言介紹斷言基礎的斷言數值比較字符串比較 如何對用OpenCV開發的API進行測試 假設你想測試一個使用OpenCV開發的圖像處理API&#xff0c;例如一個圖像濾波函數。以…

SWC Runnable

runnable概念 runnable是編寫應用程序行為邏輯的 SWC 的一部分。Runnable 類似于 C 中的函數,類似RTOS中的task,程序運行的實體,swc的靈魂。在 AUTOSAR 中,我們在配置期間在 SWC 中創建 Runnable,并且 在 SWC 的相應源文件中生成Runnable 或函數骨架。骨架函數的名稱與我…

【硬件工程師面經整理15_低通/高通/帶通濾波器】

低通/高通/帶通濾波器 1.1 低通濾波器1.2 高通濾波器1.3 帶通濾波器 1.1 低通濾波器 【定義】電感阻止高頻信號通過而允許低頻信號通過&#xff0c;電容的特性卻相反。信號能夠通過電感的濾波器、或者通過電容連接到地的濾波器對于低頻信號的衰減要比高頻信號小&#xff0c;稱…