首頁 >web前端 >前端問答 >eval是es6中的方法嗎

eval是es6中的方法嗎

WBOY
WBOY原創
2022-08-30 17:16:021754瀏覽

eval不是es6中的方法;該方法是JavaScript中的,用於計算JavaScript字串,並將字串當作腳本程式碼來執行,如果傳入的字串是表達式則傳回表達式求值結果,否則回傳undefined,語法為「eval(string)」。

eval是es6中的方法嗎

本教學操作環境:windows10系統、ECMAScript 6.0版本、Dell G3電腦。

eval不是es6中的方法

eval() 函數計算 JavaScript 字串,並把它當作腳本程式碼來執行。

如果參數是一個表達式,eval() 函數會執行表達式。如果參數是Javascript語句,eval()就會執行 Javascript 語句。

eval() 函數會將傳入的字串當作 JavaScript 程式碼執行,如果傳入的字串是表達式則傳回表達式求值結果,否則傳回 undefined 。

描述

  • 如果傳入 eval() 的參數不是字串,則會直接傳回該參數。

  • 非嚴格模式下直接呼叫eval() 時,裡面使用var 宣告的變數和使用function 宣告的函數會修改目前詞法作用域,裡面使用let 和const 宣告的變數不會修改目前詞法作用域,但會在目前建立新的詞法作用域。

  • 非嚴格模式下間接引用eval() 時,會直接運行在全域環境中,裡面使用var 宣告的變數和使用function 宣告的函數會修改全域詞法作用域,裡面使用let 和const 宣告的變數不會修改全域詞法作用域,但會在全域環境建立新的詞法作用域。

  • 嚴格模式下直接呼叫的 eval() 時,會在目前建立一個新的獨立的詞法作用域。

  • 嚴格模式下間接引用的eval() 時(只有在eval() 內的字串裡面開啟嚴格模式時,字串才會以嚴格模式執行),會在全域環境建立一個新的獨立的詞法作用域。

  • 使用 window.eval() 等同於間接引用 eval() 。

  • eval() 中執行的程式碼只能呼叫JS 解釋器(Interpreter)來解釋執行,無法被即時編譯器(JIT Compiler)優化, eval() 中的執行的程式碼可能會導致JS 引擎在已經產生的機器程式碼中進行變數查找和賦值,帶來效能問題。

  • eval() 使用不當可能會導致裡面執行的字串容易遭受惡意修改,帶來安全問題(例如 XSS 攻擊)。

  • 使用 eval() 會幹擾程式碼壓縮工具的行為。程式碼壓縮工具一般會將局部變數名稱重新命名為更短的變數名稱(如 a 和 b 等),以便減少程式碼體積。當使用了 eval() 時,由於外部的局部變數可能會被 eval() 存取到,程式碼壓縮工具便不會對可能會被 eval() 存取到的局部變數名稱進行壓縮,會降低程式碼壓縮率。

語法

eval(string)

#範例如下:

<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>123</title>
</head>
<body>
<script>
eval("x=10;y=20;document.write(x*y)");
document.write("<br>" + eval("2+2"));
document.write("<br>" + eval(x+17));
</script>
</body>
</html>

輸出結果:

eval是es6中的方法嗎

【相關推薦:javascript影片教學web前端

以上是eval是es6中的方法嗎的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn