eval()作用:
eval() 函數(shù)可計(jì)算某個(gè)字符串,并執(zhí)行其中的的 JavaScript 代碼。
語法:
eval(string)
參數(shù):
string 必需,要計(jì)算的字符串,其中含有要計(jì)算的 JavaScript 表達(dá)式或要執(zhí)行的語句。
返回值:返回計(jì)算string的值,如果有的話 (沒有則不做任何改變返回)
example:
eval(“x=10;y=20;document.write(x*y)”); //output為200
document.write(eval(“2+2”)); //output為4
var x=10;
document.write(eval(x+17)); //output為27
使用eval()函數(shù)也可以將JSON字符串解析為對象,這個(gè)功能能完成JSON.parse()的功能,但是有不一樣的地方,請看下面代碼
JSON.parse()
var json = ‘{“name”:“GDT”,“age”:23,“University”:“GDUT”}’;
var info = JSON.parse(json); //解析為JSON對象
document.write(info); //output為[object Object]
eval()
var json = ‘{“name”:“GDT”,“age”:23,“University”:“GDUT”}’;
var info = eval(‘(’ + json + ‘)’); //解析為JSON對象
document.write(info); //output為[object Object]
注意
eval()要用一對圓括號將字符串包起來
原因:歸結(jié)于eval本身的問題,由于json是以”{}”的方式來開始以及結(jié)束的,在JS中,它會(huì)被當(dāng)成一個(gè)語句塊來處理,所以必須強(qiáng)制性的將它轉(zhuǎn)換成一種表達(dá)式。解決方法:加上圓括號的目的是迫使eval函數(shù)在處理JavaScript代碼的時(shí)候強(qiáng)制將括號內(nèi)的表達(dá)式(expression)轉(zhuǎn)化為對象,而不是作為語句(statement)來執(zhí)行。舉一個(gè)例子,例如對象字面量{},如若不加外層的括號,那么eval會(huì)將大括號識別為JavaScript代碼塊的開始和結(jié)束標(biāo)記,那么{}將會(huì)被認(rèn)為是執(zhí)行了一句空語句。請看下列例子的不同
alert(eval(“{}”)); // return undefined
alert(eval(‘(’+‘{}’+‘)’)); // return object[Object]
安全性
相對于寫法格式嚴(yán)格的JSON.parse()來說,eval()可以解析任何字符串,eval是不安全的,因?yàn)閑val比較寬松,會(huì)有潛在的安全性問題。比如以下代碼:
var str1 = ‘{“a”:“b”}’;
document.write(eval(“(”+str1+“)”)); //正常解析為對象
var str2 = ‘{“a”: (function(){alert(“I can do something bad!”);})()}’;
eval(‘(’+str2+‘)’); //可以用來執(zhí)行木馬腳本
如果用惡意用戶在json字符串中注入了向頁面插入木馬鏈接的腳本,用eval也是可以操作的,而用JSON.parse()則不必?fù)?dān)心這個(gè)問題,可見,雖然eval()功能很強(qiáng)大,但是實(shí)際用到的機(jī)會(huì)并不多。
JavaScript簡介
JavaScript(簡稱“JS”)是一種具有函數(shù)優(yōu)先的輕量級,解釋型或即時(shí)編譯型的編程語言。雖然它是作為開發(fā)Web頁面的腳本語言而出名,但是它也被用到了很多非瀏覽器環(huán)境中,JavaScript基于原型編程、多范式的動(dòng)態(tài)腳本語言,并且支持面向?qū)ο?、命令式、聲明式、函?shù)式編程范式。
JavaScript在1995年由Netscape公司的Brendan Eich,在網(wǎng)景導(dǎo)航者瀏覽器上首次設(shè)計(jì)實(shí)現(xiàn)而成。因?yàn)镹etscape與Sun合作,Netscape管理層希望它外觀看起來像Java,因此取名為JavaScript。但實(shí)際上它的語法風(fēng)格與Self及Scheme較為接近。
JavaScript的標(biāo)準(zhǔn)是ECMAScript。截至2012年,所有瀏覽器都完整的支持ECMAScript 5.1,舊版本的瀏覽器至少支持ECMAScript 3標(biāo)準(zhǔn)。2015年6月17日,ECMA國際組織發(fā)布了ECMAScript的第六版,該版本正式名稱為ECMAScript 2015,但通常被稱為ECMAScript 6或者ES2015。
JavaScript運(yùn)行模式
JavaScript是一種屬于網(wǎng)絡(luò)的高級腳本語言,已經(jīng)被廣泛用于Web應(yīng)用開發(fā),常用來為網(wǎng)頁添加各式各樣的動(dòng)態(tài)功能,為用戶提供更流暢美觀的瀏覽效果。通常JavaScript腳本是通過嵌入在HTML中來實(shí)現(xiàn)自身的功能的。
1.是一種解釋性腳本語言(代碼不進(jìn)行預(yù)編譯)。
2.主要用來向HTML(標(biāo)準(zhǔn)通用標(biāo)記語言下的一個(gè)應(yīng)用)頁面添加交互行為。
3.可以直接嵌入HTML頁面,但寫成單獨(dú)的js文件有利于結(jié)構(gòu)和行為的分離。
4.跨平臺(tái)特性,在絕大多數(shù)瀏覽器的支持下,可以在多種平臺(tái)下運(yùn)行(如Windows、Linux、Mac、Android、iOS等)。
5.JavaScript腳本語言同其他語言一樣,有它自身的基本數(shù)據(jù)類型,表達(dá)式和算術(shù)運(yùn)算符及程序的基本程序框架。JavaScript提供了四種基本的數(shù)據(jù)類型和兩種特殊數(shù)據(jù)類型用來處理數(shù)據(jù)和文字。而變量提供存放信息的地方,表達(dá)式則可以完成較復(fù)雜的信息處理。文章來源:http://www.zghlxwxcb.cn/news/detail-495765.html
JavaScript腳本語言具有以下特點(diǎn):
(1)腳本語言。JavaScript是一種解釋型的腳本語言,C、C++等語言先編譯后執(zhí)行,而JavaScript是在程序的運(yùn)行過程中逐行進(jìn)行解釋。
(2)基于對象。JavaScript是一種基于對象的腳本語言,它不僅可以創(chuàng)建對象,也能使用現(xiàn)有的對象。
(3)簡單。JavaScript語言中采用的是弱類型的變量類型,對使用的數(shù)據(jù)類型未做出嚴(yán)格的要求,是基于Java基本語句和控制的腳本語言,其設(shè)計(jì)簡單緊湊。
(4)動(dòng)態(tài)性。JavaScript是一種采用事件驅(qū)動(dòng)的腳本語言,它不需要經(jīng)過Web服務(wù)器就可以對用戶的輸入做出響應(yīng)。在訪問一個(gè)網(wǎng)頁時(shí),鼠標(biāo)在網(wǎng)頁中進(jìn)行鼠標(biāo)點(diǎn)擊或上下移、窗口移動(dòng)等操作JavaScript都可直接對這些事件給出相應(yīng)的響應(yīng)。
(5)跨平臺(tái)性。JavaScript腳本語言不依賴于操作系統(tǒng),僅需要瀏覽器的支持。因此一個(gè)JavaScript腳本在編寫后可以帶到任意機(jī)器上使用,前提是機(jī)器上的瀏覽器支持JavaScript腳本語言,JavaScript已被大多數(shù)的瀏覽器所支持。 [4]不同于服務(wù)器端腳本語言,例如PHP與ASP,JavaScript主要被作為客戶端腳本語言在用戶的瀏覽器上運(yùn)行,不需要服務(wù)器的支持。所以在早期程序員比較傾向于使用JavaScript以減少對服務(wù)器的負(fù)擔(dān),而與此同時(shí)也帶來另一個(gè)問題,安全性。
而隨著服務(wù)器的強(qiáng)壯,雖然程序員更喜歡運(yùn)行于服務(wù)端的腳本以保證安全,但JavaScript仍然以其跨平臺(tái)、容易上手等優(yōu)勢大行其道。同時(shí),有些特殊功能(如AJAX)必須依賴JavaScript在客戶端進(jìn)行支持。文章來源地址http://www.zghlxwxcb.cn/news/detail-495765.html
到了這里,關(guān)于eval()函數(shù)功能介紹及弊端說明的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!