Math對象
Math對象不是構(gòu)造函數(shù),不需要創(chuàng)建對象详恼,它是一個工具類补君,具有數(shù)學(xué)常數(shù)和函數(shù)的屬性和方法,都是以靜態(tài)成員的方式提供昧互,跟數(shù)學(xué)相關(guān)的運算就來找Math中的成員(求絕對值赚哗,取整等)
常見方法如下她紫,
方法 | 描述 | 備注 |
---|---|---|
Math.PI | 圓周率 | Math對象的屬性 |
Math.abs() | 返回絕對值 | 參數(shù)中可以接收字符串類型的數(shù)字,此時會將字符串做隱式類型轉(zhuǎn)換屿储,然后再調(diào)用 Math.abs() 方法贿讹。傳入不能轉(zhuǎn)換成number類型的數(shù)字,返回NaN |
Math.random() | 生成0-1之間的隨機(jī)浮點數(shù) | 生成 [x, y) 之間的隨機(jī)數(shù):Math.round(Math.random()*(y-x)+x)够掠;生成 [x, y]:Math.random() * (max - min + 1)) + min |
Math.floor() | 向下取整(往小取值) | |
Math.ceil() | 向上取整(往大取值) | |
Math.round() | 四舍五入取整 | |
Math.max(x, y, z) | 返回多個數(shù)中的最大值 | |
Math.min(x, y, z) | 返回多個數(shù)中的最小值 | |
Math.pow(x,y) | 乘方:返回 x 的 y 次冪 | |
Math.sqrt() | 開方:對一個數(shù)進(jìn)行開方運算 |
舉幾個例子
//Math.abs() 獲取絕對值
Math.abs(-12) = 12
//Math.ceil() and Math.floor() 向上取整和向下取整
console.log(Math.ceil(12.03));//13
console.log(Math.ceil(12.92));//13
console.log(Math.floor(12.3));//12
console.log(Math.floor(12.9));//12
//Math.random()取[0,1)的隨機(jī)小數(shù)
console.log(parseInt(Math.random()*10));//未包含10
console.log(parseInt(Math.random()*10+1));//包含10
/*Math.round() 四舍五入,正數(shù)時民褂,包含5是向上取整,負(fù)數(shù)時不包含5是向下取整疯潭。*/
var a = Math.round(-16.3) //= -16
var b = Math.round(-16.5) //= -16
var c = Math.round(-16.51) //= -17
Number對象
Number.isInteger()
Number.isInteger() 判斷是否為整數(shù)判斷是否為整數(shù)赊堪,
布爾值 = Number.isInteger(數(shù)字);
我們順便來了解一下toFixed()方法,
字符串 = myNum.toFixed(num);
將數(shù)字 myNum 的小數(shù)點后面保留 num 位小數(shù)(四舍五入)竖哩,并返回哭廉。不會改變原數(shù)字。注意相叁,返回結(jié)果是字符串遵绰。參數(shù) num:指定了小數(shù)點后面的位數(shù)。
Date對象
內(nèi)置對象 Date 用來處理日期和時間增淹。與 Math 對象不同椿访,Date 對象是一個構(gòu)造函數(shù) ,需要先實例化后才能使用虑润。Date 對象基于1970年1月1日(世界標(biāo)準(zhǔn)時間)起的毫秒數(shù)成玫。
創(chuàng)建Date對象
Date的參數(shù)為空的構(gòu)造函數(shù)
參數(shù)為空,返回當(dāng)前時間的毫秒數(shù)
// 獲取當(dāng)前時間拳喻,UTC世界時間哭当,距1970年1月1日(世界標(biāo)準(zhǔn)時間)起的毫秒數(shù)
var now = new Date();
console.log(now.valueOf()); // 獲取距1970年1月1日(世界標(biāo)準(zhǔn)時間)起的毫秒數(shù)
如果Date()里面寫參數(shù),就返回括號里輸入的時間對象
通過傳參的這種寫法冗澈,我們可以把時間字符串/時間數(shù)字/時間戳钦勘,按照指定的格式,轉(zhuǎn)換為時間對象渗柿。
// 1. 毫秒數(shù) 1498099000356
var dateNow = new Date(1597758288773);
console.log(dateNow.valueOf());
//2. 日期格式字符串 '2020-8-18'
var date1 = new Date('2020-8-18')
console.log(date1.valueOf());
// 3. 年个盆、月脖岛、日……
var date2 = new Date(2020, 7, 18) // 月份從0開始,代表8月份
console.log(date2.valueOf());
這只是其中的一部分朵栖,Date的構(gòu)造函數(shù)有很多,參數(shù)可以是字符串柴梆,數(shù)字和時間戳陨溅。
日期的格式化
我們獲取到了 Date 對象,但這個對象绍在,打印出來的結(jié)果并不是特別直觀门扇。如果我們需要獲取日期的指定部分雹有,就需要用到 Date對象自帶的方法。獲取了日期指定的部分之后臼寄,我們就可以讓日期按照指定的格式霸奕,進(jìn)行展示(即日期的格式化)。
Date對象的方法
方法名 | 含義 | 備注 |
---|---|---|
getFullYear() | 獲取年份 | |
getMonth() | 獲取月: 0-11 | 0代表一月 |
getDate() | 獲取日:1-31 | 獲取的是幾號 |
getDay() | 獲取星期:0-6 | 0代表周日吉拳,1代表周一 |
getHours() | 獲取小時:0-23 | |
getMinutes() | 獲取分鐘:0-59 | |
getSeconds() | 獲取秒:0-59 | |
getMilliseconds() | 獲取毫秒 1s = 1000ms | |
getTime() | 獲取當(dāng)前時間戳 |
獲取Date時間戳的寫法
// 方式一:獲取 Date 對象的時間戳(最常用的寫法)
const timestamp1 = +new Date();
console.log(timestamp1);
// 方式二:獲取 Date 對象的時間戳(較常用的寫法)
const timestamp2 = new Date().getTime();
console.log(timestamp2);
// 方式三:獲取 Date 對象的時間戳
const timestamp3 = new Date().valueOf();
console.log(timestamp3);
// 方式4:獲取 Date 對象的時間戳
const timestamp4 = new Date() * 1;
console.log(timestamp4);
// 方式5:獲取 Date 對象的時間戳
const timestamp5 = Number(new Date());
console.log(timestamp5);
// 方式六:獲取當(dāng)前時間的時間戳(很常用的寫法)
console.log(Date.now()); // 打印結(jié)果舉例:1589448165370
***我們可以在業(yè)務(wù)代碼的前面定義 時間戳1质帅,在業(yè)務(wù)代碼的后面定義 時間戳2。把這兩個時間戳相減留攒,就能得出業(yè)務(wù)代碼的執(zhí)行時間煤惩。****
format格式化時間
我們可以轉(zhuǎn)換為指定的時間格式,語法如下炼邀,
var time1 = new Date().format("yyyy-MM-dd hh:mm:ss");
console.log(time1);
Moment.js
Moment.js 是一個輕量級的JavaScript時間庫魄揉,我們可以利用它很方便地進(jìn)行時間操作,提升開發(fā)效率拭宁。
中文官網(wǎng):http://momentjs.cn/
Array對象
創(chuàng)建數(shù)組除了字面量的方式洛退,我們還可以使用new Array()來創(chuàng)建
// 1. 使用構(gòu)造函數(shù)創(chuàng)建數(shù)組對象
// 創(chuàng)建了一個空數(shù)組
var arr = new Array();
// 創(chuàng)建了一個數(shù)組,里面存放了3個字符串
var arr = new Array('zs', 'ls', 'ww');
// 創(chuàng)建了一個數(shù)組红淡,里面存放了4個數(shù)字
var arr = new Array(1, 2, 3, 4);
數(shù)組中常見的方法
數(shù)組類型相關(guān)
方法 | 描述 |
---|---|
Array.isArray() | 判斷是否為數(shù)組 |
toString() | 將數(shù)組轉(zhuǎn)換為字符串不狮,中間以,分割 |
valueof() | 返回數(shù)組本身 |
Array.from(arrayLike) | 將偽數(shù)組轉(zhuǎn)化為真數(shù)組 |
Array.of(value1, value2, value3) | 創(chuàng)建數(shù)組:將一系列值轉(zhuǎn)換成數(shù)組 |
注意在旱,Array.isArray()是h5的新特性摇零,可能會有兼容性問題,我們可以使用instanceof來判斷是否是一個數(shù)組桶蝎。
數(shù)組常見方法
具體的使用可以參考:https://www.runoob.com/jsref/jsref-obj-array.html
toString():數(shù)組轉(zhuǎn)換為字符串
備注:大多數(shù)的數(shù)據(jù)類型都可以使用.toString()方法驻仅,將其轉(zhuǎn)換為字符串。
字符串 = String(數(shù)組);也可以把數(shù)組轉(zhuǎn)化成字符串登渣。
Array.from():將偽數(shù)組轉(zhuǎn)換為真數(shù)組
array = Array.from(arrayLike);
偽數(shù)組包含 length 屬性的對象或可迭代的對象噪服。另外,偽數(shù)組的原型鏈中沒有 Array.prototype胜茧,而真數(shù)組的原型鏈中有 Array.prototype粘优。因此偽數(shù)組沒有數(shù)組的一般方法,比如 pop()呻顽、join() 等方法雹顺。如,我們通過getElementsByTagName獲取到的數(shù)組實際上是偽數(shù)組廊遍,可以使用from方法轉(zhuǎn)換成真數(shù)組嬉愧。
Array.of():創(chuàng)建數(shù)組
//Array.of(value1, value2, value3);
const arr = Array.of(1, 'abc', true);
console.log(arr); // 打印結(jié)果是數(shù)組:[1, "abc", true]
new Array()和 Array.of()的區(qū)別在于:當(dāng)參數(shù)只有一個時,前者表示數(shù)組的長度喉前,后者表示數(shù)組中的內(nèi)容没酣。
向數(shù)組中添加和刪除元素
push
向數(shù)組的最后面插入一個或多個元素王财,返回結(jié)果為新數(shù)組的長度。
新數(shù)組的長度 = 數(shù)組.push(元素);
pop()
刪除數(shù)組中的最后一個元素裕便,返回結(jié)果為被刪除的元素绒净。
被刪除的元素 = 數(shù)組.pop();
unshift()
在數(shù)組最前面插入一個或多個元素,返回結(jié)果為新數(shù)組的長度偿衰。插入元素后疯溺,其他元素的索引會依次調(diào)整。
新數(shù)組的長度 = 數(shù)組.unshift(元素);
shift()
刪除數(shù)組中的第一個元素哎垦,返回結(jié)果為被刪除的元素囱嫩。
被刪除的元素 = 數(shù)組.shift();
slice()
從數(shù)組中提取指定的一個或者多個元素,返回結(jié)果為新的數(shù)組(不會改變原來的數(shù)組)漏设。
//新數(shù)組 = 原數(shù)組.slice(開始位置的索引, 結(jié)束位置的索引); //注意:包含開始索引墨闲,不包含結(jié)束索引
const arr = ['a', 'b', 'c', 'd', 'e', 'f'];
const result1 = arr.slice(); // 不加參數(shù)時,則獲取所有的元素郑口。相當(dāng)于數(shù)組的整體賦值
const result2 = arr.slice(2); // 從第二個值開始提取鸳碧,直到末尾
const result3 = arr.slice(-2); // 提取最后兩個元素
const result4 = arr.slice(2, 4); // 提取從第二個到第四個之間的元素(不包括第四個元素)
const result5 = arr.slice(4, 2); // 空
splice()
從數(shù)組中刪除指定的一個或多個元素,返回結(jié)果為被刪除元素組成的新數(shù)組(會改變原來的數(shù)組)犬性。改方法會改變原數(shù)組瞻离。
//新數(shù)組 = 原數(shù)組.splice(起始索引index, 需要刪除的個數(shù));
//新數(shù)組 = 原數(shù)組.splice(起始索引index, 需要刪除的個數(shù), 新的元素1, 新的元素2...);
上方語法中,第三個及之后的參數(shù)乒裆,表示:刪除元素之后套利,向原數(shù)組中添加新的元素,這些元素將會自動插入到起始位置索引的前面鹤耍。也可以理解成:刪除了哪些元素肉迫,就在那些元素的所在位置補充新的內(nèi)容。
fill()
用一個固定值填充數(shù)組稿黄,返回結(jié)果為新的數(shù)組喊衫。不會改變原數(shù)組。
// 用一個固定值填充數(shù)組杆怕。數(shù)組里的每個元素都會被這個固定值填充
新數(shù)組 = 數(shù)組.fill(固定值);
// 從 startIndex 開始的數(shù)組元素族购,用固定值填充
新數(shù)組 = 數(shù)組.fill(固定值, startIndex);
// 從 startIndex 到 endIndex 之間的元素(包左不包右),用固定值填充
新數(shù)組 = 數(shù)組.fill(固定值, startIndex, endIndex);
// 創(chuàng)建一個長度為4的空數(shù)組陵珍,然后用 'f' 來填充這個空數(shù)組
console.log(Array(4).fill('f')); // ['f', 'f', 'f,' 'f']
// 將現(xiàn)有數(shù)組的每一個元素都進(jìn)行填充
console.log(['a', 'b', 'c', 'd'].fill('f')); // ['f', 'f', 'f,' 'f']
// 指定位置進(jìn)行填充
console.log(['a', 'b', 'c', 'd'].fill('f', 1, 3)); // ["a", "f", "f", "d"]
數(shù)組的拆分與合并
concat()
連接兩個或多個數(shù)組寝杖,返回結(jié)果為新的數(shù)組。不會改變原數(shù)組撑教。concat()方法的作用是數(shù)組合并朝墩。
新數(shù)組 = 數(shù)組1.concat(數(shù)組2, 數(shù)組3 ...);
join
//將數(shù)組轉(zhuǎn)換為字符串醉拓,返回結(jié)果為轉(zhuǎn)換后的字符串(不會改變原來的數(shù)組)伟姐。
新的字符串 = 原數(shù)組.join(參數(shù)); // 參數(shù)選填
join()方法可以指定一個字符串作為參數(shù)收苏,這個字符串將會成為數(shù)組中元素的連接符;如果不指定連接符愤兵,則默認(rèn)使用 , 作為連接符鹿霸,此時和 toString()的效果是一致的。
split()
通過指定的分隔符秆乳,將一個字符串拆分成一個數(shù)組懦鼠。不會改變原字符串
新的數(shù)組 = str.split(分隔符);
split()是字符串的方法,不是數(shù)組的方法屹堰。
reverse()
反轉(zhuǎn)數(shù)組肛冶,返回結(jié)果為反轉(zhuǎn)后的數(shù)組(會改變原來的數(shù)組)。
反轉(zhuǎn)后的數(shù)組 = 數(shù)組.reverse();
sort
對數(shù)組的元素進(jìn)行從小到大來排序(會改變原來的數(shù)組)扯键。
- sort()方法:無參時
如果在使用 sort() 方法時不帶參睦袖,則默認(rèn)按照Unicode 編碼,從小到大進(jìn)行排序荣刑。
let arr1 = ['e', 'b', 'd', 'a', 'f', 'c'];
let result = arr1.sort(); // 將數(shù)組 arr1 進(jìn)行排序
console.log('arr1 =' + JSON.stringify(arr1));
console.log('result =' + JSON.stringify(result));
// arr1 =["a","b","c","d","e","f"]
//result =["a","b","c","d","e","f"]
我們再來看一下
如圖馅笙,用 sort() 排序后,數(shù)字11竟然在數(shù)字2的前面厉亏。因為sort()方法是按照Unicode 編碼進(jìn)行排序的董习。并非是按照自然排序。我們可以給sort傳參爱只,自定義排序方法
我們可以在 sort()添加一個回調(diào)函數(shù)皿淋,來指定排序規(guī)則√袷裕回調(diào)函數(shù)中需要定義兩個形參沥匈,瀏覽器將會分別使用數(shù)組中的元素作為實參去調(diào)用回調(diào)函數(shù)。
瀏覽器根據(jù)回調(diào)函數(shù)的返回值來決定元素的排序:
- 如果返回一個大于 0 的值忘渔,則元素會交換位置
- 如果返回一個小于 0 的值高帖,則元素位置不變
- 如果返回一個等于 0 的值,則認(rèn)為兩個元素相等畦粮,則不交換位置
indexOf() 和 lastIndexOf():獲取數(shù)據(jù)的索引
//索引值 = 數(shù)組.indexOf(想要查詢的元素);
//索引值 = 數(shù)組.lastIndexOf(想要查詢的元素);
indexOf() 是從前向后查找元素的位置;lastIndexOf()是從后向前尋找散址。
可以檢索一個數(shù)組中是否含有指定的元素。如果數(shù)組中含有該元素宣赔,則會返回其第一次出現(xiàn)的索引预麸;如果沒有找到指定的內(nèi)容,則返回 -1儒将。ndexOf()在檢索時吏祸,是嚴(yán)格類型約束,類似于===
這個方法還可以指定第二個參數(shù)贡翘,用來指定查找的起始位置蹈矮。語法如下:
索引值 = 數(shù)組.indexOf(想要查詢的元素, [起始位置]);
find()
find((item, index, arr) => {
return true;
});
找出第一個滿足「指定條件返回 true」的元素;如果沒找到鸣驱,則返回 undefined。
備注:一旦找到符合條件的第一個元素,將不再繼續(xù)往下遍歷再芋。
findIndex()
findIndex((item, index, arr) => {
return true;
});
找出第一個滿足「指定條件返回 true」的元素的 index遗菠。
every()
數(shù)組中每一項運行回調(diào)函數(shù)蓖谢,如果都返回 true,every 就返回 true陨瘩;如果有一項返回 false腕够,則停止遍歷,此方法返回 false舌劳。
every()方法的返回值是 boolean 值帚湘,參數(shù)是回調(diào)函數(shù)。
some()
對數(shù)組中每一個元素運行回調(diào)函數(shù)甚淡,只要有一個元素返回 true大诸,則停止遍歷,此方法返回 true。
every():全部真资柔,才為真焙贷。當(dāng)你需要讓數(shù)組中的每一個元素都滿足指定條件時,那就使用 every()建邓。
some():一個真,則為真睁枕,點到為止官边。數(shù)組中只要有一個元素滿足指定條件時,就停止遍歷外遇。那就使用 some()注簿。*
valueOf()
數(shù)組本身 = 數(shù)組.valueOf();
數(shù)組的遍歷
遍歷數(shù)組的方法包括:every()、filter()跳仿、forEach()诡渴、map()等。
for循環(huán)
let arr = ["0", "1", "2", "3", "4", "5"];
//for循環(huán)遍歷
for(let i = 0;i<arr.length;i++){
console.log(arr[i]);
}
forEach()遍歷
forEach() 這種遍歷方法只支持 IE8 以上的瀏覽器菲语。IE8 及以下的瀏覽器均不支持該方法妄辩。所以如果需要兼容 IE8,則不要使用 forEach山上,改為使用 for 循環(huán)來遍歷即可眼耀。
forEach()方法需要一個函數(shù)作為參數(shù)。這種函數(shù)佩憾,是由我們創(chuàng)建但是不由我們調(diào)用的哮伟,我們稱為回調(diào)函數(shù)。
回調(diào)函數(shù)中傳遞三個參數(shù):
- 第一個參數(shù)妄帘,就是當(dāng)前正在遍歷的元素
- 第二個參數(shù)楞黄,就是當(dāng)前正在遍歷的元素的索引
- 第三個參數(shù),就是正在遍歷的數(shù)組
arr.forEach((item, index, arr) => {
console.log('item:' + item);
console.log('index:' + index);
console.log('arr:' + JSON.stringify(arr));
console.log('----------');
});
//通常抡驼,后兩個參數(shù)是省略的鬼廓。
arr.forEach(function (items) {
console.log(items);
});
map()
對數(shù)組中每一項運行回調(diào)函數(shù),返回該函數(shù)的結(jié)果致盟,組成的新數(shù)組(返回的是加工之后的新數(shù)組)桑阶。不會改變原數(shù)組。
/*arr.map(function (item, index, arr) {
return newItem;
});*/
//map的結(jié)果返回一個新的數(shù)組勾邦。(純遍歷蚣录,省略兩個參數(shù))
let arr = ["0", "1", "2", "3", "4", "5"];
let arrNew = arr.map(function(item){
return item
});
console.log(arrNew);
filter()
對數(shù)組中的每一項運行回調(diào)函數(shù),該函數(shù)返回結(jié)果是 true 的項眷篇,將組成新的數(shù)組(返回值就是這個新的數(shù)組)萎河。不會改變原數(shù)組。
arr.filter(function (item, index, arr) {
return true;
});
reduce()
reduce() 方法接收一個函數(shù)作為累加器,數(shù)組中的每個值(從左到右)開始縮減虐杯,最終計算為一個值玛歌。返回值是回調(diào)函數(shù)累計處理的結(jié)果。
arr.reduce(function (previousValue, currentValue, currentIndex, arr) {}, initialValue);
參數(shù)說明:
- previousValue:必填擎椰,上一次調(diào)用回調(diào)函數(shù)時的返回值
- currentValue:必填支子,當(dāng)前正在處理的數(shù)組元素
- currentIndex:選填,當(dāng)前正在處理的數(shù)組元素下標(biāo)
- arr:選填达舒,調(diào)用 reduce()方法的數(shù)組
- initialValue:選填值朋,可選的初始值(作為第一次調(diào)用回調(diào)函數(shù)時傳給 previousValue 的值)
let arr = [1, 2, 3, 4, 5];
//initialValue不填寫時,第一次調(diào)用function的時候 pre的值為0. 一般
//回調(diào)函數(shù)里我們都是用這兩個參數(shù)就夠了巩搏。
//求arr數(shù)組元素的和昨登,(10為pre最初的值,只求和的話贯底,不傳該參數(shù))
var res = arr.reduce(function (pre, cur) {
return pre + cur;
},10);
console.log(res);