站長資訊網
        最全最豐富的資訊網站

        經典技巧之JavaScript全局函數詳解

        本篇文章給大家帶來了JavaScript中關于全局函數的相關知識,JavaScript中的全局函數有很多,下面我們一起來看一下應該怎樣使用,希望對大家有幫助。

        經典技巧之JavaScript全局函數詳解

        一、JavaScript全局函數有哪些?

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

        二、JavaScript全局函數詳解?

        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));

        結果:

        200
        4
        27

        特殊用法{}:

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

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

        //{}/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")    // 返回 5var myeval = eval;    // 可能會拋出 EvalError 異常myeval("2+3");    // 可能會拋出 EvalError 異常

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

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

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

        2.1.3.1.eval解析函數:

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

        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字符串轉換為對象的兩種方法

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

        結果:

        runoob
        qlq
        25

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

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

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

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

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

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

        alert(dataObj.root.length);//輸出root的子對象數量$.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.對于服務器返回的JSON字符串,如果jquery異步請求將 type(一般為這個配置屬性)設為"json",或者利 用$.getJSON()方法獲得服務器返回,那么就不需要eval()方法了,因為這時候得到的結果已經是json對象了,只需直接調用該對象即可,這里以$.getJSON方法為例說明數據處理方法:

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

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

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

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

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

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

        如:

         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/

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

        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() — 編碼函數

        encodeURI():
        語法

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

        encodeURIComponent() :

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

        贊(0)
        分享到: 更多 (0)
        網站地圖   滬ICP備18035694號-2    滬公網安備31011702889846號
        主站蜘蛛池模板: 亚洲欧美日韩国产精品| 1024国产欧美日韩精品| CAOPORM国产精品视频免费 | 精品亚洲欧美无人区乱码| 国产精品久久99| 精品一区二区三区在线观看视频| 青青久久精品国产免费看| 国产高清在线精品一本大道国产| 日产精品久久久久久久性色| 亚洲A∨精品一区二区三区| 国产精品自在线拍国产电影| 国产精品久久久久久福利69堂| 精品久久久久久久久午夜福利| 亚洲精品无码久久久久sm| 精品无码人妻久久久久久| 国产精品人人做人人爽| 色综合久久精品中文字幕首页| 国产精品污视频| 99久久免费国产精品热| 国产日韩精品中文字无码| 精品国产AV一区二区三区 | 久久精品国产半推半就| 国产精品亚洲片在线观看不卡| 亚洲日韩精品无码专区网址| 亚洲国产精品狼友中文久久久| 日韩欧美亚洲国产精品字幕久久久| 久久久人妻精品无码一区| 久久精品国产亚洲7777| 国内精品久久久久国产盗摄| 国模精品一区二区三区| 国产人成精品综合欧美成人| 国产一在线精品一区在线观看| 国产亚洲精品AA片在线观看不加载| 国产精品99久久精品爆乳| 国产精品1024在线永久免费| 精品久久久无码中文字幕天天 | 日本精品不卡视频| 永久免费精品视频| 国产精品美女久久久免费| 国产精品尹人在线观看| 久久久久久亚洲精品无码|