站長(zhǎng)資訊網(wǎng)
最全最豐富的資訊網(wǎng)站

經(jīng)典技巧之JavaScript全局函數(shù)詳解

本篇文章給大家?guī)?lái)了JavaScript中關(guān)于全局函數(shù)的相關(guān)知識(shí),JavaScript中的全局函數(shù)有很多,下面我們一起來(lái)看一下應(yīng)該怎樣使用,希望對(duì)大家有幫助。

經(jīng)典技巧之JavaScript全局函數(shù)詳解

一、JavaScript全局函數(shù)有哪些?

函數(shù) 描述
decodeURI() 解碼某個(gè)編碼的 URI。
decodeURIComponent() 解碼一個(gè)編碼的 URI 組件。
encodeURI() 把字符串編碼為 URI。
encodeURIComponent() 把字符串編碼為 URI 組件。
escape() 對(duì)字符串進(jìn)行編碼。
eval() 計(jì)算 JavaScript 字符串,并把它作為腳本代碼來(lái)執(zhí)行。
isFinite() 檢查某個(gè)值是否為有窮大的數(shù)。
isNaN() 檢查某個(gè)值是否是數(shù)字。
Number() 把對(duì)象的值轉(zhuǎn)換為數(shù)字。
parseFloat() 解析一個(gè)字符串并返回一個(gè)浮點(diǎn)數(shù)。
parseInt() 解析一個(gè)字符串并返回一個(gè)整數(shù)。
String() 把對(duì)象的值轉(zhuǎn)換為字符串。
unescape() 對(duì)由 escape() 編碼的字符串進(jìn)行解碼。

二、JavaScript全局函數(shù)詳解?

2.1.Eval()

2.1.1.例子一

首先看示例:

eval("x=10;y=20;document.write(x*y)");document.write("<br>" + eval("2+2"));document.write("<br>" + eval(x+17));

結(jié)果:

200
4
27

特殊用法{}:

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

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

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

2.1.2.例子二

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

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

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

try  {   alert("Result:" + eval(prompt("Enter an expression:","")));}catch(exception) {   alert(exception);}

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

2.1.3.1.eval解析函數(shù):

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

var text = '{ "name":"Runoob", "alexa":"function () {return 10000;}", "site":"www.runoob.com"}';var obj = JSON.parse(text);obj.alexa = eval("(" + obj.alexa + ")");  document.getElementById("demo").innerHTML = obj.name + " Alexa 排名:" + obj.alexa();

2.1.3.2.JSON字符串轉(zhuǎn)換為對(duì)象的兩種方法

  //將JSON字符串轉(zhuǎn)為JS對(duì)象的方法一     var obj = JSON.parse('{ "name":"runoob", "alexa":10000, "site":"www.runoob.com" }');     document.write(obj.name + "<br/>");     //將JSON字符串轉(zhuǎn)為JS對(duì)象的方法二     //JSON格式的字符串     var test1 = '{"name":"qlq","age":25}';     var obj2 = eval("(" + test1 + ")"); //必須帶圓括號(hào)     document.write(obj2.name + "<br/>" + obj2.age);

結(jié)果:

runoob
qlq
25

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

原因在于: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ǔ)句。所以下面兩個(gè)執(zhí)行結(jié)果是不同的:

alert(eval("{}"); // return undefinedalert(eval("({})");// return object[Object]

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

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

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

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

2.1.3.3.對(duì)于服務(wù)器返回的JSON字符串,如果jquery異步請(qǐng)求將 type(一般為這個(gè)配置屬性)設(shè)為"json",或者利 用$.getJSON()方法獲得服務(wù)器返回,那么就不需要eval()方法了,因?yàn)檫@時(shí)候得到的結(jié)果已經(jīng)是json對(duì)象了,只需直接調(diào)用該對(duì)象即可,這里以$.getJSON方法為例說(shuō)明數(shù)據(jù)處理方法:

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

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

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

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

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

