JavaScript內(nèi)置對象與宿主無關(guān),獨立于宿主環(huán)境的ECMAScript實現(xiàn)提供的對象,在ECMAScript 程序開始執(zhí)行時出現(xiàn)。在 ECMAScript 程序開始執(zhí)行前就存在,本身就是實例化內(nèi)置對象,開發(fā)者無需再去實例化。
內(nèi)置對象包含:Global和Math,ECMAScript5中增添了 JSON 這個存在于全局的內(nèi)置對象。
一、Global對象
ECMAScript 中的 Global 對象在某種意義上是作為一個終極的“兜底兒對象” 來定義的。換句話說,不屬于任何其他對象的屬性和方法,最終都是Global 對象的屬性和方法。事實上,沒有全 局變量或全局函數(shù);所有在全局作用域中定義的屬性和函數(shù),都是 Global 對象的屬性。
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));
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!' ");
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í)行起來要快得多。
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的平方根 |
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.E 的num 次冪 |
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()
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
}"
*/
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