日韩成人免费在线_国产成人一二_精品国产免费人成电影在线观..._日本一区二区三区久久久久久久久不

當前位置:首頁 > 科技  > 軟件

盤點JavaScript中Eval函數的使用方法

來源: 責編: 時間:2024-07-11 17:31:16 682觀看
導讀一、前言內建函數 eval 函數允許執行一個代碼字符串。語法 :let result = eval(code);例 :let code = 'alert("Hello")';eval(code); // Hello運行結果:代碼字符串可能會比較長,包含換行符、函數聲明和變量等。eval 的結

一、前言

內建函數 eval 函數允許執行一個代碼字符串。Bpn28資訊網——每日最新資訊28at.com

語法 :

let result = eval(code);

例 :Bpn28資訊網——每日最新資訊28at.com

let code = 'alert("Hello")';eval(code); // Hello

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

代碼字符串可能會比較長,包含換行符、函數聲明和變量等。Bpn28資訊網——每日最新資訊28at.com

eval 的結果是最后一條語句的結果。Bpn28資訊網——每日最新資訊28at.com

例:Bpn28資訊網——每日最新資訊28at.com

let value = eval('1+1');alert(value); // 2let value = eval('let i = 0; ++i');alert(value); // 1

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

eval 內的代碼在當前詞法環境(lexical environment)中執行,因此它能訪問外部變量:Bpn28資訊網——每日最新資訊28at.com

