1.Math對(duì)象
是一個(gè)內(nèi)置對(duì)象,它擁有一些數(shù)學(xué)常數(shù)屬性和數(shù)學(xué)函數(shù)方法眯杏。Math 不是一個(gè)函數(shù)對(duì)象夜焦。
1.1最大值
Math.max() 函數(shù)返回一組數(shù)中的最大值。
1.2最小值
Math.min() 返回零個(gè)或更多個(gè)數(shù)值的最小值岂贩。
1.3絕對(duì)值
Math.abs(x) 函數(shù)返回指定數(shù)字 “x“ 的絕對(duì)值茫经。
1.4向下取整
Math.floor() 返回小于或等于一個(gè)給定數(shù)字的最大整數(shù)。
1.5向上取整
Math.ceil() 函數(shù)返回大于或等于一個(gè)給定數(shù)字的最小整數(shù)萎津。
1.6四舍五入
Math.round()四舍五入版 就近取整 注意 -3.5 結(jié)果是 -3
1.7隨機(jī)數(shù)
Math.random()方法可以隨機(jī)返回一個(gè)小數(shù)卸伞,其取值范圍是 [0,1)锉屈,左閉右開 0 <= x < 1
擴(kuò)展:得到一個(gè)兩數(shù)之間的隨機(jī)整數(shù)荤傲,包括兩個(gè)數(shù)在內(nèi)
function getRandom(min, max) {
return Math.floor(Math.random() * (max - min + 1)) + min;
}
2.日期對(duì)象
Date 對(duì)象和 Math 對(duì)象不一樣,他是一個(gè)構(gòu)造函數(shù)颈渊,所以我們需要實(shí)例化后才能使用
var now = new Date();
console.log(now);
? 如果Date()不寫參數(shù)遂黍,就返回當(dāng)前時(shí)間
? 如果Date()里面寫參數(shù),就返回括號(hào)里面輸入的時(shí)間
var date = new Date('2000-2-5 5:5:5');
console.log(date);
2.1 日期格式化
例:輸出當(dāng)前日期
var date = new Date();
console.log(date.getFullYear()); // 返回當(dāng)前日期的年
console.log(date.getMonth() + 1); // 月份 返回的月份小1個(gè)月 記得月份+1
console.log(date.getDate()); // 返回的是 幾號(hào)
console.log(date.getDay()); // 3 周一返回的是 1 周六返回的是 6 但是 周日返回的是 0
// 我們寫一個(gè) 2019年 5月 1日 星期三
var year = date.getFullYear();
var month = date.getMonth() + 1;
var dates = date.getDate();
var arr = ['星期日', '星期一', '星期二', '星期三', '星期四', '星期五', '星期六'];
var day = date.getDay();
console.log('今天是:' + year + '年' + month + '月' + dates + '日 ' + arr[day]);
輸出當(dāng)前時(shí)間
// 格式化日期 時(shí)分秒
var date = new Date();
console.log(date.getHours()); // 時(shí)
console.log(date.getMinutes()); // 分
console.log(date.getSeconds()); // 秒
// 要求封裝一個(gè)函數(shù)返回當(dāng)前的時(shí)分秒 格式 08:08:08
function getTimer() {
var time = new Date();
var h = time.getHours();
h = h < 10 ? '0' + h : h;
var m = time.getMinutes();
m = m < 10 ? '0' + m : m;
var s = time.getSeconds();
s = s < 10 ? '0' + s : s;
return h + ':' + m + ':' + s;
}
console.log(getTimer());
2.2獲取日期的總的毫秒形式(時(shí)間戳)
Date 對(duì)象是基于1970年1月1日(世界標(biāo)準(zhǔn)時(shí)間)起的毫秒數(shù)
// 實(shí)例化Date對(duì)象
var now = new Date();
// 1. 用于獲取對(duì)象的原始值
console.log(date.valueOf())
console.log(date.getTime())
// 2. 簡(jiǎn)單寫可以這么做
var now = + new Date();
// 3. HTML5中提供的方法俊嗽,有兼容性問題
var now = Date.now();
注:new Date()的()里如果為空的話返回的是當(dāng)前時(shí)間總的毫秒數(shù)雾家,如果不為空的話返回的是用戶輸入時(shí)間總的毫秒數(shù);
2.3倒計(jì)時(shí)
// 倒計(jì)時(shí)效果
// 1.核心算法:輸入的時(shí)間減去現(xiàn)在的時(shí)間就是剩余的時(shí)間绍豁,即倒計(jì)時(shí) 芯咧,但是不能拿著時(shí)分秒相減,比如 05 分減去25分,結(jié)果會(huì)是負(fù)數(shù)的唬党。
// 2.用時(shí)間戳來做鹃共。用戶輸入時(shí)間總的毫秒數(shù)減去現(xiàn)在時(shí)間的總的毫秒數(shù),得到的就是剩余時(shí)間的毫秒數(shù)驶拱。
// 3.把剩余時(shí)間總的毫秒數(shù)轉(zhuǎn)換為天霜浴、時(shí)、分蓝纲、秒 (時(shí)間戳轉(zhuǎn)換為時(shí)分秒)
// 轉(zhuǎn)換公式如下:
// d = parseInt(總秒數(shù)/ 60/60 /24); // 計(jì)算天數(shù)
// h = parseInt(總秒數(shù)/ 60/60 %24) // 計(jì)算小時(shí)
// m = parseInt(總秒數(shù) /60 %60 ); // 計(jì)算分?jǐn)?shù)
// s = parseInt(總秒數(shù)%60); // 計(jì)算當(dāng)前秒數(shù)
function countDown(time) {
var nowTime = +new Date(); // 返回的是當(dāng)前時(shí)間總的毫秒數(shù)
var inputTime = +new Date(time); // 返回的是用戶輸入時(shí)間總的毫秒數(shù)
var times = (inputTime - nowTime) / 1000; // times是剩余時(shí)間總的秒數(shù)
var d = parseInt(times / 60 / 60 / 24); // 天
d = d < 10 ? '0' + d : d;
var h = parseInt(times / 60 / 60 % 24); //時(shí)
h = h < 10 ? '0' + h : h;
var m = parseInt(times / 60 % 60); // 分
m = m < 10 ? '0' + m : m;
var s = parseInt(times % 60); // 當(dāng)前的秒
s = s < 10 ? '0' + s : s;
return d + '天' + h + '時(shí)' + m + '分' + s + '秒';
}
console.log(countDown('2019-5-1 18:00:00'));
var date = new Date();
console.log(date);
3.數(shù)組對(duì)象Array
3.1檢測(cè)是否為數(shù)組
? instanceof 運(yùn)算符阴孟,可以判斷一個(gè)對(duì)象是否屬于某種類型
? Array.isArray()用于判斷一個(gè)對(duì)象是否為數(shù)組,isArray() 是 HTML5 中提供的方法
var arr = [1, 23];
var obj = {};
console.log(arr instanceof Array); // true
console.log(obj instanceof Array); // false
console.log(Array.isArray(arr)); // true
console.log(Array.isArray(obj)); // false
3.2添加刪除數(shù)組元素方法
// 添加刪除數(shù)組元素方法
var arr = [1, 2, 3];
// 1. push() 在我們數(shù)組的末尾 添加一個(gè)或者多個(gè)數(shù)組元素 push 推
arr.push(4, 'pink');
// (1) push 是可以給數(shù)組追加新的元素
// (2) push() 參數(shù)直接寫 數(shù)組元素就可以了
// (3) arr.push()完畢之后税迷,返回的結(jié)果是 新數(shù)組的長(zhǎng)度
// (4) 原數(shù)組也會(huì)發(fā)生變化
// 2. unshift 在我們數(shù)組的開頭 添加一個(gè)或者多個(gè)數(shù)組元素
console.log(arr.unshift('red', 'purple'));
// (1) unshift是可以給數(shù)組前面追加新的元素
// (2) unshift() 參數(shù)直接寫 數(shù)組元素就可以了
// (3) unshift完畢之后永丝,返回的結(jié)果是 新數(shù)組的長(zhǎng)度
// (4) 原數(shù)組也會(huì)發(fā)生變化
// 3. pop() 它可以刪除數(shù)組的最后一個(gè)元素
console.log(arr.pop());
// (1) pop是可以刪除數(shù)組的最后一個(gè)元素 記住一次只能刪除一個(gè)元素
// (2) pop() 沒有參數(shù)
// (3) pop完畢之后,返回的結(jié)果是 刪除的那個(gè)元素
// (4) 原數(shù)組也會(huì)發(fā)生變化
// 4. shift() 它可以刪除數(shù)組的第一個(gè)元素
console.log(arr.shift());
// (1) shift是可以刪除數(shù)組的第一個(gè)元素 記住一次只能刪除一個(gè)元素
// (2) shift() 沒有參數(shù)
// (3) shift完畢之后箭养,返回的結(jié)果是 刪除的那個(gè)元素
// (4) 原數(shù)組也會(huì)發(fā)生變化
3.3數(shù)組排序
var arr = [1, 64, 9, 6];
//arr.sort();在進(jìn)行個(gè)位數(shù)和十位數(shù)排序的時(shí)候會(huì)有一些小問題慕嚷,所以用以下方法
arr.sort(function(a, b) {
return b - a; // 降a序
// return a - b; // 升序
});
console.log(arr);
3.4數(shù)組索引方法
案例:數(shù)組去重
// 數(shù)組去重 ['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'] 要求去除數(shù)組中重復(fù)的元素。
// 1.目標(biāo): 把舊數(shù)組里面不重復(fù)的元素選取出來放到新數(shù)組中毕泌, 重復(fù)的元素只保留一個(gè)喝检, 放到新數(shù)組中去重。
// 2.核心算法: 我們遍歷舊數(shù)組撼泛, 然后拿著舊數(shù)組元素去查詢新數(shù)組挠说, 如果該元素在新數(shù)組里面沒有出現(xiàn)過, 我們就添加愿题, 否則不添加损俭。
// 3.我們?cè)趺粗涝撛貨]有存在? 利用 新數(shù)組.indexOf(數(shù)組元素) 如果返回時(shí) - 1 就說明 新數(shù)組里面沒有改元素
// 封裝一個(gè) 去重的函數(shù) unique 獨(dú)一無二的
function unique(arr) {
var newArr = [];
for (var i = 0; i < arr.length; i++) {
if (newArr.indexOf(arr[i]) === -1) {
newArr.push(arr[i]);
}
}
return newArr;
}
var demo = unique(['c', 'a', 'z', 'a', 'x', 'a', 'x', 'c', 'b'])
3.5數(shù)組轉(zhuǎn)換為字符串
3.6其他
concat() 方法用于合并兩個(gè)或多個(gè)數(shù)組潘酗。此方法不會(huì)更改現(xiàn)有數(shù)組杆兵,而是返回一個(gè)新數(shù)組。
var num1 = [1, 2, 3],
num2 = [4, 5, 6],
num3 = [7, 8, 9];
var nums = num1.concat(num2, num3);
console.log(nums);
// results in [1, 2, 3, 4, 5, 6, 7, 8, 9]
var nums2 =num1.concat(100,num2);
console.log(nums);
// results in [1, 2, 3, 100,4, 5, 6]
slice() 方法返回一個(gè)新的數(shù)組對(duì)象崎脉,這一對(duì)象是一個(gè)由 begin 和 end 決定的原數(shù)組的淺拷貝(包括 begin拧咳,不包括end)。原始數(shù)組不會(huì)被改變囚灼。
const animals = ['ant', 'bison', 'camel', 'duck', 'elephant'];
console.log(animals.slice(2));
// expected output: Array ["camel", "duck", "elephant"]
console.log(animals.slice(2, 4));
// expected output: Array ["camel", "duck"]
console.log(animals.slice(1, 5));
// expected output: Array ["bison", "camel", "duck", "elephant"]
console.log(animals.slice(-2));//begin為負(fù)數(shù)骆膝,則表示從原數(shù)組中的倒數(shù)第幾個(gè)元素開始提取
// expected output: Array ["duck", "elephant"]
console.log(animals.slice(2, -1));//end為負(fù)數(shù), 則它表示在原數(shù)組中的倒數(shù)第幾個(gè)元素結(jié)束抽取灶体。
// expected output: Array ["camel", "duck"]
splice() 方法通過刪除或替換現(xiàn)有元素或者原地添加新的元素來修改數(shù)組,并以數(shù)組形式返回被修改的內(nèi)容阅签。此方法會(huì)改變?cè)瓟?shù)組。
寫法:array.splice(start,deleteCount(可選),item1, item2, ... (可選))
start:指定修改的開始位置(從0計(jì)數(shù))蝎抽。如果超出了數(shù)組的長(zhǎng)度政钟,則從數(shù)組末尾開始添加內(nèi)容路克;如果是負(fù)值,則表示從數(shù)組末位開始的第幾位(從-1計(jì)數(shù)养交,這意味著-n是倒數(shù)第n個(gè)元素并且等價(jià)于array.length-n)精算;如果負(fù)數(shù)的絕對(duì)值大于數(shù)組的長(zhǎng)度,則表示開始位置為第0位碎连。
deleteCount: 可選. 整數(shù)灰羽,表示要移除的數(shù)組元素的個(gè)數(shù)。如果 deleteCount 被省略了或者它的值大于等于array.length - start鱼辙,那么start之后數(shù)組的所有元素都會(huì)被刪除廉嚼;如果 deleteCount 是 0 或者負(fù)數(shù),則不移除元素倒戏。這種情況下怠噪,至少應(yīng)添加一個(gè)新元素。
item1, item2, ...: 可選杜跷,要添加進(jìn)數(shù)組的元素,從start 位置開始傍念。如果不指定,則 splice() 將只刪除數(shù)組元素葛闷。
var myFish = ['angel', 'clown', 'trumpet', 'sturgeon'];
var removed = myFish.splice(0, 2, 'parrot', 'anemone', 'blue');
// 運(yùn)算后的 myFish: ["parrot", "anemone", "blue", "trumpet", "sturgeon"]
// 被刪除的元素: ["angel", "clown"]
var myFish = ['angel', 'clown', 'mandarin', 'sturgeon'];
var removed = myFish.splice(-2, 1);
// 運(yùn)算后的 myFish: ["angel", "clown", "sturgeon"]
// 被刪除的元素: ["mandarin"]