欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

JavaScript?中的單例內(nèi)置對象Global?與?Math

 更新時間:2022年07月21日 08:32:59   作者:??方木頭?  
這篇文章主要介紹了JavaScript?中的單例內(nèi)置對象Global與Math,文章圍繞主題展開詳細(xì)的內(nèi)容介紹,具有一定的參考價值,需要的小伙伴可以參考一下

前言

ECMA-262 對內(nèi)置對象的定義是“任何由ECMAScript實(shí)現(xiàn)提供,與宿主環(huán)境無關(guān),并在ECMAScript 程序開始執(zhí)行時就存在的對象”。這意味著,開發(fā)者不用顯示的實(shí)例化內(nèi)置對象,因?yàn)樗麄円呀?jīng)實(shí)例化 好了。

Global

Global 對象是ECMAScript 中最特別的對象,因?yàn)榇a不會顯示的訪問它。ECMA-262 規(guī)定Global 對象為一種兜底對象,他所針對的是不屬于任何對象的屬性和方法。事實(shí)上,不存在全局變量或全局函數(shù)這種東西。在全局作用域中定義的變量和函數(shù)都會變成Global對象的屬性。包括isNaN(),isFinite(),parseInt()和parseFloat(),實(shí)際上都是Global對象的方法。除了這些,Global 對象上還有另外一些方法。

1.URL編碼方法

encodeURI()和encodeURIComponent()方法用于編碼統(tǒng)一資源標(biāo)識符(URI),以便傳給瀏覽器。有效的URI不能包含某些字符,比如空格。使用URI編碼方法來編碼URI可以讓瀏覽器能夠理解它們,同時又以特殊的UTF—8 編碼替換掉所有無效字符。encodeURI()方法用于對整個URI進(jìn)行編碼,比如"www.wrox.com/illegal value.js".而encodeURIComponent()方法用于編碼URI中單獨(dú)的組件,比如前面URL 中的"illegal value.js"。這兩個方法的主要區(qū)別是,encodeURI 不會編碼屬于URL組件的 特殊字符,如冒號,斜杠,問號,井號,二encodeURI Component()會編碼他發(fā)現(xiàn)的所有非標(biāo)準(zhǔn)字符。

let uri = "http://www.wrox.com/illegal value.js#start";

//http://www.wrox.com/illegal%20value.js#start
console.log(encodeURI(uri));

//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start
console.log(encodeURIComponent(uri));

這里使用encodeURI()編碼后,除空格被替換為%20之外,沒有任何變化。而encodeURIComponent()方法將所有非字母字符都替換成了相應(yīng)的編碼形式。這就是使用encodeURI編碼整個URI,但只使用encodeURIComponent()編碼那些會追加到已有URI后面的字符串的原因。
與encodeURI() 和 encodeURIComponent()相對的是decodeURI()和decodeURIComponent().decodeURI()只對使用encodeURI()編碼過的字符解碼。例如,%20會被退換為空格,但%23不會被替換為井號(#),因?yàn)榫柌皇怯蒭ncodeURI()替換的。類似的,decodeURIComponent()解碼所有被encodeURIComponent()編碼的字符,基本上就是解碼所有特殊值。

let uri = "http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start";

//http%3A%2F%2Fwww.wrox.com%2Fillegal%20value.js%23start
console.log(decodeURI(uri));

//http://www.wrox.com/illegal value.js#start
console.log(encodeURIComponent(uri));

2.eval()方法

eval()方法可以說是ECMAScript語言中最強(qiáng)大的。這個方法就是一個完整的ECMAScript解析器,它接收一個參數(shù),即一個要執(zhí)行的ECNAScript(JavaScript)字符串。
當(dāng)解釋器發(fā)現(xiàn)eval()調(diào)用時,會將參數(shù)解釋為實(shí)際的ECMAScript 語句,然后將其插入該位置。
通過eval()執(zhí)行的代碼屬于該調(diào)用所在上下文,被執(zhí)行的代碼與該上下文擁有相同的作用域鏈
通過eval()定義的任何變量和函數(shù)都不會被提升,這是因?yàn)樵诮馕龃a的時候,它們是被包含在一個字符串中。 由于eval()的風(fēng)險性,大部分時間不會使用這個函數(shù)。

3.Gobal對象屬性

Gobal 對象由很多屬性,其中一些前面已經(jīng)提到過了。像undefined,NaN和Infinity等特殊值都是Global 對象的屬性。此外,所有原生引用類型構(gòu)造函數(shù),比如Object和Function,也都是Gobal 對象的屬性。下表列出了Global對象的屬性。

屬性說明
undefined特殊值undefined
NaN特殊值NaN
Infinity特殊值Infinity
ObjectObject的構(gòu)造函數(shù)
ArrayArray的構(gòu)造函數(shù)
FunctionFunction的構(gòu)造函數(shù)
BooleanBoolean的構(gòu)造函數(shù)
StringString 的構(gòu)造函數(shù)
NumberNumber 的構(gòu)造函數(shù)
DateDate的構(gòu)造函數(shù)
RegExpRegExp的構(gòu)造函數(shù)
SymbolSymbol的偽構(gòu)造函數(shù)
ErrorError 的構(gòu)造函數(shù)
EvalErrorEvalError 的構(gòu)造函數(shù)
RangeErrorRangeError的構(gòu)造函數(shù)
SyntaxErrorSyntaxError的構(gòu)造函數(shù)
TypeErrorTypeError的構(gòu)造函數(shù)
URIErrorURIError的構(gòu)造函數(shù)

