簡(jiǎn)單來(lái)說(shuō)就是執(zhí)行js語(yǔ)句,只不過(guò)這里的js語(yǔ)句是一個(gè)字符串,一個(gè)可以任意拼接的字符串,但前提是這個(gè)字符串是可執(zhí)行的,例如:

成都創(chuàng)新互聯(lián)主營(yíng)余姚網(wǎng)站建設(shè)的網(wǎng)絡(luò)公司,主營(yíng)網(wǎng)站建設(shè)方案,App定制開(kāi)發(fā),余姚h5成都小程序開(kāi)發(fā)搭建,余姚網(wǎng)站營(yíng)銷推廣歡迎余姚等地區(qū)企業(yè)咨詢
function(){
var data;
eval("data="+"12");
//相當(dāng)于"data=12",這里是為了說(shuō)明"12"這個(gè)值可以是另一個(gè)變量,
//而這個(gè)變量的值的來(lái)歷則是你定的。
alert(data);
}
當(dāng)上面這個(gè)函數(shù)執(zhí)行的時(shí)候,頁(yè)面會(huì)彈出12的字樣,這說(shuō)明,寫在eval中的字符串被當(dāng)做一個(gè)賦值語(yǔ)句執(zhí)行了。
如果需要在頁(yè)面刷新的時(shí)候默認(rèn)執(zhí)行一次點(diǎn)擊事件,可以參考下面的方法實(shí)現(xiàn):
1、使用原生js實(shí)現(xiàn)
使用原生js主要用到了window.onload方法:
onload 事件會(huì)在頁(yè)面或圖像加載完成后立即發(fā)生。
語(yǔ)法:onload="SomeJavaScriptCode"
參數(shù)SomeJavaScriptCode是必須的規(guī)定該事件發(fā)生時(shí)執(zhí)行的 JavaScript。
實(shí)現(xiàn)代碼:
script
window.onload?=?function()?{
requestFullScreen();//直接執(zhí)行onclick中的函數(shù)就行
}
/script
將代碼放到body標(biāo)簽最下面即可。
2、使用Jquery實(shí)現(xiàn)
使用jquery實(shí)現(xiàn)該效果主要用到了jquery.ready(fn)和jquery.trigger()方法:
jquery.ready(fn):當(dāng)DOM載入就緒可以查詢及操縱時(shí)綁定一個(gè)要執(zhí)行的函數(shù)。
jquery.trigger(type,[data]):在每一個(gè)匹配的元素上觸發(fā)某類事件。
實(shí)現(xiàn)代碼:
$(function()?{
$("#sdsd").trigger("click");//觸發(fā)button的click事件
});
JavaScript eval() 函數(shù)
JavaScript 全局對(duì)象
定義和用法:
eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼。
語(yǔ)法:
eval(string)
返回值:
通過(guò)計(jì)算 string 得到的值(如果有的話)。
說(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)用者。
擴(kuò)展資料:
調(diào)用eval函數(shù)的三種情況:
1、直接調(diào)用
直接調(diào)用時(shí),eval函數(shù)相關(guān)的執(zhí)行環(huán)境屬性ThisBinding,LexicalEnvironment,VariableEnvironment的值如下:
a) ThisBinding是調(diào)用eval函數(shù)時(shí),調(diào)用方執(zhí)行環(huán)境的ThisBinding
b) LexicalEnvironment是調(diào)用eval函數(shù)時(shí),調(diào)用方執(zhí)行環(huán)境的LexicalEnvironment
c) VariableEnvironemnt是調(diào)用eval函數(shù)時(shí),調(diào)用方執(zhí)行環(huán)境的VariableEnvironment
2、間接調(diào)用
所謂間接調(diào)用,即將eval賦值給另一個(gè)變量后在調(diào)用
3、嚴(yán)格模式下的eval
在嚴(yán)格模式下,eval的LexicalEnvironment,VariableEnvironment指向?qū)儆趀val自己的Lexcial Environment,而不是調(diào)用方的Lexical Environment,但是ThisBinding還是調(diào)用方的ThisBinding。
同時(shí),在嚴(yán)格模式下如果eval直接調(diào)用,那么eval的Lexical Environment的outer指針指向調(diào)用方的Lexical Environment,否則,如果是間接調(diào)用,那么eval的Lexical Environment的outer指針指向全局環(huán)境的Lexical Environment。
參考資料來(lái)源:百度百科--eval()
js中eval()和$.parseJSON()的區(qū)別以及JSON.stringify()
1.第一個(gè)區(qū)別是:安全性
json格式非常受歡迎,而解析json的方式通常用JSON.parse()但是eval()方法也可以解析,這兩者之間有什么區(qū)別呢?
JSON.parse()之可以解析json格式的數(shù)據(jù),并且會(huì)對(duì)要解析的字符串進(jìn)行格式檢查,如果格式不正確則不進(jìn)行解析,而eval()則可以解析任何字符串,eval是不安全的
如:
[javascript] view plain copy
var str = 'alert(1000.toString())';
eval(str);
JSON.parse(str);
用eval可以解析,并且會(huì)彈出對(duì)話框,而用JSON.parse()則解析不了。 其實(shí)alert并沒(méi)有什么壞處,可怕的是如果用惡意用戶在json字符串中注入了向頁(yè)面插入木馬鏈接的腳本,用eval也是可以操作的,而用JSON.parse()則不必?fù)?dān)心這個(gè)問(wèn)題。
注意:某些低級(jí)的瀏覽器尚不支持JSON.parse()
《高性能JavaScript》一書即指出:警告:關(guān)于JSON和eval需要注意的是:在代碼中使用eval是很危險(xiǎn)的,特別是用它執(zhí)行第三方的JSON數(shù)據(jù)(其中可能包含惡意代碼)時(shí),盡可能使用JSON.parse()方法解析字符串本身。該方法可以捕捉JSON中的語(yǔ)法錯(cuò)誤,并允許你傳入一個(gè)函數(shù),用來(lái)過(guò)濾或轉(zhuǎn)換解析結(jié)果。如果此方法以備Firfox 3.5 、IE8 及 Safari 4 原生支持。大多數(shù)javascript類庫(kù)包含的JSON解析代碼會(huì)直接調(diào)用原生版本,如果沒(méi)有原生支持的話,會(huì)調(diào)用一個(gè)略微不那么強(qiáng)大的非原生版本來(lái)處理。
2.第二個(gè)區(qū)別:JSON.parse()解析的必須是json格式的字符串要不報(bào)錯(cuò),而eval()則沒(méi)有這么嚴(yán)格
在這里“json格式的字符串”是指要求指定的字符串必須符合嚴(yán)格的JSON格式,例如:屬性名稱必須加雙引號(hào)、字符串值也必須用雙引號(hào)。
如果傳入一個(gè)格式不"完好"的JSON字符串將拋出一個(gè)JS異常
json的解析方法共有兩種:eval 和 JSON.parse(),如:
[javascript] view plain copy
var jsonStr= '{"name":"lulu", "sex":"female"}';
var evalJson=eval('('+jsonStr+')');
var jsonParseJson=JSON.parse(jsonStr);
這樣就把json格式的字符串jsonStr轉(zhuǎn)換成了JSON對(duì)象。
但是區(qū)別是:
[javascript] view plain copy
var age = 27;
var jsonStr= '{"name":"lulu", "sex":"female","age":++age}';
var evalJson=eval('('+jsonStr+')'); //不報(bào)錯(cuò)此時(shí)age的值是28
var jsonParseJson=JSON.parse(jsonStr);//報(bào)錯(cuò)
從上面eval()函數(shù)的用法我們可以看出eval()函數(shù)在解析json格式的字符串時(shí)要加上圓括號(hào)如eval('('+jsonStr+')'),這是因?yàn)椋?/p>
eval本身的問(wèn)題。 由于json是以”{}”的方式來(lái)開(kāi)始以及結(jié)束的,在JS中,它會(huì)被當(dāng)成一個(gè)語(yǔ)句塊來(lái)處理,所以必須強(qiáng)制性的將它轉(zhuǎn)換成一種表達(dá)式。
加上圓括號(hào)的目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號(hào)內(nèi)的表達(dá)式(expression)轉(zhuǎn)化為對(duì)象,而不是作為語(yǔ)句(statement)來(lái)執(zhí)行。舉一個(gè)例子,例如對(duì)象字面量{},如若不加外層的括號(hào),那么eval會(huì)將大括號(hào)識(shí)別為JavaScript代碼塊的開(kāi)始和結(jié)束標(biāo)記,那么{}將會(huì)被認(rèn)為是執(zhí)行了一句空語(yǔ)句。
JSON.stringify()
JSON.stringify()是把json數(shù)據(jù)轉(zhuǎn)化成json格式的字符串如:
[javascript] view plain copy
var jsonObj = {"name":"lulu","sex":"female"};
var jsonStr = JSON.stringify(jsonObj);
結(jié)果是:
'{"name":"lulu", "sex":"female"}'
貼出來(lái)你的data內(nèi)容,很可能就是你的json格式有問(wèn)題。。。
要保證data是字符串,如果已經(jīng)是json數(shù)組了,你干嘛還要eval。。
網(wǎng)站名稱:jquery的eval,jquery?
網(wǎng)頁(yè)網(wǎng)址:http://chinadenli.net/article9/dsgjiih.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供ChatGPT、外貿(mào)網(wǎng)站建設(shè)、網(wǎng)站維護(hù)、全網(wǎng)營(yíng)銷推廣、軟件開(kāi)發(fā)、網(wǎng)站建設(shè)
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)