let a = 1;function f() {   let a = 2;  eval('alert(a)');   // 2}  f();

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

它也可以更改外部變量:Bpn28資訊網——每日最新資訊28at.com

let x = 5;eval("x = 10");alert(x); // 10,值被更改了

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

嚴格模式下,eval 有屬于自己的詞法環境。因此不能從外部訪問在 eval 中聲明的函數和變量:Bpn28資訊網——每日最新資訊28at.com

// 提示:本教程所有可運行的示例都默認啟用了嚴格模式 'use strict'eval("let x = 5; function f() {}");alert(typeof x); // undefined(沒有這個變量)// 函數 f 也不可從外部進行訪問

如果不啟用嚴格模式,eval 沒有屬于自己的詞法環境,因此可以從外部訪問變量 x 和函數 f。Bpn28資訊網——每日最新資訊28at.com

二、案例

Eval-計算器

創建一個計算器,提示用戶輸入一個算術表達式,并返回其計算結果。Bpn28資訊網——每日最新資訊28at.com

讓使用 eval 來計算數學表達式:Bpn28資訊網——每日最新資訊28at.com

let expr = prompt("Type an arithmetic expression?", '23+2');alert( eval(expr) );

需要檢查表達式是否正確。只需要計算并返回結果。用戶可以輸入任意文本或代碼。Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

三、使用 “eval”

在 eval 中使用外部局部變量也被認為是一個壞的編程習慣,因為這會使代碼維護變得更加困難。Bpn28資訊網——每日最新資訊28at.com

有兩種方法可以完全避免此類問題。Bpn28資訊網——每日最新資訊28at.com

如果 /eval/ 中的代碼,+沒有使用外部變量,請以 window./eval(...) 的形式調用 /eval/。Bpn28資訊網——每日最新資訊28at.com

通過這種方式,該代碼便會在全局作用域內執行:Bpn28資訊網——每日最新資訊28at.com

let x = 1;{  let x = 5;  window.eval('alert(x)'); // 1(全局變量)}

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

如果 /eval/ 中的代碼需要訪問局部變量,可以使用 new Function 替代 /eval/,并將它們作為參數傳遞:Bpn28資訊網——每日最新資訊28at.com

let f = new Function('a', 'alert(a)');f(5); // 5

運行結果:Bpn28資訊網——每日最新資訊28at.com

Bpn28資訊網——每日最新資訊28at.com

注:Bpn28資訊網——每日最新資訊28at.com

new Function 從字符串創建一個函數,并且也是在全局作用域中的。所以它無法訪問局部變量。Bpn28資訊網——每日最新資訊28at.com

四、總結

本文基于JavaScript基礎,介紹了 Eval函數的使用。調用 eval(code) 會運行代碼字符串,并返回最后一條語句的結果。Bpn28資訊網——每日最新資訊28at.com

要在全局作用域中 eval 代碼,可以使用 window.eval(code) 進行替代。Bpn28資訊網——每日最新資訊28at.com

通過案例的分析,進行詳細的講解。在實際應用中需要注意的點,遇到的難點,提供了詳細的解決方法。使用JavaScript語言,能夠讓讀者更好的理解。代碼很簡單,希望能夠幫助讀者更好的學習。Bpn28資訊網——每日最新資訊28at.com

本文鏈接:http://www.www897cc.com/showinfo-26-100461-0.html盤點JavaScript中Eval函數的使用方法

聲明:本網頁內容旨在傳播知識,若有侵權等問題請及時與本網聯系,我們將在第一時間刪除處理。郵件:2376512515@qq.com

上一篇: Python 數據類型(如整數、浮點數、字符串、列表、元組、字典)

下一篇: 一文帶您理解Python的map/filter/reduce

標簽:
  • 熱門焦點
  • Find N3入網:最高支持16+1TB

    OPPO將于近期登場的Find N3折疊屏目前已經正式入網,型號為PHN110。本次Find N3在外觀方面相比前兩代有很大的變化,不再是小號的橫向折疊屏,而是跟別的廠商一樣采用了較為常見的
  • K60至尊版剛預熱 一加Ace2 Pro正面硬剛

    Redmi這邊剛如火如荼的宣傳了K60 Ultra的各種技術和硬件配置,作為競品的一加也坐不住了。一加中國區總裁李杰發布了兩條微博,表示在自家的一加Ace2上早就已經采用了和PixelWo
  • Mate60手機殼曝光 致敬自己的經典設計

    8月3日消息,今天下午博主數碼閑聊站帶來了華為Mate60的第三方手機殼圖,可以讓我們在真機發布之前看看這款華為全新旗艦的大致輪廓。從曝光的圖片看,Mate 60背后攝像頭面積依然
  • 帥氣純真少年!日本最帥初中生選美冠軍出爐

    日本第一帥哥初一生選美大賽冠軍現已正式出爐,冠軍是來自千葉縣的宗田悠良。日本一直熱衷于各種選美大賽,從“最美JK”起到“最美女星&r
  • 三分鐘白話RocketMQ系列—— 如何發送消息

    我們知道RocketMQ主要分為消息 生產、存儲(消息堆積)、消費 三大塊領域。那接下來,我們白話一下,RocketMQ是如何發送消息的,揭秘消息生產全過程。注意,如果白話中不小心提到相關代
  • 從零到英雄:高并發與性能優化的神奇之旅

    作者 | 波哥審校 | 重樓作為公司的架構師或者程序員,你是否曾經為公司的系統在面對高并發和性能瓶頸時感到手足無措或者焦頭爛額呢?筆者在出道那會為此是吃盡了苦頭的,不過也得
  • 小米汽車電池信息疑似曝光:容量101kWh,支持800V高壓快充

    7月14日消息,今日一名博主在社交媒體發布了一張疑似小米汽車電池信息的照片,顯示該電池包正是寧德時代麒麟電池,容量為101kWh,電壓為726.7V,可以預測小
  • 8月見!小米MIX Fold 3獲得3C認證:支持67W快充

    這段時間以來,包括三星、一加、榮耀等等有不少品牌旗下的最新折疊屏旗艦都得到了不少爆料,而小米新一代折疊屏旗艦——小米MIX Fold 3此前也屢屢被傳
  • 信通院:小米、華為等11家應用商店基本完成APP簽名及驗簽工作

    中國信通院表示,目前,小米、華為、OPPO、vivo、360手機助手、百度手機助手、應用寶、豌豆莢和努比亞等9家應用商店,以及抖音和快手2家新型應用分發平
Top 主站蜘蛛池模板: 黄山市| 库车县| 泰安市| 吴江市| 洛川县| 弋阳县| 澄城县| 云南省| 塔河县| 宁夏| 谢通门县| 电白县| 永修县| 长治市| 凭祥市| 蓝山县| 德令哈市| 青冈县| 松溪县| 锦州市| 五大连池市| 龙陵县| 武夷山市| 库车县| 中江县| 滨海县| 龙门县| 惠州市| 丰台区| 金阳县| 莲花县| 宣恩县| 临夏县| 金阳县| 郑州市| 久治县| 芜湖市| 兰西县| 海口市| 南宫市| 新泰市|