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

經典技巧之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號
97久久久久人妻精品专区| 久久这里只精品国产免费10| 国产国产人精品视频69| 亚洲精品无码av中文字幕| 91精品国产色综久久| 久久精品女人毛片国产| 亚洲精品无码成人片久久| 久久久久成人精品无码| 一区二区三区精品视频| 香蕉视频在线精品| 日韩亚洲国产综合高清| 中文字幕日韩三级| 国产一区精品视频| 国产精品模特hd在线| 精品久久久久不卡无毒| 在线精品免费视频无码的| 亚洲国产精品18久久久久久| 91精品国产91| 99久久99久久久精品齐齐| 精品福利一区二区三区免费视频| 91热久久免费精品99| 91精品久久国产青草| 91精品一区二区三区在线观看| 98精品国产高清在线看入口| 99视频精品全国在线观看| 999久久久免费精品播放| 久久久久久亚洲精品成人| 91精品国产自产在线观看高清| 99国产精品免费视频观看| 99无码精品二区在线视频 | 国产精品大尺度尺度视频| 国产精品视频a播放| 97久久国产亚洲精品超碰热| 99精品无人区乱码在线观看| 精品国产日韩久久亚洲| 十八禁无遮挡99精品国产| 精品人妻系列无码人妻漫画| 麻豆精品人妻一区二区三区蜜桃| 国产精品99久久久久久人四虎| 高清国产精品久久| 国产最新精品视频|