中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

JavaScript全局函數怎么用

發布時間:2021-12-21 09:35:02 來源:億速云 閱讀:113 作者:小新 欄目:web開發

這篇文章將為大家詳細講解有關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 標點符號進行編碼: - _ . ! ~ * ’ ( ) 。
其他字符(比如 :;/?

關于“JavaScript全局函數怎么用”這篇文章就分享到這里了,希望以上內容可以對大家有一定的幫助,使各位可以學到更多知識,如果覺得文章不錯,請把它分享出去讓更多的人看到。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

金平| 墨玉县| 嘉峪关市| 靖州| 武陟县| 永泰县| 拜城县| 湘阴县| 泰兴市| 定西市| 阳谷县| 江达县| 五大连池市| 故城县| 龙州县| 新乐市| 澄江县| 长春市| 大余县| 乐昌市| 林芝县| 大化| 嘉义县| 彰化市| 崇礼县| 保定市| 阜新市| 霍州市| 定边县| 建水县| 邓州市| 阜阳市| 图们市| 海丰县| 白城市| 甘德县| 南康市| 深水埗区| 临潭县| 康保县| 周宁县|