【JS基礎(chǔ)】(十一)JavaScript內(nèi)置對象

JavaScript內(nèi)置對象與宿主無關(guān),獨立于宿主環(huán)境的ECMAScript實現(xiàn)提供的對象,在ECMAScript 程序開始執(zhí)行時出現(xiàn)。在 ECMAScript 程序開始執(zhí)行前就存在,本身就是實例化內(nèi)置對象,開發(fā)者無需再去實例化

內(nèi)置對象包含:GlobalMath,ECMAScript5中增添了 JSON 這個存在于全局的內(nèi)置對象。

一、Global對象

ECMAScript 中的 Global 對象在某種意義上是作為一個終極的“兜底兒對象” 來定義的。換句話說,不屬于任何其他對象的屬性和方法,最終都是Global 對象的屬性和方法。事實上,沒有全 局變量或全局函數(shù);所有在全局作用域中定義的屬性和函數(shù),都是 Global 對象的屬性

  1. URI 編碼方法

URI:(Uniform Resource Identifiers)通用資源標(biāo)識符

(1)編碼方法

Global 對象的 encodeURI()encodeURIComponent()方法可以對URI進行編碼,以便發(fā)送給瀏覽器。

  • encodeURI() 主要用于對整個 URI 進行編碼,不會對本身屬于 URI 的特殊字符進行編碼,例如冒號、正斜杠、 問號和井字號;
  • encodeURIComponent() 主要用于對 URI 中的某一段進行編碼,會對它發(fā)現(xiàn)的任何非標(biāo)準(zhǔn)字符進行編碼。
var uri = "http://www.wrox.com/illegal value.htm#start"; 

// "http://www.wrox.com/illegal%20value.htm#start" 
alert(encodeURI(uri)); 
 
// "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"
alert(encodeURIComponent(uri)); 

注:一般來說 , 我們使用 encodeURIComponent() 方法的時候要比使用 encodeURI()更多,因為在實踐中更常見的是對查詢字符串參數(shù)而不是對基礎(chǔ) URI 進行編碼。

(2)解碼方法

  • decodeURI() 只能對使用 encodeURI()替換的字符進行解碼;
  • decodeURIComponent() 能夠解碼使用 encodeURIComponent()編碼的所有字符,即它可以解碼任何特殊字符的編碼。
var uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.htm%23start"; 

// http%3A%2F%2Fwww.wrox.com%2Fillegal value.htm%23start
alert(decodeURI(uri)); 

// http://www.wrox.com/illegal value.htm#start 
alert(decodeURIComponent(uri)); 
  1. eval() 方法
  • eval() 函數(shù)計算 JavaScript 字符串,并把它作為腳本代碼來執(zhí)行
  • 只接受一個參數(shù),其中含有要計算的 JavaScript 表達式或要執(zhí)行的語句;
  • 如果參數(shù)是一個表達式,eval()函數(shù)將執(zhí)行表達式;如果參數(shù)是Javascript語句,eval()將執(zhí)行 Javascript 語句。
eval("alert('hi')"); 
// 這行代碼的作用等價于下面這行代碼: 
alert("hi"); 

eval()中創(chuàng)建的任何變量或函數(shù)都不會被提升,因為在解析代碼的時候,它們被包含在一個字符串中;它們只eval()執(zhí)行的時候創(chuàng)建。

eval("var msg = 'hello world'; "); 
alert(msg);     //"hello world" 

alert(msg1); // 報錯,msg1 is not defined
eval("var msg1 = 'hello hongmao!' "); 
  1. Global 對象的屬性

下表列出了 Global 對象的所有屬性:

屬 性 說 明 屬 性 說 明
undefined 特殊值undefined Date 構(gòu)造函數(shù)Date
NaN 特殊值NaN RegExp 構(gòu)造函數(shù)RegExp
Infinity 特殊值Infinity Error 構(gòu)造函數(shù)Error
Object 構(gòu)造函數(shù)Object EvalError 構(gòu)造函數(shù)EvalError
Array 構(gòu)造函數(shù)Array RangeError 構(gòu)造函數(shù)RangeError
Function 構(gòu)造函數(shù)Function ReferenceError 構(gòu)造函數(shù)ReferenceError
Boolean 構(gòu)造函數(shù)Boolean SyntaxError 構(gòu)造函數(shù)SyntaxError
String 構(gòu)造函數(shù)String TypeError 構(gòu)造函數(shù)TypeError
Number 構(gòu)造函數(shù)Number URIError 構(gòu)造函數(shù)URIError

二、Math對象

Math對象用于執(zhí)行數(shù)學(xué)任務(wù)。與在 JavaScript 直 接編寫的計算功能相比,Math 對象提供的計算功能執(zhí)行起來要快得多。

  1. Math 對象的屬性

Math 對象包含的屬性大都是數(shù)學(xué)計算中可能會用到的一些特殊值。如下

