JavaScript內置對象--單體內置對象(Global、Math)詳解

一、什麼是單體內置對象?

官方對於"單體"二字其實沒有顯性的表達,看了很多書籍和大牛的網站,都是含糊兩口,其實就我自己也沒完全搞清楚這個幾個名詞,“引用類型”,“單體”內置對象,"內置對象"這些詞的區別,按介紹說,內置對象是不依賴於宿主環境的對象,這些對象在程序執行之前就已經存在了,開發人員不必顯示地實例化內置對象,因爲它們已經實例化了。
簡而言之,單體內置對象是不需要通過new來實例化的,例如我們的string可以new,但是Math是不要new的,因爲可以直接使用Math的API。


Global類

Global對象是JavaScript中最特別的一個對象。不屬於任何其他對象的屬性和方法,最終都是它的屬性和方法。實際上,沒有全局變量或全局作用域,所有在全局作用域中定義的屬性和函數,都是Global對象的屬性。

一、URI編碼方法
1.encodeURI()/encodeURIComponent() : 這兩個方法用於對URI進行編碼,有效的URI中不能包含某些字符,例如空格。他們用特殊的UTF-8編碼替換所有無效的字符,從而讓瀏覽器能夠接受和理解。


encodeURI(): 這個方法用於整個URI(例如,http://www.wrox.com/illegal  value.html)進行編碼
encodeURIComponent() : 這個方法只對URI中的每一段(例如: illegal  value.html)進行編碼

這兩個方法的區別是:encodeURI()不會對本身屬於URI的特殊字符進行編碼,例如冒號、正斜槓、問號、井字號
encodeURIComponent()則會對它發現的任何非標準字符進行編碼

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

//"http://www.wrox.com/illegal%20value.html#start"   空格變成了%20
console.log(encodeURI(uri));   
//"http%3A%2F%2Fwww.wrox.com%2illegal%20value.html%23start"  冒號、正斜槓、問號、井字號都被轉碼
console.log(encodeURIComponent(uri));  


2.decodeURI()與decodeURIComponent() : 這兩個方法是與encodeURI()/encodeURIComponent()對應的兩個方法,是對這兩個方法進行解碼,decodeURI()只能對encodeURI()解碼,decodeURIComponent()只能對encodeURIComponent()解碼



二、eval()方法
eval()方法支接收一個參數,即要執行的JavaScript字符串,舉個例子:

eval(alert("hello"));

這段代碼的執行結果等同於alert("hello")

當解析器調用eval()方法時,會將傳入的參數作爲實際的JavaScript語句解析,然後將執行結果插入原來的位置。通過eval()執行的代碼被認爲是包含該次調用的執行環境的一部分,因此被執行的代碼具有與該執行環境相同的作用域鏈。這意味着通過eval()執行的代碼可以引用在包含環境中定義的變量,舉個例子:

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

可見,變量msg是在eval()調用的環境之外定義的,但其中調用的alert()仍然能夠顯示"hello world"

同樣地,可以在eval()中定義一個函數,然後再在該調用的外部引用這個函數:

eval("function sayHi(){ alert ("h1")}");  sayHi();

函數sayHi()是在eval()內部定義的,但由於對eval()的調用最終會被替換成定義函數的實際代碼。

注意:在eval()中創建的任何變量或函數都不會被提升,在解析代碼時,它們被包含在一個字符串中;只有在eval()執行時才創建。




三、window對象
JavaScript沒有指出如何直接訪問Global對象,但是web瀏覽器都是將它作爲window對象的一部分加以實現的。因此,在全局作用域中聲明的所有變量和函數,都稱爲window對象的屬性。

var color="red";

function sayColor(){
alert(window.color);
}

window.sayColor(); //"red"

上面定義了一個全局變量color和全局函數sayColor()方法,在函數內部通過window.color來訪問color變量,說明全局變量color是window對象的屬性。然後通過window.sayColor()來調用sayColor()方法,說明sayColor()是window對象的方法。

另一種取得Global對象的方法是使用以下代碼:
var global = function(){
return this;
}();

this的值等於Global對象




Math類

Math對象是專門封裝數學計算的常量和API的對象,不能new,直接使用!!

一、Math對象的屬性


最常使用到的無非就是Math.PI了


二、min()和max()方法
min()和max()方法用於確定一組數值中的最小值和最大值。

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

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


三、舍入方法
Math.ceil() : 執行向上舍入,它總將數值向上舍入爲最接近的整數
Math.floor() : 執行向下舍入,它總將數值向下舍入爲最接近的整數
Math.round() : 執行四捨五入,它總將數值四捨五入爲最接近的整數

console.log(Math.ceil(25.9)); //26
console.log(Math.ceil(25.5)); //26
console.log(Math.ceil(25.1)); //26
 
console.log(Math.floor(25.9));   //25
console.log(Math.floor(25.5));   //25
console.log(Math.floor(25.1));  //25

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

舍入的比較:
1. Math.ceil()/Math.floor()    VS    str.parseInt()

前者的參數是number,且必須用Math調用,而且不能去掉以字符串結尾的非數字字符
後者的參數是string,是專門用來去掉字符結尾的非數字字符

那問題來了,如果遇到"25.67abc" 我們該怎麼轉換爲整數數字?
首選使用parseFloat
var text = parseFloat("25.67abc");
console.log(text);   //26

2.Math.round()     VS   toFixed()

前者必須用Math調用,且只能取整數,返回值是一個number,可以直接算數計算
後者可以被任何數字類型的值調用,返回值是一個string,要先轉換爲number在來計算



四、 Math.random()方法
Math.random() : 返回值是一個大於等於0小於1的一個隨機數,這個方法經常在開發中使用,專門用來隨機生產一個數字的方法

公式: 值 = Math.floor(Math.random()*可能值的總數+第一個可能的值)

使用Math.floor的原因是因爲Math.random() 總返回一個小數值

舉個例子,如果你想選取1~10之間的數值,可以這樣寫:

var num = Math.floor(Math.random()*10+1);

總共有10個可能的值,而第一個可能是1。

如果想要一個介於2~10之間的數值,可以這樣寫:

var  num =Math.floor(Math.random()*9+2);

總共有9個可能的值,而第一個可能是2。



五、其他方法
Math對象中還包含了一些與完成各種簡單或複雜計算有關的方法:


三角函數相關的方法:




發佈了47 篇原創文章 · 獲贊 107 · 訪問量 35萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章