經(jīng)典技巧之JavaScript全局函數(shù)詳解_第1頁
經(jīng)典技巧之JavaScript全局函數(shù)詳解_第2頁
經(jīng)典技巧之JavaScript全局函數(shù)詳解_第3頁
經(jīng)典技巧之JavaScript全局函數(shù)詳解_第4頁
經(jīng)典技巧之JavaScript全局函數(shù)詳解_第5頁
已閱讀5頁,還剩1頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

第經(jīng)典技巧之JavaScript全局函數(shù)詳解eval(x=10;y=20;document.write(x*y)document.write(br+eval(2+2));document.write(br+eval(x+17));

結果:

200

4

27

特殊用法{}:

document.write(br+eval{3+3}));

這時返回結果為:6我們發(fā)現(xiàn){}這樣使用和()其實是一樣的不同在于:

//{}/2這種寫法是不支持的document.write(br+eval{3+3}/2));//()是可以的document.write(br+eval(3+3)/2));//若是{}也想進行此類計算也可以如下:document.write(br+eval{(3+3)/2}));

2.1.2.例子二

看一下在其他情況中,eval()返回的結果:

eval(2+3)//返回5varmyeval=eval;//可能會拋出EvalError異常myeval(2+3//可能會拋出EvalError異常

可以使用下面這段代碼來檢測eval()的參數(shù)是否合法:

try{

alert(Result:+eval(prompt(Enteranexpression:,)));}catch(exception){

alert(exception);}

2.1.3.例子三(解析JSON字符串)

.eval解析函數(shù):

JSON不允許包含函數(shù),但你可以將函數(shù)作為字符串存儲,之后再將字符串轉換為函數(shù)。

vartext={name:Runoob,alexa:function(){return10000;},site:}varobj=JSON.parse(text);obj.alexa=eval((+obj.alexa+)

document.getElementById(demo).innerHTML=+Alexa排名:+obj.alexa();

.JSON字符串轉換為對象的兩種方法

//將JSON字符串轉為JS對象的方法一

varobj=JSON.parse({name:runoob,alexa:10000,site:}

document.write(+br/

//將JSON字符串轉為JS對象的方法二

//JSON格式的字符串

vartest1={name:qlq,age:25}

varobj2=eval((+test1+)//必須帶圓括號

document.write(+br/+obj2.age);

結果:

runoob

qlq

25

為什么要eval這里要添加eval((+test1+))//呢?

原因在于:eval本身的問題。由于json是以{}的方式來開始以及結束的,在JS中,它會被當成一個語句塊來處理,所以必須強制性的將它轉換成一種表達式。

加上圓括號的目的是迫使eval函數(shù)在處理JavaScript代碼的時候強制將括號內的表達式(expression)轉化為對象,而不是作為語句(statement)來執(zhí)行。舉一個例子,例如對象字面量{},如若不加外層的括號,那么eval會將大括號識別為JavaScript代碼塊的開始和結束標記,那么{}將會被認為是執(zhí)行了一句空語句。所以下面兩個執(zhí)行結果是不同的:

alert(eval({}//returnundefinedalert(eval(({})//returnobject[Object]

對于這種寫法,在JS中,可以到處看到。

如:(function()){}();做閉包操作時等。

alert(dataObj.root.length);//輸出root的子對象數(shù)量$.each(dataObj.root,fucntion(idx,item){if(idx==0){returntrue;}//輸出每個root子對象的名稱和值alert(name:++,value:+item.value);})

注:對于一般的js生成json對象,只需要將$.each()方法替換為for語句即可,其他不變。

.對于服務器返回的JSON字符串,如果jquery異步請求將type(一般為這個配置屬性)設為json,或者利用$.getJSON()方法獲得服務器返回,那么就不需要eval()方法了,因為這時候得到的結果已經(jīng)是json對象了,只需直接調用該對象即可,這里以$.getJSON方法為例說明數(shù)據(jù)處理方法:

$.getJSON(/,{param:gaoyusi},function(data){//此處返回的data已經(jīng)是json對象//以下其他操作同第一種情況$.each(data.root,function(idx,item){if(idx==0){returntrue;//同countinue,返回false同break}alert(name:++,value:+item.value);});});

這里特別需要注意的是方式1中的eval()方法是動態(tài)執(zhí)行其中字符串(可能是js腳本)的,這樣很容易會造成系統(tǒng)的安全問題。所以可以采用一些規(guī)避了eval()的第三方客戶端腳本庫,比如JSONinJavaScript就提供了一個不超過3k的腳本庫。

.補充:eval()解析的JSON的key可以不帶

一般的JSON的key必須帶雙引號,也就是類似于{key:vslue}的形式,但是如果用eval((+json+))的形式解析字符串為JSON的時候,json可以寫為{key:value}

2.2.decodeURI()與decodeURIComponent()解碼函數(shù)

decodeURI()可對encodeURI()函數(shù)編碼過的URI進行解碼

如:

constaaa=#$¥%23ccc/

console.log(encodeURI(aaa));//#$%20%EF%BF%A5%2523ccc/

console.log(decodeURI(aaa));//#$¥%23ccc/

console.log(encodeURIComponent(aaa));//%23%24%20%EF%BF%A5%2523ccc%2F

console.log(decodeURIComponent(aaa));//#$¥#ccc/

我們在獲取地址欄參數(shù)是通常封裝成如下函數(shù):

exportfunctiongetQueryObject(url){

url=url||window.location.hrefconstsearch=url.substring(url.lastIndexOf()+1)

constobj={}

constreg=/([^=]+)=([^=]*)/g

search.replace(reg,(rs,$1,$2)={

constname=decodeURIComponent($1)

letval=decodeURIComponent($2)

val=String(val)

obj[name]=valreturnrs})

returnobj}

2.3.encodeURI()與encodeURIComponent()編碼函數(shù)

encodeURI():

語法

encodeURI(URIstring)

參數(shù)描述

URIstring必需。一個字符串,含有URI或其他要編碼的文本。

返回值

URIstring的副本,其中的某些字符將被十六進制的轉義序列進行替換。

說明

該方法不會對ASCII字母和數(shù)字進行編碼,也不會對這些ASCII標點符號進行編碼:-_.!~*()。

該方法的目的是對URI進行完整的編碼,因此對以下在URI中具有特殊含義的ASCII標點符號,encodeURI()函數(shù)是不會進行轉義的:;/:@=+$,#

encodeURIComponent():

語法

encodeURIComponent(

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論