JavaScript eval()函數(shù)定義及使用方法詳解
定義和用法
eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼。
語(yǔ)法
eval(string)
返回值
通過(guò)計(jì)算 string 得到的值(如果有的話(huà))。
說(shuō)明
該方法只接受原始字符串作為參數(shù),如果 string 參數(shù)不是原始字符串,那么該方法將不作任何改變地返回。因此請(qǐng)不要為 eval() 函數(shù)傳遞 String 對(duì)象來(lái)作為參數(shù)。
如果試圖覆蓋 eval 屬性或把 eval() 方法賦予另一個(gè)屬性,并通過(guò)該屬性調(diào)用它,則 ECMAScript 實(shí)現(xiàn)允許拋出一個(gè) EvalError 異常。
拋出
如果參數(shù)中沒(méi)有合法的表達(dá)式和語(yǔ)句,則拋出 SyntaxError 異常。
如果非法調(diào)用 eval(),則拋出 EvalError 異常。
如果傳遞給 eval() 的 Javascript 代碼生成了一個(gè)異常,eval() 將把該異常傳遞給調(diào)用者。
舉例
以下代碼可以將"alert('Hello world')"字符串作為參數(shù),轉(zhuǎn)化成javaScprit代碼進(jìn)行執(zhí)行,瀏覽器彈出提示框輸出'Hello world'
<script type="text/javascript"> var a = "alert('Hello world')" eval(a) </script>
eval()函數(shù)非常強(qiáng)大,我認(rèn)為它在一定程度上體現(xiàn)出了javaScript這種動(dòng)態(tài)語(yǔ)言的優(yōu)點(diǎn)。
用這個(gè)函數(shù),開(kāi)發(fā)者可以在不改變第三方前端javaScript庫(kù)源碼的基礎(chǔ)上,增加功能,或者修改功能,使得程序變得更為靈活。
比如我正在開(kāi)發(fā)一個(gè)動(dòng)態(tài)表格的小系統(tǒng),后臺(tái)程序?qū)⒈碇械乃凶侄危约八袛?shù)據(jù)傳遞給前端,前端javaScript代碼接收到數(shù)據(jù)以后,根據(jù)字段自動(dòng)生成表格。但我正在用第三方(layui)js框架,框架里渲染表格的代碼必須是固定寫(xiě)好的,不符合動(dòng)態(tài)生成需求,這個(gè)時(shí)候,可以使用eval()函數(shù)。
下面簡(jiǎn)單看一下layui框架表格部分的使用說(shuō)明
表頭部分需要在javaScript代碼中固定對(duì)應(yīng)寫(xiě)好,接收到指定數(shù)據(jù)接口的數(shù)據(jù)再生成表格。
如果每次需要的表格的字段都不同,列數(shù)都不一樣。那么就可用eval()函數(shù)拼接代碼實(shí)現(xiàn)了。大致實(shí)現(xiàn)思路是,ajax請(qǐng)求到表頭的相關(guān)數(shù)據(jù),javaScript代碼根據(jù)這些數(shù)據(jù)自動(dòng)生成符合框架要求的代碼語(yǔ)句,然后傳遞到eval()函數(shù)中直接調(diào)用就可以了。非常的靈活與方便。
比如以下偽代碼
<script> var code1 = "layui.use('table', function(){var table = layui.table;table.render({elem: '#demo',height: 312,url: '/demo/table/user/',page: true,cols: [[{" // ...這里根據(jù)接收到的表各個(gè)字段信息自動(dòng)拼接代碼,形成字符串 code2 var code2 = "field: 'id', title: 'ID', width:80, sort: true, fixed: 'left'},{field: 'username', title: '用戶(hù)名', width:80},{field: 'sex', title: '性別', width:80, sort: true},{field: 'city', title: '城市', width:80},{field: 'sign', title: '簽名', width: 80},{field: 'experience', title: '積分', width: 80, sort: true},{field: 'score', title: '評(píng)分', width: 80, sort: true},{field: 'classify', title: '職業(yè)', width: 80},{field: 'wealth', title: '財(cái)富', width: 135, sort: false" var code3 = "}]]});});" var code = code1 + code2 + code3 eval(code) </script>
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
JavaScript設(shè)計(jì)模式之職責(zé)鏈模式
這篇文章主要介紹了JavaScript設(shè)計(jì)模式之職責(zé)鏈模式,對(duì)設(shè)計(jì)模式感興趣的同學(xué),可以參考下2021-04-04JS獲取中文拼音首字母并通過(guò)拼音首字母快速查找頁(yè)面內(nèi)對(duì)應(yīng)中文內(nèi)容的方法【附demo源碼】
這篇文章主要介紹了JS獲取中文拼音首字母并通過(guò)拼音首字母快速查找頁(yè)面內(nèi)對(duì)應(yīng)中文內(nèi)容的方法,涉及javascript針對(duì)字符串的遍歷、查找、正則匹配及轉(zhuǎn)換等操作技巧,并附帶完整demo源碼供讀者下載參考,需要的朋友可以參考下2016-08-08JavaScript實(shí)現(xiàn)背景自動(dòng)切換小案例
這篇文章主要為大家詳細(xì)介紹了JavaScript實(shí)現(xiàn)背景自動(dòng)切換小案例,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-09-09JavaScript整除運(yùn)算函數(shù)ceil和floor的區(qū)別分析
這篇文章主要介紹了JavaScript整除運(yùn)算函數(shù)ceil和floor的區(qū)別分析,實(shí)例分析了ceil和floor函數(shù)的使用技巧,非常具有實(shí)用價(jià)值,需要的朋友可以參考下2015-04-04分享Bootstrap簡(jiǎn)單表格、表單、登錄頁(yè)面
本文給大家分享Bootstrap簡(jiǎn)單表格、表單、登錄頁(yè)面的實(shí)例代碼,非常不錯(cuò),具有參考借鑒價(jià)值,需要的的朋友參考下吧2017-08-08談?wù)勎覍?duì)JavaScript DOM事件的理解
DOM與事件是JavaScript最核心的組成部分之一,他們賦予了頁(yè)面無(wú)限的想象空間,你根本無(wú)法離開(kāi)他們,否則js將寸步難行。本文給大家分享我對(duì)javascript dom事件的了解,對(duì)javascript dom事件相關(guān)知識(shí)感興趣的朋友一起學(xué)習(xí)吧2015-12-12Javascript表格翻頁(yè)效果的具體實(shí)現(xiàn)
表格翻頁(yè)的實(shí)現(xiàn)方式有很多,下面以js為例為大家詳細(xì)介紹下表格翻頁(yè)效果的具體實(shí)現(xiàn),感興趣的朋友可不要錯(cuò)過(guò)2013-10-10基于JavaScript實(shí)現(xiàn)瀏覽器添加收藏功能
今天搞項(xiàng)目的時(shí)候?yàn)榱藢?shí)現(xiàn)瀏覽者實(shí)現(xiàn)添加收藏的功能,特地了解了一下相關(guān)的API,整理了一段代碼幫助大家實(shí)現(xiàn)瀏覽器添加收藏功能,感興趣的朋友跟隨小編一起看看吧2023-02-02基于JavaScript實(shí)現(xiàn)高德地圖和百度地圖提取行政區(qū)邊界經(jīng)緯度坐標(biāo)
本文給大家介紹javascript實(shí)現(xiàn)高德地圖和百度地圖提取行政區(qū)邊界經(jīng)緯度坐標(biāo)的相關(guān)知識(shí),本文實(shí)用性非常高,代碼簡(jiǎn)單易懂,需要的朋友參考下吧2016-01-01