屬 性 說 明
Math.E 自然對數(shù)的底數(shù),即常量e的值
Math.LN10 10的自然對數(shù)
Math.LN2 2的自然對數(shù)
Math.LOG2E 2為底e的對數(shù)
Math.LOG10E 10為底e的對數(shù)
Math.PI π的值
Math.SQRT1_2 1/2的平方根(即2的平方根的倒數(shù)
Math.SQRT2 2的平方根
  1. Math 對象的方法

(1)min()max()方法

min()max()方法用于確定一組數(shù)值中的最小值和最大值,這兩個方法都可以接收任意多個數(shù)值參數(shù)。

var max = Math.max(3, 54, 32, 16); 
alert(max);    //54 

var min = Math.min(3, 54, 32, 16); 
alert(min);    //3 

要找到數(shù)組中的最大或最小值,可以像下面這樣使用 apply()方法:

var values = [1, 2, 3, 4, 5, 6, 7, 8]; 
var max = Math.max.apply(Math, values); 

(2)舍入方法

  • Math.ceil()執(zhí)行向上舍入,即它總是將數(shù)值向上舍入為最接近的整數(shù);
  • Math.floor()執(zhí)行向下舍入,即它總是將數(shù)值向下舍入為最接近的整數(shù);
  • Math.round()執(zhí)行標(biāo)準(zhǔn)舍入,即它總是將數(shù)值四舍五入為最接近的整數(shù)。
alert(Math.ceil(25.9));     //26 
alert(Math.ceil(25.5));     //26 
alert(Math.ceil(25.1));     //26 

alert(Math.round(25.9));    //26 
alert(Math.round(25.5));    //26 
alert(Math.round(25.1));    //25 
     
alert(Math.floor(25.9));    //25 
alert(Math.floor(25.5));    //25 
alert(Math.floor(25.1));    //25 

(3)random()方法

Math.random()方法返回大于等于 0 小于 1 的一個隨機數(shù),這個方法非常實用。

套用下面的公式,就可以利用 Math.random() 從某個整數(shù)范圍內(nèi)隨機選擇一個值。

值 = Math.floor(Math.random() * 可能值的總數(shù) + 第一個可能的值)

公式中用到了 Math.floor()方法,這是因為Math.random()總返回一個小數(shù)值。而用這個小數(shù) 值乘以一個整數(shù),然后再加上一個整數(shù),最終結(jié)果仍然還是一個小數(shù)。

// 選擇一個 1到 10 之間的數(shù)值
// 總共有 10 個可能的值(1 到 10),而第一個可能的值是 1
var num = Math.floor(Math.random() * 10 + 1);

// 選擇一個介于 2 到 10 之間的值
// 從2數(shù)到10要數(shù)9個數(shù),因此可能值的總數(shù)就是9,而第一個可能的值就是 2
var num1 = Math.floor(Math.random() * 9 + 2); 

(4)其他方法

方 法 說 明 方 法 說 明
Math.abs(num) 返回num 的絕對值 Math.asin(x) 返回x 的反正弦值
Math.exp(num) 返回Math.Enum 次冪 Math.atan(x) 返回x 的反正切值
Math.log(num) 返回num 的自然對數(shù) Math.atan2(y,x) 返回y/x 的反正切值
Math.pow(num,power) 返回num 的power 次冪 Math.cos(x) 返回x 的余弦值
Math.sqrt(num) 返回num 的平方根 Math.sin(x) 返回x 的正弦值
Math.acos(x) 返回x 的反余弦值 Math.tan(x) 返回x 的正切值

三、JSON對象

ECMAScript5對解析JSON的行為進行了規(guī)范,定義了全局對象JSON。JSON對象有兩個方法:stringify()parse()

  1. stringify()方法

JSON.stringify() 方法用于將 JavaScript 值轉(zhuǎn)換為 JSON 字符串,返回包含 JSON 文本的字符串。

JSON.stringify(value[, replacer[, space]])

參數(shù)說明:

  • value: 必需, 要轉(zhuǎn)換的 JavaScript 值(通常為對象或數(shù)組)。
  • replacer: 可選。用于轉(zhuǎn)換結(jié)果的函數(shù)或數(shù)組。
var jsonObj = {
    "title":"javascript",
    "group":{
        "name":"jia",
        "tel":12345
    }
};

JSON.stringify(jsonObj);
//  {"title":"javascript","group":{"name":"jia","tel":12345}}
  • 如果 replacer 為函數(shù),則JSON.stringify將調(diào)用該函數(shù),并傳入每個成員的鍵和值。使用返回值而不是原始值。如果此函數(shù)返回undefined,則排除成員。根對象的鍵是一個空字符串:""。
JSON.stringify({a:1,b:2}, function(key, value){
  if (typeof value === "number") {
    value = 2 * value;
  }
  return value;    
})
// "{"a":2,"b":4}"
  • 如果 replacer 是一個數(shù)組,則僅轉(zhuǎn)換該數(shù)組中具有鍵值的成員。成員的轉(zhuǎn)換順序與鍵在數(shù)組中的順序一樣。
var jsonObj = {
    "title":"javascript",
    "group":{
        "a":1
    }
};

console.log(JSON.stringify(jsonObj,["group","a"])); // {"group":{"a":1}}
  • space:可選,文本添加縮進、空格和換行符,如果 space 是一個數(shù)字,則返回值文本在每個級別縮進指定數(shù)目的空格,如果 space 大于 10,則文本縮進 10 個空格。space 也可以使用非數(shù)字,如:\t
JSON.stringify({ p1: 1, p2: 2 }, null, 2);
/*
返回值如下:
"{
  "p1": 1,
  "p2": 2
}"
*/
  1. parse()方法

JSON.parse() 方法用于將一個 JSON 字符串轉(zhuǎn)換為對象,返回給定 JSON 字符串轉(zhuǎn)換后的對象。

JSON.parse(text[, reviver])

參數(shù)說明:

  • text: 必需, 一個有效的 JSON 字符串。
  • reviver: 可選,一個轉(zhuǎn)換結(jié)果的函數(shù), 將為對象的每個成員調(diào)用此函數(shù)。
JSON.parse('[1, 5, "false"]') // [1, 5, "false"]
JSON.parse('null') // null
var o = JSON.parse('{"name": "張三"}');
o.name // 張三

// 接收一個函數(shù)參數(shù),在每個鍵值對兒上調(diào)用
var o = JSON.parse('{"a":1,"b":2}', function(key, value) {
  if (key === ''){
    return value;
  }
  if (key === 'a') {
    return value + 10;
  }
});
o.a // 11
o.b // undefined
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容