欧美亚洲中文,在线国自产视频,欧洲一区在线观看视频,亚洲综合中文字幕在线观看

      1. <dfn id="rfwes"></dfn>
          <object id="rfwes"></object>
        1. 站長資訊網(wǎng)
          最全最豐富的資訊網(wǎng)站

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

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

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

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

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

          這時返回結(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;    // 可能會拋出 EvalError 異常myeval("2+3");    // 可能會拋出 EvalError 異常

          可以使用下面這段代碼來檢測 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ù)作為字符串存儲,之后再將字符串轉(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)換為對象的兩種方法

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

          結(jié)果:

          runoob
          qlq
          25

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

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

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

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

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

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

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

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

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

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

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

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

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

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

          decodeURI() 可對 encodeURI() 函數(shù)編碼過的 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/

          我們在獲取地址欄參數(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():
          語法

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

          encodeURIComponent() :

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

          贊(0)
          分享到: 更多 (0)
          網(wǎng)站地圖   滬ICP備18035694號-2    滬公網(wǎng)安備31011702889846號