2018-11-21

打卡時(shí)間:15:30

單體內(nèi)置對(duì)象

開發(fā)人員不必顯式的實(shí)例化內(nèi)置對(duì)象,因?yàn)樗鼈円呀?jīng)實(shí)例化了。前面有大多數(shù)內(nèi)置對(duì)象:Object、Array和String
ECMA-262定義了兩個(gè)單體內(nèi)置對(duì)象:Global和Math

Global對(duì)象

Global(全局)對(duì)象可以說是ECMAScript中最特別的一個(gè)對(duì)象了。因?yàn)椴还苣銖氖裁唇嵌瓤?,這個(gè)對(duì)象都是不存在的。它不屬于任何其他對(duì)象的屬性和方法,最終都是它的屬性和方法。
事實(shí)上,沒有全局變量或全局函數(shù);所有在全局作用域中定義的屬性和函數(shù),都是Globa對(duì)象的屬性。之前列舉過的isNaN()、isFinite()、parseInt()以及parseFloat(),實(shí)際上券都是Global對(duì)象的 方法。除此之外,Global對(duì)象還包含其他一些方法。

1、URI編碼方法
Global對(duì)象的encodeURI和encodeURIComponent()方法可以對(duì)URI進(jìn)行編碼,以便發(fā)送給瀏覽器。有效的URI不能包含某些字符,例如 空格 。而這兩個(gè)URI編碼方法就可以對(duì)URI進(jìn)行編碼,他們用特殊的UTF-8編碼替換所有無效的字符,從而讓瀏覽器能夠接受和理解。
主要的區(qū)別在于:
encodeURI用于整個(gè)URI,它不會(huì)對(duì)本身屬于URI的特殊字符進(jìn)行編碼,例如冒號(hào),正斜杠,問好和井字號(hào)。
encodeURIComponment()主要用于對(duì)URI中的某一段進(jìn)行編碼,它會(huì)對(duì)發(fā)現(xiàn)的任何非標(biāo)準(zhǔn)字符進(jìn)行編碼,例:

var uri = "http://www.wrox.com/illegal value.htm#start";
image.png

使用encodeURI編碼的結(jié)果是除了空格之外的其他字符都原封不動(dòng),只有空格被替換成了%20.
而encodeURIComponment方法則會(huì)使用對(duì)應(yīng)的編碼替換所有非字母數(shù)字字符。
所以可以對(duì)整個(gè)URI使用encodeURI(),而只能對(duì)附加在現(xiàn)有URI后面的字符串使用encodeURIComponment。但是一般來說,我們使用encodeURIComponment方法的時(shí)候比encodeURI更多,因?yàn)樵趯?shí)踐中更常見的是對(duì)查詢字符串參數(shù)而不是對(duì)基礎(chǔ)URI進(jìn)行編碼

還有兩個(gè)相對(duì)應(yīng)的方法。decodeURI和decodeURIComponment。其中decodeURI只能對(duì)使用encodeURI替換的字符進(jìn)行解碼。例如:它可將%20替換成一個(gè)空格,但不會(huì)對(duì)%23做任何處理,因?yàn)?23表示井字號(hào),而井字號(hào)不是使用encodeURI替換的。同樣的,decodeURIComponment能夠解碼使用encodeURIComponment編碼的所有字符。

2、eval()方法

整個(gè)ECMAScript語言中最大的一個(gè)方法:eval()。
eval()方法就像是一個(gè)完整的ECMAScript解析器,它只接受一個(gè)參數(shù),即要執(zhí)行的ECMAScript(或Javascript)字符串。例:
eval("alert('hi')"); = alert("hi"); //hi

var msg = "hello world";
eval("alert(msg)"); // hello world
//變量msg是在eval()調(diào)用的環(huán)境之外定義的。
//同樣的也可以在eval()調(diào)用中定義一個(gè)函數(shù),然后再在該調(diào)用的外部代碼中引用這個(gè)函數(shù)↓↓↓
eval("function sayHi( ) { alert ('hi');}");
sayHi(); // hi

在eval()中創(chuàng)建的任何變量或函數(shù)都不會(huì)被提升,因?yàn)樵诮馕龃a的時(shí)候,他們被包含在一個(gè)字符串中。他們只在eval()執(zhí)行的時(shí)候創(chuàng)建的。
嚴(yán)格模式下,在外部訪問不到eval()中創(chuàng)建的任何變量或函數(shù),因此前面兩個(gè)例子都會(huì)導(dǎo)致錯(cuò)誤。同樣的在嚴(yán)格模式下,為eval賦值也會(huì)導(dǎo)致錯(cuò)誤。

3、Global對(duì)象的屬性
Global對(duì)象還包含一些屬性。
例如特殊的值 undefined、NaN以及Infinity都是Global對(duì)象的屬性。此外,所有原生引用類型的構(gòu)造函數(shù),像object()和Function(),也都是Global對(duì)象的屬性。下表是Global對(duì)象的所有屬性:


image.png