4.window 對象

雖然ECMA-262 沒有規(guī)定 直接訪問Global 對象的方式,但瀏覽器將window對象實(shí)現(xiàn)為Global對象的代理。因此全局作用域中的變量和函數(shù)都變成了window對象的屬性。

var color = "red";

function sayColor() {
    cosole.log(window.color);
}

window.sayColor();// “red”

另外一種獲取Global 對象的方式是使用如下的代碼:

let global = function () {
    return this;
}();

這段代碼創(chuàng)建一個立即調(diào)用的函數(shù)表達(dá)式,返回了this的值。當(dāng)一個函數(shù)沒有明確(通過稱為某個對象的方法,或者通過call()/apply())指定this值的情況下執(zhí)行時,this值等于Global 對象。

Math

ECMAScript 提供了Math 對象作為保存數(shù)學(xué)公式,信息和計(jì)算的地方。Math對象提供了一些輔助計(jì)算的屬性和方法。
Math對象上提供的計(jì)算要比直接在JavaScript 實(shí)現(xiàn)的快的多,因?yàn)镸ath 對象上的計(jì)算使用了JavaScript 引擎中更高效的實(shí)現(xiàn)和處理器指令。但使用Math計(jì)算的問題時精確度會因?yàn)g覽器,操作系統(tǒng),指令集和硬件而異。

1.Math 對象屬性

屬性說明
Math.E自然對數(shù)的基數(shù)e的值
Math.LN1010為底的自然數(shù)對
Math.LN22為底的自然對數(shù)
Math.LOG2E以2為底e的對數(shù)
Math.LOG10E以10為底e的對數(shù)
Math.PIpi的值
Math.SQRT1_21/2的平方根
Math.SQRT22的平方根

2.min()和max()方法

Math對象也提供了很多付諸執(zhí)行簡單或復(fù)雜數(shù)據(jù)計(jì)算的方法。 min()和max()方法用于確定一組數(shù)值中的最小值和最大值。這兩個方法接收任意多個參數(shù)。

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

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

要知道數(shù)組中的最大值和最小值,可以像下面這樣使用拓展操作符:

let values = [1,2,3,4,5,5,6,7,8];
let max = Math.max(...values);// 8

3.舍入方法 Math.ceil(),Math.floor(),Math.round(),Math.fround()

Math.ceil(),Math.floor(),Math.round(),Math.fround() 是把小數(shù)舍入為整數(shù)的4個方法。

Math.ceil()方法始終向上舍入為最接近的整數(shù)。

Math.floor() 方法始終向下舍入為最接近的整數(shù)。

Math.round() 方法執(zhí)行四舍五入。

Math.fround()方法返回數(shù)值最接近的單精度(32位)浮點(diǎn)值表示。

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

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

console.log(Math.fround(0.4));//0.4000000059604645
console.log(Math.fround(0.5));// 0.5
console.log(Math.fround(25.9));// 25.899999618530273

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

random()方法

Math.random()方法返回一個0~1范圍內(nèi)的隨機(jī)數(shù),其中包含0 但不包含1??梢曰谝幌鹿绞褂肕ath.random()從一組整數(shù)種隨機(jī)選擇一個數(shù):

number = Math.floor(Math.random() * totoal_number_of_choices + first_possible_value)

這里使用了Math.floor()方法,因?yàn)镸ath.random()始終返回小數(shù),即便成一個數(shù)再加上一個數(shù)也是小數(shù)。因此,如果想從1~10范圍內(nèi)隨機(jī)選擇一個數(shù),代碼就是這樣的

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

可以通過下面的通用函數(shù)計(jì)算出可選總數(shù)和最小可能的值:

function selectFrom(lowerValue,upperValue){
    let choices = upperValue - lowerValue + 1;
    return Math.floor(Math.random() * choices + lowerValue);
}
let num = selectFrom(2,10);
console.log(2,10);

Math的其他方法

方法說明
Math.abs(x)返回x的絕對值
Math.exp(x)返回Math.E的x次冪
Math.expm1(x)等于Math.exp(x) -1
Math.log(x)返回x的自然對數(shù)
Math.log1p等于1 + Math.log(x)
Math.pow(x,power)返回x的power次冪
Math.hypot(..nums)返回nums中每個數(shù)平方和的平方根
Math.clz32(x)返回32位整數(shù)x的前置零的數(shù)量
Math.sign(x)返回x符號的1,0,-0或 -1
Math.trunc(x)返回x的整數(shù)部分,刪除所有小數(shù)
Math.sqrt(x)返回x的平方根
Math.cbrt(x)返回x的立方根
Math.acos(x)返回x的反余弦
Math.acosh(x)返回x的反雙曲余弦
Math.asin(x)返回x的反正弦
Math.asinh(x)返回x的反雙曲正弦
Math.atan(x)返回x的反正切
Math.atanh(x)返回x的反雙曲正切
Math.atan2(y,x)返回y/x的反正切
Math.cos(x)返回x的余弦
Math.sin(x)返回x的正弦
Math.tan(x)返回x的正切

到此這篇關(guān)于JavaScript 中的單例內(nèi)置對象Global 與 Math的文章就介紹到這了,更多相關(guān)JavaScript 單例內(nèi)置對象內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

最新評論