decodeURI() 可對(duì) encodeURI() 函數(shù)編碼過(guò)的 URI 進(jìn)行解碼

如:

 const aaa = '#$ ¥%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/

我們?cè)讷@取地址欄參數(shù)是通常封裝成如下函數(shù):

export function getQueryObject(url) {   url = url || window.location.href  const search = url.substring(url.lastIndexOf('?') + 1)   const obj = {}   const reg = /([^?&=]+)=([^?&=]*)/g   search.replace(reg, (rs, $1, $2) => {     const name = decodeURIComponent($1)     let val = decodeURIComponent($2)     val = String(val)     obj[name] = val    return rs  })   return obj}

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

encodeURI():
語(yǔ)法

encodeURI(URIstring)
參數(shù) 描述
URIstring 必需。一個(gè)字符串,含有 URI 或其他要編碼的文本。
返回值
URIstring 的副本,其中的某些字符將被十六進(jìn)制的轉(zhuǎn)義序列進(jìn)行替換。
說(shuō)明
該方法不會(huì)對(duì) ASCII 字母和數(shù)字進(jìn)行編碼,也不會(huì)對(duì)這些 ASCII 標(biāo)點(diǎn)符號(hào)進(jìn)行編碼: – _ . ! ~ * ’ ( ) 。
該方法的目的是對(duì) URI 進(jìn)行完整的編碼,因此對(duì)以下在 URI 中具有特殊含義的 ASCII 標(biāo)點(diǎn)符號(hào),encodeURI() 函數(shù)是不會(huì)進(jìn)行轉(zhuǎn)義的:;/?: @&=+$,#

encodeURIComponent() :

語(yǔ)法
encodeURIComponent(URIstring)
參數(shù) 描述
URIstring 必需。一個(gè)字符串,含有 URI 組件或其他要編碼的文本。
返回值
URIstring 的副本,其中的某些字符將被十六進(jìn)制的轉(zhuǎn)義序列進(jìn)行替換。
說(shuō)明
該方法不會(huì)對(duì) ASCII 字母和數(shù)字進(jìn)行編碼,也不會(huì)對(duì)這些 ASCII 標(biāo)點(diǎn)符號(hào)進(jìn)行編碼: – _ . ! ~ * ’ ( ) 。
其他字符(比如 :;/?

贊(0)
分享到: 更多 (0)
網(wǎng)站地圖   滬ICP備18035694號(hào)-2    滬公網(wǎng)安備31011702889846號(hào)
日韩在线视频二区| 精品国产福利在线观看91啪 | 精品久久久久久无码人妻热| 日韩视频在线观看一区二区| 好叼操这里只有精品| 国产va免费精品观看精品| 久久精品无码一区二区WWW| 久久久免费精品re6| 久久精品视频久久| 国产精品无码无卡在线播放| 91久久精品91久久性色| 精品国产黑色丝袜高跟鞋| 亚洲精品视频免费观看| 任我爽精品视频在线播放| 日韩人妻不卡一区二区三区| 四虎永久在线精品视频免费观看| 国产精品美女久久久网站| 精品国产亚洲AV麻豆 | 国产精品国产高清国产专区| 亚洲国产精品成人一区| 欧美日韩国产免费一区二区三区| 久久精品无码一区二区日韩AV| 国产99视频精品免费视频7| 国产精品亚洲专区无码不卡| 国产精品毛片在线完整版| 国产精品美女久久久久久久| 精品免费国产一区二区三区 | 国产精品电影在线| 国产精品自在线拍国产第一页| 国产精品 一区 在线| 精品国产呦系列在线观看免费| 黄床大片免费30分钟国产精品| 精品人妻少妇一区二区| 久久久久这里只有精品 | 精品精品国产国产| 精品一久久香蕉国产线看播放 | 久久精品视频一区| 久久精品国产99国产| 亚洲国产精品热久久| 999精品视频在线观看热6| 中文字幕精品一区二区日本|