4、window對(duì)象
ECMAScript雖然沒有指出如何訪問Global對(duì)象,但web瀏覽器都是將這個(gè)全局對(duì)象作為window對(duì)象的一部分加以實(shí)現(xiàn)的。因此在全局作用域中聲明的所有變量和函數(shù),就都成為了window對(duì)象的屬性。例:

var color = "red";
function sayColor(){
    alert(window.color);
}
window.sayColor(); //red

另一種取得Global對(duì)象的方法是使用以下代碼:

var global = function(){
    return this; //創(chuàng)建一個(gè)立即調(diào)用的函數(shù)表達(dá)式,返回this的值
}();

Math對(duì)象

ECMAScript為保存數(shù)學(xué)公式和信息提供了一個(gè)公共位置,就是Math對(duì)象。在Javascript直接編寫的計(jì)算功能相比,Math對(duì)象提供的計(jì)算功能執(zhí)行起來要快很多。

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


image.png

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

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

這兩個(gè)方法經(jīng)常用于避免多余的循環(huán)和if語句中確定一組數(shù)的最大值。
要找到數(shù)組中最大或最小值,可以像下面這樣使用apply()方法。

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

alert(max);//9
//把Math對(duì)象作為apply()第一個(gè)參數(shù),從而正確的設(shè)置this值。然后可以將任何數(shù)組作為第二個(gè)參數(shù)。

3、舍入方法
將小數(shù)值舍入為整數(shù)的幾個(gè)方法:Math.ceil( )、Math.floor( )和Math.round( )。這三個(gè)方法分別遵循下列舍入規(guī)則:
● 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.floor( 25.9));//25
alert(Math.floor( 25.5));//25
alert(Math.floor( 25.1));//25

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

4、random( )方法
Math.random( )方法返回介于0和1之間一個(gè)隨機(jī)數(shù),不包含0和1。
這個(gè)方法對(duì)于某些站點(diǎn)來說非常實(shí)用,因?yàn)榭梢岳盟鼇黼S機(jī)顯示一些名人名言和新聞事件。

值 = Math.floor(Math.random()*可能值的總數(shù) + 第一個(gè)可能的值)
如果你想選擇一個(gè)1到10之間的數(shù)值,可以像下面這樣編寫:
var num = Math.floor(Math.random()*10+1);
如果想要選擇一個(gè)介于2到10之間的值,應(yīng)該這么寫:
var num = Math.floor(Math.random()*9+2);

多數(shù)情況下,可以通過一個(gè)函數(shù)來計(jì)算可能值的總數(shù)和第一個(gè)可能的值:

function selectFrom(lowerValue,upperValue){
    var choices = upperValue - lowerValue +1;
    return Math.floor(Math.random() * choices + lowerValue );
}
var num = selectFrom(2,10);
alert(num);//介于2和10之間(包含2和10)的一個(gè)數(shù)值

函數(shù)selectFrom接收兩個(gè)參數(shù):應(yīng)該返回的最小值和最大值。用最大值減最小值再+1得到了可能值的總數(shù)

var colors = ["red","green","blue","yellow","purple","brown"];
var color = colors[selectFrom(0,colors.length-1)];
alert(color);//可能是數(shù)組中包含的任何一個(gè)字符串

5、其他方法


image.png

小結(jié)

對(duì)象在Javascript中被稱為引用類型的值,而且有一些內(nèi)置的引用類型可以用來創(chuàng)建特定的對(duì)象:
◆ 引用類型與傳統(tǒng)面向?qū)ο蟪绦蛟O(shè)計(jì)中的類相似,但實(shí)現(xiàn)不同;
◆ Object是一個(gè)基礎(chǔ)類型,其他所有類型都從Object繼承了基本的行為;
◆ Array類型是一組值的有序列表,同時(shí)還提供了操作和轉(zhuǎn)換這些值的功能;
◆ Date類型提供了有關(guān)日期和時(shí)間的信息,包括當(dāng)前日期和時(shí)間以及相關(guān)的計(jì)算功能;
◆ RegExp類型是ECMAScript支持正則表達(dá)式的一個(gè)借口,提供了最基本的和一些高級(jí)的正則表達(dá)功能

函數(shù)實(shí)際上是Function類型的實(shí)例,因此函數(shù)也是對(duì)象。由于函數(shù)是對(duì)象,所以函數(shù)也擁有方法,可以用來增強(qiáng)其行為。
因?yàn)橛辛嘶景b類型,所以Javascript中的基本類型值可以被當(dāng)做對(duì)象來訪問。
三種基本包裝類型分別是:Boolean、Number和String,以下是它們共同的特征:
◆ 每個(gè)包裝類型都映射到同名的基本類型;
◆ 在讀取模式下訪問基本類型值時(shí),就會(huì)創(chuàng)建對(duì)應(yīng)的基本包裝類型的一個(gè)對(duì)象,從而方便了數(shù)據(jù)操作;
◆ 操作基本類性質(zhì)的語句 已經(jīng)執(zhí)行完畢,就會(huì)立即銷毀新創(chuàng)建的包裝對(duì)象。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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