JavaScript引用類型——「單體內置對象」的注意要點

單體內置對象

單體內置對象就是開發人員沒必要顯式地實例化內置對象,由於他們已經實例化了。前面的章節討論過了大多數內置對象,ECMA-262 還定義了兩個單體內置對象:Global 和Math。html

Global 對象

全部在全局做用域中定義的屬性和函數,都是Global 對象的屬性。數組

URI 編碼方法

encodeURI()encodeURIComponent()decodeURI()decodeURIComponent()方法。以下:瀏覽器

var uri = "http://www.bai du.com";
console.log(encodeURI(uri));
console.log(encodeURIComponent(uri));

/*
[Log] http://www.bai%20du.com (repetition.html, line 16)
[Log] http%3A%2F%2Fwww.bai%20du.com (repetition.html, line 17)
*/

var uri = "http%3A%2F%2Fwww.bai%20du.com";
console.log(decodeURI(uri));
console.log(decodeURIComponent(uri));    
/*
[Log] http%3A%2F%2Fwww.bai du.com (repetition.html, line 16)
[Log] http://www.bai du.com (repetition.html, line 17)
*/

eval 方法(防止代碼注入,應該謹慎使用)

這個方法就是一個完整的解析器,它只接受一個參數,即要執行的ECMAScript(JavaScript)字符串。被執行的代碼具備與該執行環境相同的做用域鏈。這意味着經過eval()執行的代碼能夠引用在包含環境中定義的變量,且在該方法中建立的任何變量或者函數都不會被提高。如:app

eval("function hi(){console.log('hi')}");
hi();

var num = 100;
eval("document.write(num);");

eval("var num = 110;");
document.write(num);

謹慎使用!
特別是他在執行用戶數據輸入的狀況下,後果可能很是嚴重。dom

Global 對象的屬性

下面的網頁列出Global 對象的全部屬性:
JavaScript Global 對象函數

Window 對象(之後再詳細討論)

EFMAScript 雖然沒有給出如何直接訪問Global 對象,可是Web 瀏覽器都是將這個全局對象做爲window 對象的一部分加以實現的。所以,在全局做用域中聲明的全部變量和函數,都成爲了window 對象的屬性。如:this

var color = "red";
var func = function(){
    document.write("func function");
};

console.log(window.color); //red
window.func(); //func function

建立一個當即調用的函數表達式:編碼

var global = function(){
    document.write("func")
}();

(
    function(){
        document.write("func")
    }
)();

上下兩種均可以。具體之後討論函數表達式。.net

Math 對象

ECMAScript 還爲保存了數學公式和信息提供了一個公共位置,即Math 對象。code

Math 對象的屬性

主要有:

  • Math.E(天然對數的底數,即e 的值)

  • Math.LN10(10 的天然對數)

  • Math.LN2(2 的天然對數)

  • Math.LOG2E(以2 爲底e 的對數)

  • Math.LOG10E(以10 爲底e 的對數)

  • Math.PI(π 的值)

  • Math.SQRT1_2(1/2 的平方根即2 的平方根的倒數)

  • Math.SQRT2(2 的平方根)

min()max()方法

這兩個方法對於肯定一組數值中的最小和最大值很是好用。兩個方法均可以接收任意多個數值。如:

var maxValue = Math.max(321,3,1);
console.log(maxValue); //321

那麼如何提取出數組裏面的最大值或最小值呢?

var valuesArray = [32,13,214,32,5432,1];
var maxValue = Math.max.apply(this,valuesArray);
document.write(maxValue); //5432

使用apply()方法能夠很輕鬆的改變this 值。能夠將任何數組座位第二個參數。

又如:

var valuesArray = [1,321,21,3,3];
function sum(){
    console.log(arguments.length);
    var max = Math.max.apply(this,arguments);
    console.log(max);
}
sum.apply(this,valuesArray);

舍入方法

Math.ceil()Math.floor()Math.round()三個方法分別遵循下面的規則:

  • Math.ceil()(向上舍入)

  • Math.round()(標準舍入-四捨五入)

  • Math.floor()(向下舍入)

random()方法

Math.random()方法返回大於等於0 小於1 的一個隨機數。如:

console.log(Math.random());

能夠利用某個整數範圍內隨機選擇一個數值:

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

好比想要隨機選擇一個1-10之間的隨機數,就能夠寫成:

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

若是是想隨機選擇一個2-4之間的隨機數,就能夠寫成:

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

也能夠經過一個函數來自動生成隨機數,沒必要計算可能的值的範圍。如:

function selectFrom(lowerValue,upperValue){
    return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
}

經過上面這個函數,能夠隨機訪問Array 的數值。如:

var valuesArray = ["BMW","Audi","Benz"];

function selectFrom(lowerValue,upperValue){
    return Math.floor(Math.random() * (upperValue - lowerValue + 1) + lowerValue);
}

var selectValue = valuesArray[selectFrom(0,valuesArray.length - 1)];
console.log(selectValue);

其餘方法

JavaScript Math 對象

相關文章
相關標籤/搜索