引用類型的值(對象)是引用類型的一個實例,在ECMAScript中,引用類型是一種數(shù)據(jù)結構,用于將數(shù)據(jù)和功能組織在一起。新對象是使用new操作符后跟一個構造函數(shù)來創(chuàng)建。
var a = new Object();
5.1 Object類型
大多數(shù)引用類型都是Object類型的實例,Object也是使用的最多的引用類型。一般通過字面量創(chuàng)建。
var a = {
x: 1,
y: 2
};
一般通過點表示法訪問對象的屬性,也可以使用方括號語法,方括號語法的優(yōu)點在于可以通過變量來訪問屬性。
a.x;
a["x"];
a[name];
5.2 Array類型
ECMAScript中的數(shù)組可以保存任何類型的數(shù)據(jù),并且大小可以動態(tài)調(diào)整,可以隨著數(shù)據(jù)的添加自動增長以容納新增數(shù)據(jù)。
var a = [];
數(shù)組的項數(shù)保存在length屬性當中,這個屬性始終返回0或者更大的值,它不是只讀的,可以修改,修改它會直接修改數(shù)組的長度。
數(shù)組的最后一項索引始終是length-1,因此下一個新項的位置就是length。
5.2.1 檢測數(shù)組
對于一個網(wǎng)頁或者一個全局作用域而言,使用instanceof操作符檢測數(shù)組。
if (value instanceof Array){
// 執(zhí)行操作
}
當存在多個框架,即當存在多個全局作用域時,兩個全局作用域之間互相傳遞的數(shù)組不是來源于同一個構造函數(shù),所以會返回false。ECMAScript5新增方法isArray()用來檢測數(shù)組。
if (Array.isArray(value)){
// 執(zhí)行操作
}
5.2.2 轉(zhuǎn)換方法
數(shù)組的toString()方法返回由數(shù)組中每個值的字符串形式拼接而成,并以逗號隔開的一個字符串(實際上是每一項分別調(diào)用toString()方法后再拼接)。數(shù)組的valueOf()方法返回數(shù)組本身。toLocaleString()方法返回與toString()方法相同,區(qū)別是每一項分別調(diào)用toLocaleString()方法。
var a =[1,2,3];
console.log(a.toString()); // "1,2,3"
console.log(a.valueOf()); // [1, 2, 3]
數(shù)組的join()方法返回與toString()方法相同,但可以接收一個參數(shù),參數(shù)表示每一項之間的分隔符。
var a =[1,2,3];
console.log(a.join("|")); // 1|2|3
null和undefined的項在上述4個方法中返回空字符串。
5.2.3 棧方法
數(shù)組的push()方法可以接收任意數(shù)量的參數(shù),把它們逐個添加到數(shù)組的末尾,并返回修改后的數(shù)組的長度。而pop()方法則從數(shù)組末尾移除最后一項,減少數(shù)組的length值,然后返回移除的項
var a =[1,2,3];
var b = a.push("x","y");
var c = a.pop();
console.log(b); // 5
console.log(c); // "y"
5.2.4 隊列方法
數(shù)組的shift()方法用來移除數(shù)組的第一項并將其返回,unshift()方法用來在數(shù)組的前端添加任意項并返回新數(shù)組的長度。
var a =[1,2,3];
var b = a.shift();
var c = a.unshift("x","y");
console.log(b); // 1
console.log(c); // 4
5.2.5 重排序方法
數(shù)組的reverse()方法用來反轉(zhuǎn)整個數(shù)組的順序,并返回排序之后的數(shù)組。
var a =[1,2,3];
var b = a.reverse();
console.log(b); // [3,2,1]
數(shù)組的sort()方法在默認情況下按升序排列,即最小值在最前面,最大值在最后面,但排序時是調(diào)用每一項的toString()方法,所以"10"會在"5"的前面。sort()方法可以接收一個比較函數(shù),根據(jù)整個函數(shù)的返回值來進行排序,返回負數(shù)則表示第一個值要位于第二個值前,返回0則表示兩個值相等,返回正數(shù)則表示第一個值要位于第二個值之后。完成排序之后返回排序之后的數(shù)組。
var a =[5,1,10];
var b = a.sort();
// 默認不傳參數(shù)
console.log(b); // [1,10,5]
// 傳遞一個比較函數(shù)
var a =[5,1,10];
function arr(v1, v2) {
return v1 - v2;
}
var b = a.sort(arr);
console.log(b); // [1,5,10]
5.2.6 操作方法
數(shù)組的concat()方法可以基于當前數(shù)組中的所有項創(chuàng)建一個新數(shù)組,當未傳參數(shù)時,復制當前數(shù)組并返回副本。當傳入任意參數(shù)時,先創(chuàng)建一個當前數(shù)組的副本,然后將接收到的參數(shù)添加到這個副本的末尾,最后返回新構建的數(shù)組,參數(shù)可以是其他數(shù)組,會將其他數(shù)組的每一項都添加到創(chuàng)建的副本當中。
var a =[1,2,3];
var b = a.concat();
var c = a.concat("x",["y","z"]);
console.log(b); // [1, 2, 3]
console.log(c); // [1, 2, 3, "x", "y", "z"]
數(shù)組的slice()方法用于返回當前數(shù)組的一個部分,接收一個或兩個參數(shù),當傳入一個參數(shù)時,表示要返回的起始位置,返回從該起始位置到數(shù)組末尾的所有項。當傳入兩個參數(shù)時,返回起始位置與結束位置之間的所有項(不包括結束位置)。當傳遞的參數(shù)是負值的時候,會使用數(shù)組的長度加上該負值來確定相應的位置。如果結束位置小于起始位置,則返回空數(shù)組。
var a =[1,2,3,4,5];
var b = a.slice(1);
var c = a.slice(1,4);
var d = a.slice(-3,-1);
console.log(b); // [2, 3, 4, 5]
console.log(c); // [2, 3, 4]
console.log(d); // [3, 4]
數(shù)組的splice()方法有多種用法,主要用途是向數(shù)組的中部插入項。使用這種方法的方式有3種:
刪除:指定兩個參數(shù),要刪除的第一項的位置和要刪除的項數(shù)。返回被刪除的項組成的數(shù)組,會修改原數(shù)組。
var a =[1,2,3,4,5];
var b = a.splice(1,2);
console.log(a); // [1, 4, 5]
console.log(b); // [2, 3]
插入:提供3個參數(shù),起始位置、0(即要刪除的項數(shù)為0,表示不刪除)、要插入的項。如果要插入多個項,則繼續(xù)傳遞第4第5以至任意多項參數(shù)(傳遞的參數(shù)為數(shù)組時,不會像concat()方法一樣將數(shù)組拆散,而是直接將整個數(shù)組作為一項插入),因為沒有項被刪除,所以修改完原數(shù)組之后返回一個空數(shù)組
var a =[1,2,3,4,5];
var b = a.splice(2,0,"x",["y","z"]);
console.log(a); // [1, 2, "x", ["x","y"], 3, 4, 5]
console.log(b); // []
替換:即當插入用法中的第二個參數(shù)不為0時,先刪除對應的項,再將后續(xù)的項插入,以達到傳遞的參數(shù)項替換數(shù)組中原項的效果。
var a =[1,2,3,4,5];
var b = a.splice(2,2,"x",["y","z"]);
console.log(a); // [1, 2, "x", ["x","y"], 5]
console.log(b); // [3, 4]
上述3種用法中的第一個參數(shù)同樣接收負值,負值用法與slice()方法相同。
5.2.7 位置方法
數(shù)組有兩個位置查詢方法,indexOf()和lastIndexOf(),indexOf()表示從數(shù)組的開頭開始查詢,lastIndexOf()表示從數(shù)組的末尾開始查詢。傳入的參數(shù)為需要查詢的項,在查詢比較時,使用的是全等(===)符號,返回查詢到第一個符合條件的項的索引,未查詢到則返回-1。
var a =[1,2,3,4,5,4];
console.log(a.indexOf(4)); // 3
console.log(a.lastIndexOf(4)); // 5
console.log(a.indexOf(6)); // -1
5.2.8 迭代方法
數(shù)組有5個迭代方法,每個方法都接收兩個參數(shù):要在每一項上運行的函數(shù)和運行該函數(shù)的作用域?qū)ο螅ǖ诙€參數(shù)是可選的,主要影響第一個參數(shù)所傳的函數(shù)中的this值)。傳入的函數(shù)接收3個參數(shù):數(shù)組的項的值,該項在數(shù)組中的位置,數(shù)組本身。
every()方法:對數(shù)組的每一項運行傳入的函數(shù),若每一項都返回true,則返回true。
var a =[1,2,3,4,5];
var b = a.every(function (item,index,arr) {
return item>0;
});
console.log(b); // true
filter()方法:對數(shù)組的每一項運行傳入的函數(shù),返回該運行該函數(shù)會返回true的項組成的新數(shù)組。
var a =[1,2,3,4,5];
var b = a.filter(function (item,index,arr) {
return item>3;
});
console.log(b); // [4,5]
forEach()方法:對數(shù)組的每一項運行傳入的函數(shù),沒有返回值。
var a =[1,2,3,4,5];
a.forEach(function (item,index,arr) {
arr[index] = ++item;
});
console.log(a); // [2, 3, 4, 5, 6]
map()方法:對數(shù)組的每一項運行傳入的函數(shù),返回每次函數(shù)調(diào)用結果組成的數(shù)組。
var a =[1,2,3,4,5];
var b = a.map(function (item,index,arr) {
return item*index;
});
console.log(b); // [0, 2, 6, 12, 20]
some()方法:對數(shù)組的每一項運行傳入的函數(shù),如果該函數(shù)的任意一項返回true,則返回true
var a =[1,2,3,4,5];
var b = a.some(function (item,index,arr) {
return item>3;
});
console.log(b); // true
5.2.8 歸并方法
數(shù)組的reduce()和reduceRight()方法用來歸并數(shù)組,reduce()方法從數(shù)組的第一項開始,逐個遍歷到最后,而reduceRight()方法則從最后一項開始,逐個遍歷到第一項。兩個方法都接收兩個參數(shù):一個在每一次歸并時調(diào)用的函數(shù)和作為歸并基礎的初始值(可選)。傳給兩個方法的函數(shù)會接受4個參數(shù):前一個值,當前值,當前項的索引和數(shù)組對象,逐個函數(shù)的返回值都會作為下一次迭代時函數(shù)的第一個參數(shù),因此第一次迭代發(fā)生在數(shù)組的第二項上,第一個參數(shù)是數(shù)組第一項,第二個參數(shù)是數(shù)組第二項。
var a =[1,2,3,4,5];
var b = a.reduce(function (prev, cur, index, arr) {
return prev + cur;
});
console.log(b); // 15
5.3 Date類型
ECMAScript中的Date類型使用UTC標準來保存日期,即從1970年1月1日午夜0時開始經(jīng)過的毫秒數(shù)。
// 創(chuàng)建日期對象
var a = new Date(); // 獲取當前日期
var b = new Date("2017/09/26 12:0:0"); // 獲取指定時間,傳遞字符串參數(shù)
var c = new Date(2017,8,26,12,0,0); // // 獲取指定時間,傳遞數(shù)值參數(shù)
console.log(a); // Tue Sep 26 2017 14:27:32 GMT+0800 (中國標準時間)
console.log(b); // Tue Sep 26 2017 12:00:00 GMT+0800 (中國標準時間)
console.log(c); // Tue Sep 26 2017 12:00:00 GMT+0800 (中國標準時間)
Date.now()方法直接獲取執(zhí)行這條代碼的時的時間,返回毫秒數(shù)。
var a = Date.now();
console.log(a); // 1506407948177
5.3.1 繼承的方法
Date類型的valueOf()方法返回日期的毫秒表示,所以Date類型可以直接進行比較。
var a = new Date("2017");
var b = new Date("2016");
console.log(a>b); // true 日期越晚,毫秒數(shù)值就越大。
5.3.2 日期/時間組件方法
所有方法文檔。
主要方法有幾個:
var a =new Date();
// 返回日期毫秒數(shù)
console.log(a.getTime()); // 1506408603633
// 返回日期4位數(shù)的年份
console.log(a.getFullYear()); // 2017
// 返回日期的月份,0~11表示1月~12月
console.log(a.getMonth()); // 8
// 返回日期月份中的天數(shù),1~31
console.log(a.getDate()); // 26
// 返回日期的星期數(shù),星期日為0
console.log(a.getDay()); // 2
// 返回日期的小時數(shù),0~23
console.log(a.getHours()); // 14
// 返回日期的分數(shù),0~59
console.log(a.getMinutes()); // 50
// 返回日期的秒數(shù),0~59
console.log(a.getSeconds()); // 3
5.4 RegExp類型
見鏈接
5.5 Function類型
兩種方式定義函數(shù)
// 函數(shù)聲明
function a() {}
// 函數(shù)表達式
var a = function () {}
函數(shù)聲明會被解析器率先讀取,并使其在執(zhí)行任何代碼之前可用。表達式必須等到解析器解析到他所在的代碼行時才會執(zhí)行。
函數(shù)沒有重載,同名函數(shù)會被覆蓋。
5.5.1作為值的函數(shù)
函數(shù)本身也可以作為值來使用,不僅可以把一個函數(shù)作為參數(shù)傳遞給另一個函數(shù),而且可以將一個函數(shù)作為另一個函數(shù)的結果返回。要訪問函數(shù)的指針而不執(zhí)行函數(shù)的話,必須去掉函數(shù)名后面的那對括號。
// 定義一個根據(jù)對象的指定屬性的值來排序的函數(shù)
function pro(proName) {
return function (obj1, obj2) {
var val1 = obj1[proName];
var val2 = obj2[proName];
if(val1<val2){
return -1;
}else if(val1>val2){
return 1;
}else{
return 0;
}
}
}
var data = [{a:"x",b:2},{a:"y",b:1}];
data.sort(pro("b"));
console.log(data[0].a); // y
5.5.2 函數(shù)內(nèi)部屬性
函數(shù)內(nèi)部有兩個特殊的對象,argument和this,argument是一個類數(shù)組對象,它保存著傳入函數(shù)中的所有參數(shù),它還擁有一個callee的屬性,該屬性是一個指針,指向擁有這個argument對象的函數(shù)。
// 經(jīng)典階乘函數(shù)
function a(num) {
if(num<=1){
return 1;
}else{
return num * arguments.callee(num - 1);
}
}
console.log(a(5)); // 120
this引用的是當前函數(shù)執(zhí)行的環(huán)境對象,在全局作用域中調(diào)用函數(shù)時,this對象引用的就是window對象。
函數(shù)本身還有一個caller屬性,他表示調(diào)用當前函數(shù)的函數(shù)的引用,即是哪個函數(shù)調(diào)用了當前函數(shù)。
function a() {
console.log(arguments.callee.caller);
}
function b() {
a();
}
// 因為b函數(shù)調(diào)用了a函數(shù),所以執(zhí)行b函數(shù)時,a函數(shù)的caller屬性會指向b函數(shù)
b(); // ? b() { a(); }
argument對象還有caller屬性,但這個屬性在非嚴格模式下始終是undefined,在嚴格模式下訪問會導致錯誤,定義這個屬性是為了區(qū)分函數(shù)本身的caller屬性。
5.5.3 函數(shù)屬性和方法
函數(shù)包含兩個屬性,length和prototype,length表示函數(shù)希望接收的命名參數(shù)的個數(shù)。
函數(shù)包含兩個方法,apply()和call(),apply()方法接收兩個參數(shù),一個是在其中運行函數(shù)的作用域,另一個是函數(shù)的參數(shù)數(shù)組。第二個參數(shù)可以是Array的實例,也可以是argument對象。
var x = "xyz";
var a = {x:"abc"};
function fun() {
console.log(this.x);
}
fun(); // xyz
fun.apply(a); // abc
call()方法與apply()方法的作用相同,區(qū)別僅在于接收參數(shù)方式不同,call()方法第一個參數(shù)也是在其中運行函數(shù)的作用域,之后的參數(shù)為需要傳遞給函數(shù)的逐個參數(shù)。使用apply()和call()能夠擴充函數(shù)的運行的作用域。
ECMAScript5新定義了bind()方法,這個方法會創(chuàng)建一個函數(shù)的實例,這個函數(shù)的this值會被綁定到傳給bind()函數(shù)的值。
var a = {x:"abc"};
function fun() {
console.log(this.x);
}
var b = fun.bind(a);
// b已經(jīng)是一個函數(shù)的實例,其this值為a對象。
b(); // abc
5.6 基本包裝類型
ECMAScript提供了3個特殊的引用類型,Boolean、Number和String。這些基本包裝類型與各自的基本類型值相對應,每當讀取一個基本類型值時,后臺會自動創(chuàng)建一個對應的基本包裝類型的對象,從而讓我們能夠?qū)绢愋椭凳褂媚承┓椒?。引用類型和基本包裝類型的區(qū)別就在于對象的生存期,使用new操作符創(chuàng)建的引用類型實例,在執(zhí)行流離開當前作用域之前都一直保存在內(nèi)存中,而讀取基本類型值時創(chuàng)建的基本包裝類型的對象,在執(zhí)行代碼的瞬間結束后就被銷毀了,所以不能對基本類型值添加屬性和方法。
5.6.1 Boolean類型
永遠不要使用Boolean類型
5.6.2 Number類型
Number類型的valueOf()方法返回基本類型值的數(shù)值,toString()和toLocaleString()方法返回數(shù)值的字符串表示。
var a = 10;
console.log(a.valueOf()+10); // 20
console.log(a.toString()+10); // 1010
console.log(a.toLocaleString()+10); // 1010
toFixed()方法返回指定小數(shù)位的字符串形式,本身小數(shù)位小于參數(shù)則補0,大于參數(shù)則舍入。
var a = 10.005;
var b = 10;
console.log(a.toFixed(2)); // 10.01
console.log(b.toFixed(2)); // 10.00
toExponential()方法返回指數(shù)表示法的字符串形式。
var a = 10;
console.log(a.toExponential(2)); // 1.00e+1
toPrecision()會根據(jù)處理的數(shù)值來決定到底是使用toFixed()還是toExponential()
var a = 10;
console.log(a.toPrecision(1)); // 1e+1
console.log(a.toPrecision(2)); // 10
console.log(a.toPrecision(3)); // 10.0
5.6.3 String類型
每個String類型都有一個length屬性,表示字符串包含多少個字符。雙字節(jié)符也算一個字符。
var a = "Hello world";
console.log(a.length); // 11
字符方法:charAt()和charCodeAt(),這兩個方法接收一個參數(shù),即基于0的字符位置,charAt()返回指定位置的字符的字符串。charCodeAt()返回指定位置的字符的字符編碼。
var a = "Hello world";
console.log(a.charAt(1)); // e
console.log(a.charCodeAt(1)); // 101
字符串操作方法:concat(),用于將一個或多個字符串拼接起來,不會改變原字符串。實際操作中使用+拼接字符串更方便。
var a = "Hello";
var b = " world";
var c = "!";
var d = a.concat(b,c);
console.log(d); // Hello world!
slice()、substr()、substring()三個方法返回被操作字符串的一個子字符串,都接收一個或兩個參數(shù),第一個參數(shù)指定子字符串開始的位置,第二個參數(shù)表示子字符串到哪里結束。
slice()和substring()第二個參數(shù)指定的是子字符串最后一個字符后面的位置,substr()第二個參數(shù)指定的是返回字字符串的字符個數(shù)。如果這3個方法沒有指定第二個參數(shù),則以字符串長度作為結束位置。這3個方法都不會修改原字符串。
var a = "Hello world!";
console.log(a.slice(1,3)); // el
console.log(a.substr(1,3)); // ell
console.log(a.substring(1,3)); // el
再給這3個方法傳遞負值時,slice()方法會將傳入的負值與字符串的長度想加,substr()方法將負的第一個參數(shù)加上字符串的長度,負的第二個參數(shù)直接轉(zhuǎn)為0,substring()方法會把所有負值參數(shù)都轉(zhuǎn)為0。
var a = "Hello world!";
console.log(a.slice(-5,-1)); // orld
console.log(a.substr(-5,3)); // orld
console.log(a.substring(-5,-1)); //
substring()方法會比較兩個參數(shù),會將較小數(shù)作為起始位置,較大數(shù)作為結束位置。
var a = "Hello world!";
// 相當于調(diào)用a.substring(0,3)
console.log(a.substring(3,-4)); // Hel
字符串位置方法:indexOf()和lastIndexOf()兩個方法都是從一個字符串中搜索給定的子字符串,然后返回子字符串的位置,沒有找到則返回-1。indexOf()從開頭開始查找,lastIndexOf()從結尾開始查找。
var a = "Hello world!";
console.log(a.indexOf("o")); // 4
console.log(a.lastIndexOf("o")); // 7
兩個方法都接收第二個參數(shù),表示字符串從哪個位置開始查找,indexOf()會忽略參數(shù)之前的所有字符,lastIndexOf()會忽略參數(shù)之后的所有字符。
var a = "Hello world!";
console.log(a.indexOf("o",6)); // 7
console.log(a.lastIndexOf("o",6)); // 4
字符串去除空格方法:trim()方法用來去除字符串開頭和結尾的空格,返回的是子字符串,不會改變原字符串。
var a = " Hello world! ";
console.log(a.trim()); // Hello world!
字符串大小寫轉(zhuǎn)換方法:toLowerCase()、toUpperCase()、toLocaleLowerCase()、toLocaleUpperCase()四個方法,toLowerCase()、toUpperCase()分別用來轉(zhuǎn)化為小寫和大寫,toLocaleLowerCase()、toLocaleUpperCase()兩個方法則是針對特定地區(qū)的大小寫轉(zhuǎn)換方法。大小寫轉(zhuǎn)換返回的都是子字符串,不會改變原字符串。
var a = "Hello world!";
console.log(a.toLowerCase()); // hello world!
console.log(a.toUpperCase()); // HELLO WORLD!
字符串匹配方法,match()方法接收一個正則表達式,返回一個匹配相關數(shù)組。全局匹配時返回所有匹配成功項組成的數(shù)組。
var a = "Hello world!";
var b = a.match(/o/);
console.log(b); // ["o", index: 4, input: "Hello world!"]
var c = a.match(/o/g);
console.log(c); // ["o", "o"]
search()方法接收一個正則表達式,返回字符串中第一個匹配項的索引,沒有找到則返回-1。
var a = "Hello world!";
var b = a.search(/o/g);
console.log(b); // 4
字符串替換方法:replace(),可以接收兩個參數(shù),第一個參數(shù)可以是一個正則表達式或者一個字符串,第二個參數(shù)可以是一個字符串或者一個函數(shù)。如果第一個參數(shù)是一個字符串,則只會替換第一個匹配的子字符串,使用正則表達式并且?guī)в術標識符,才能替換全部匹配的子字符串。
var a = "cat,fat,sat,bat";
var b = a.replace(/at/g,"xy");
console.log(b); // cxy,fxy,sxy,bxy
第二個參數(shù)是一個函數(shù)時,在只有一個匹配項的情況下,會向函數(shù)傳遞3個參數(shù):模式的匹配項、模式匹配項在字符串中的位置,原始字符串。在定義了多個捕獲組的情況下,傳遞給函數(shù)的參數(shù)依次是模式的匹配項、每個捕獲組的匹配項,最后兩個參數(shù)依然是模式匹配項在字符串中的位置和原始字符串。
var a = "Hello world";
var b = a.replace(/e/,function (match,pos,str) {
console.log(match,pos,str); // e 1 Hello world
});
split()方法可以基于指定的分隔符將一個字符串分割成多個子字符串,并將結果放在一個數(shù)組中。分隔符可以是一個字符串,也可以是一個正則表達式。這個方法還接收第二個可選的參數(shù),用來限制分割后的數(shù)組長度。
var a = "cat,fat,sat,bat";
var b = a.split(",",3);
console.log(b); // ["cat", "fat", "sat"]
字符串的比較方法:localeCompare()方法用來比較兩個字符串,根據(jù)字符串在字母表中的排序來返回,小于參數(shù)則返回-1,等于參數(shù)返回0,大于參數(shù)返回1
var a = "hello";
var b = a.localeCompare("hallo");
var c = a.localeCompare("hello");
var d = a.localeCompare("hfllo");
console.log(b); // 1
console.log(c); // 0
console.log(d); // -1
String構造函數(shù)本身還有一個fromCharCode()方法,接收一個或多個字符編碼,將其轉(zhuǎn)為字符串。
var a = String.fromCharCode(104,101,108,108,111);
console.log(a); // hello
5.7 單體內(nèi)置對象
5.7.1 Global對象
在web瀏覽器中Global對象即window對象。
5.7.2 Math對象
Math對象用來保存數(shù)學公式和信息,所有屬性和方法文檔。
利用Math的求最大最小值方法來求數(shù)組中的最大最小值:
var a = [1,2,3,4,5];
var b = Math.min.apply(Math,a);
console.log(b); // 1
舍入方法:Math.ceil()執(zhí)行向上舍入,Math.floor()執(zhí)行向下舍入,Math.round()執(zhí)行標準舍入,即四舍五入。
var a = 1.5;
var b = Math.ceil(a);
var c = Math.floor(a);
var d = Math.round(a);
console.log(b); // 2
console.log(c); // 1
console.log(d); // 2
利用Math的求隨機值方法從某個范圍中取一個隨機值:
// 從1到10之間取一個隨機整數(shù)
var a = Math.floor(Math.random()*10+1);