您好,登錄后才能下訂單哦!
本篇內(nèi)容主要講解“JavaScript中的單例內(nèi)置對(duì)象Global與Math怎么使用”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“JavaScript中的單例內(nèi)置對(duì)象Global與Math怎么使用”吧!
ECMA-262 對(duì)內(nèi)置對(duì)象的定義是“任何由ECMAScript實(shí)現(xiàn)提供,與宿主環(huán)境無(wú)關(guān),并在ECMAScript 程序開(kāi)始執(zhí)行時(shí)就存在的對(duì)象”。這意味著,開(kāi)發(fā)者不用顯示的實(shí)例化內(nèi)置對(duì)象,因?yàn)樗麄円呀?jīng)實(shí)例化 好了。
Global 對(duì)象是ECMAScript 中最特別的對(duì)象,因?yàn)榇a不會(huì)顯示的訪問(wèn)它。ECMA-262 規(guī)定Global 對(duì)象為一種兜底對(duì)象,他所針對(duì)的是不屬于任何對(duì)象的屬性和方法。事實(shí)上,不存在全局變量或全局函數(shù)這種東西。在全局作用域中定義的變量和函數(shù)都會(huì)變成Global對(duì)象的屬性。包括isNaN(),isFinite(),parseInt()和parseFloat(),實(shí)際上都是Global對(duì)象的方法。除了這些,Global 對(duì)象上還有另外一些方法。
encodeURI()和encodeURIComponent()方法用于編碼統(tǒng)一資源標(biāo)識(shí)符(URI),以便傳給瀏覽器。有效的URI不能包含某些字符,比如空格。使用URI編碼方法來(lái)編碼URI可以讓瀏覽器能夠理解它們,同時(shí)又以特殊的UTF—8 編碼替換掉所有無(wú)效字符。encodeURI()方法用于對(duì)整個(gè)URI進(jìn)行編碼,比如"www.wrox.com/illegal value.js".而encodeURIComponent()方法用于編碼URI中單獨(dú)的組件,比如前面URL 中的"illegal value.js"。這兩個(gè)方法的主要區(qū)別是,encodeURI 不會(huì)編碼屬于URL組件的 特殊字符,如冒號(hào),斜杠,問(wèn)號(hào),井號(hào),二encodeURI Component()會(huì)編碼他發(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之外,沒(méi)有任何變化。而encodeURIComponent()方法將所有非字母字符都替換成了相應(yīng)的編碼形式。這就是使用encodeURI編碼整個(gè)URI,但只使用encodeURIComponent()編碼那些會(huì)追加到已有URI后面的字符串的原因。
與encodeURI() 和 encodeURIComponent()相對(duì)的是decodeURI()和decodeURIComponent().decodeURI()只對(duì)使用encodeURI()編碼過(guò)的字符解碼。例如,%20會(huì)被退換為空格,但%23不會(huì)被替換為井號(hào)(#),因?yàn)榫?hào)不是由encodeURI()替換的。類似的,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));
eval()方法可以說(shuō)是ECMAScript語(yǔ)言中最強(qiáng)大的。這個(gè)方法就是一個(gè)完整的ECMAScript解析器,它接收一個(gè)參數(shù),即一個(gè)要執(zhí)行的ECNAScript(JavaScript)字符串。
當(dāng)解釋器發(fā)現(xiàn)eval()調(diào)用時(shí),會(huì)將參數(shù)解釋為實(shí)際的ECMAScript 語(yǔ)句,然后將其插入該位置。
通過(guò)eval()執(zhí)行的代碼屬于該調(diào)用所在上下文,被執(zhí)行的代碼與該上下文擁有相同的作用域鏈。
通過(guò)eval()定義的任何變量和函數(shù)都不會(huì)被提升,這是因?yàn)樵诮馕龃a的時(shí)候,它們是被包含在一個(gè)字符串中。 由于eval()的風(fēng)險(xiǎn)性,大部分時(shí)間不會(huì)使用這個(gè)函數(shù)。
Gobal 對(duì)象由很多屬性,其中一些前面已經(jīng)提到過(guò)了。像undefined,NaN和Infinity等特殊值都是Global 對(duì)象的屬性。此外,所有原生引用類型構(gòu)造函數(shù),比如Object和Function,也都是Gobal 對(duì)象的屬性。下表列出了Global對(duì)象的屬性。
屬性 | 說(shuō)明 |
---|---|
undefined | 特殊值undefined |
NaN | 特殊值NaN |
Infinity | 特殊值Infinity |
Object | Object的構(gòu)造函數(shù) |
Array | Array的構(gòu)造函數(shù) |
Function | Function的構(gòu)造函數(shù) |
Boolean | Boolean的構(gòu)造函數(shù) |
String | String 的構(gòu)造函數(shù) |
Number | Number 的構(gòu)造函數(shù) |
Date | Date的構(gòu)造函數(shù) |
RegExp | RegExp的構(gòu)造函數(shù) |
Symbol | Symbol的偽構(gòu)造函數(shù) |
Error | Error 的構(gòu)造函數(shù) |
EvalError | EvalError 的構(gòu)造函數(shù) |
RangeError | RangeError的構(gòu)造函數(shù) |
SyntaxError | SyntaxError的構(gòu)造函數(shù) |
TypeError | TypeError的構(gòu)造函數(shù) |
URIError | URIError的構(gòu)造函數(shù) |
雖然ECMA-262 沒(méi)有規(guī)定 直接訪問(wèn)Global 對(duì)象的方式,但瀏覽器將window對(duì)象實(shí)現(xiàn)為Global對(duì)象的代理。因此全局作用域中的變量和函數(shù)都變成了window對(duì)象的屬性。
var color = "red"; function sayColor() { cosole.log(window.color); } window.sayColor();// “red”
另外一種獲取Global 對(duì)象的方式是使用如下的代碼:
let global = function () { return this; }();
這段代碼創(chuàng)建一個(gè)立即調(diào)用的函數(shù)表達(dá)式,返回了this的值。當(dāng)一個(gè)函數(shù)沒(méi)有明確(通過(guò)稱為某個(gè)對(duì)象的方法,或者通過(guò)call()/apply())指定this值的情況下執(zhí)行時(shí),this值等于Global 對(duì)象。
ECMAScript 提供了Math 對(duì)象作為保存數(shù)學(xué)公式,信息和計(jì)算的地方。Math對(duì)象提供了一些輔助計(jì)算的屬性和方法。
Math對(duì)象上提供的計(jì)算要比直接在JavaScript 實(shí)現(xiàn)的快的多,因?yàn)镸ath 對(duì)象上的計(jì)算使用了JavaScript 引擎中更高效的實(shí)現(xiàn)和處理器指令。但使用Math計(jì)算的問(wèn)題時(shí)精確度會(huì)因?yàn)g覽器,操作系統(tǒng),指令集和硬件而異。
屬性 | 說(shuō)明 |
---|---|
Math.E | 自然對(duì)數(shù)的基數(shù)e的值 |
Math.LN10 | 10為底的自然數(shù)對(duì) |
Math.LN2 | 2為底的自然對(duì)數(shù) |
Math.LOG2E | 以2為底e的對(duì)數(shù) |
Math.LOG10E | 以10為底e的對(duì)數(shù) |
Math.PI | pi的值 |
Math.SQRT1_2 | 1/2的平方根 |
Math.SQRT2 | 2的平方根 |
Math對(duì)象也提供了很多付諸執(zhí)行簡(jiǎn)單或復(fù)雜數(shù)據(jù)計(jì)算的方法。 min()和max()方法用于確定一組數(shù)值中的最小值和最大值。這兩個(gè)方法接收任意多個(gè)參數(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
Math.ceil(),Math.floor(),Math.round(),Math.fround() 是把小數(shù)舍入為整數(shù)的4個(gè)方法。
Math.ceil()方法始終向上舍入為最接近的整數(shù)。
Math.floor() 方法始終向下舍入為最接近的整數(shù)。
Math.round() 方法執(zhí)行四舍五入。
Math.fround()方法返回?cái)?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
Math.random()方法返回一個(gè)0~1范圍內(nèi)的隨機(jī)數(shù),其中包含0 但不包含1。可以基于一下公式使用Math.random()從一組整數(shù)種隨機(jī)選擇一個(gè)數(shù):
number = Math.floor(Math.random() * totoal_number_of_choices + first_possible_value)
這里使用了Math.floor()方法,因?yàn)镸ath.random()始終返回小數(shù),即便成一個(gè)數(shù)再加上一個(gè)數(shù)也是小數(shù)。因此,如果想從1~10范圍內(nèi)隨機(jī)選擇一個(gè)數(shù),代碼就是這樣的
let num = Math.floor(Math.random() * 10 + 1);
可以通過(guò)下面的通用函數(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的其他方法
方法 | 說(shuō)明 |
---|---|
Math.abs(x) | 返回x的絕對(duì)值 |
Math.exp(x) | 返回Math.E的x次冪 |
Math.expm1(x) | 等于Math.exp(x) -1 |
Math.log(x) | 返回x的自然對(duì)數(shù) |
Math.log1p | 等于1 + Math.log(x) |
Math.pow(x,power) | 返回x的power次冪 |
Math.hypot(..nums) | 返回nums中每個(gè)數(shù)平方和的平方根 |
Math.clz32(x) | 返回32位整數(shù)x的前置零的數(shù)量 |
Math.sign(x) | 返回x符號(hào)的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的正切 |
到此,相信大家對(duì)“JavaScript中的單例內(nèi)置對(duì)象Global與Math怎么使用”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是億速云網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!
免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如果涉及侵權(quán)請(qǐng)聯(lián)系站長(zhǎng)郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。