JavaScript內置對象--單體內置對象(Global、Math)詳解
官方對於"單體"二字其實沒有顯性的表達,看了很多書籍和大牛的網站,都是含糊兩口,其實就我自己也沒完全搞清楚這個幾個名詞,“引用類型”,“單體”內置對象,"內置對象"這些詞的區別,按介紹說,內置對象是不依賴於宿主環境的對象,這些對象在程序執行之前就已經存在了,開發人員不必顯示地實例化內置對象,因爲它們已經實例化了。
簡而言之,單體內置對象是不需要通過new來實例化的,例如我們的string可以new,但是Math是不要new的,因爲可以直接使用Math的API。
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對象是專門封裝數學計算的常量和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對象中還包含了一些與完成各種簡單或複雜計算有關的方法:
三角函數相關的方法:
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.