JS中的Math物件,陣列,和Date物件
Math
Math物件是JS內建物件,提供了一些靜態的數學屬性和數學方法,使用時不用例項化。
- 屬性:
Math.E
Math.LN2
Math.LN10
Math.LOG2E
Math.LOG10E
Math.PI
Math.SQRT1_2
Math.SQRT2 - 方法:
- 四捨五入 round
Math.round(0.1); //0
Math.round(0.5); //1
對於 負值的運算結果不同,體現在對於.5的處理
Math.round(-1.1);//-1
Math.round(-1.5); //-1
- 絕對值abs,最大引數max,最小引數min
abs方法返回引數值的絕對值
Math.abs(1)//1
Math.abs(-1) //1
max方法返回最大的引數,min方法返回最小的引數
Math.max(1,2,3); //3
Math.min(1,2,3); //1
- floor,ceil
分別返回小於或者大於引數值的最大(小)整數
Math.floor(3.999); //3
Math.floor(-3.999); //-4
Math.ceil(3.999); //4
Math.ceil(-3.999); //-3
- pow,sqrt
pow返回一個引數為底數,第二個引數為冪的指數值
sqrt方法返回引數的平方根,如果引數為負值,返回NaN
Math.pow(2,2); // 4
Math.pow(2,3); // 8
Math.sqrt(4); //2
Math.sqrt(-4); //NaN
- random
random方法返回0-1之間的一個偽隨機數,可能等於0,但是一定小於1
通過組合使用random方法和floor或者ceil方法可以得到指定範圍內的隨機整數,示例:
// 返回一個大於等於a,小於b之間的隨機整數
function random(a,b) {
return a + Math.floor(Math.random() * (b-a));
}
利用定義得到的random()函式,可以實現輸出一些指定格式的結果:
// 返回一個大於等於a,小於b之間的隨機整數
function random(a,b) {
return a + Math.floor(Math.random() * (b-a));
}
// 得到一個隨機的字串
function randomStr(len) { //len為隨機字串的長度
var dict = '0123456789abcdefgihijklmnopqrstuvwxyz'; // 建立一個字串,所有可能的字元取值
var str = ''; // 要輸出的隨機字串
for (var i = 0; i < len; i ++) {
str += dict[random(0,dict.length)];
// 利用上面定義的random函式,生成0到dict字串的長度的隨機整數,作為下標,對應的字元即為輸出的字元,賦給str
}
return str;
}
var str = randomStr(8);//指定8位的字串
console.log(str);
//得到一個隨機的IP地址 0.0.0.0 ~ 255.255.255.255
function randomIP () {
//同樣要利用定義好的random()
var arr = [];
for (var i = 0; i < 4; i ++) { //IP 4位,迴圈4次
arr.push(random(0,256)); // 寫成255就不包括255了
}
return arr.join('.'); //返回.隔開的字串
}
var IP = randomIP();
console.log(IP);
陣列
- 陣列的建立的多種方式
var arr = new Array();
使用建構函式建立空陣列,一般不使用,而是用字面量建立陣列:var arr = [];
在使用字面量建立陣列的時候:
無論傳入幾個引數,都會把引數當做初始化內容而不是長度,例如var arr = [5];
即建立的新陣列只有1項,為5。
var arr = [5];
console.log(arr.length); //1
var arr2 = [5,6];
console.log(arr2.length) //2
但是需要注意的是,進行陣列建立的時候,不要帶多餘的“,” 因為不同的瀏覽器解析結果不一致。例如:
var arr = [1,2,3,]; //有多餘的,
console.log(arr.length); // 現代瀏覽器上結果為3,但是在低版本的IE上是長度為4的陣列,最後一項為undefined
- 陣列的索引
陣列的值可以通過下標來進行訪問,下標可以是自然數也可以是變數或者表示式,例如:
var arr =[1,2,3,4];
console.log(arr[0]); //1
var i =1;
console.log(arr[i]);//2
console.log(arr[++i]);//3
陣列也是物件,是一個特殊的物件,key為數值的物件。
- 陣列的基本操作
var a = [1,2,3];
a[3] = 4; // 增加新元素
console.log(a); //[1,2,3,4]
//使用delete刪除陣列元素
delete a[2];
console.log(a[2]); //undefined 跟給a[2]賦值undefined相似,陣列長度不會改變,也不會影響其他資料。
console.log(a.length); //4 陣列長度不會改變
- 棧方法pop()和push()
var arr = [3,4,5];
arr.push(100); //push裡面傳參
console.log(arr); //3,4,5,100
arr.pop(); //pop不需要傳參
console.log(arr); //3,4,5
- 佇列方法 shift()和unshift()
var arr =[1,2,3];
arr.unshift(4);
console.log(arr); //[4,1,2,3]
arr.shift();
console.log(arr);//[1,2,3]
- 終極神器splice()
splice方法可以一次性解決陣列新增,刪除。傳入三個引數
第一個引數為開始的位置, 第二個引數為想要刪除的長度,第三個引數為想要新增的專案,也可以寫多個:
var arr = [3,5,8,10];
arr.splice(2,1); // 刪除第2個元素
console.log(arr); //[3,5,10]
var arr1 = [3,5,8,10];
arr1.splice(1,1,7,8,9); //在第2位開始,刪除1項,然後增加7,8,9三項
console.log(arr1);//[3, 7, 8, 9, 8, 10]
var arr2 = [3,5,8,10];
arr2.splice(3,0,9); // 在第3項位置刪除0項,即不刪除,然後插入9的一項
console.log(arr2);//[3, 5, 8, 9, 10]
- join方法
將陣列連線成字串,可以選擇使用什麼字元隔開每一項
var arr = [1,2,3,4,5,6];
//轉化為字串
var str1 = arr.join('|');
console.log(str1); //1|2|3|4|5|6
var str2 = arr.join('');
console.log(str2); // 123456
陣列跟字串使用join("")和split("")可以互相轉換,使用對方的方法
- concat() 連線陣列,會生成一個新陣列,不會影響原陣列
var a = [1,2,3];
var b = [4,5];
console.log(a.concat(b)); //[1, 2, 3, 4, 5]
console.log(a); // [1, 2, 3] 原陣列不受影響
console.log(b); //[4, 5]
- reverse()方法用於將陣列逆序,會修改原陣列
var arr = [1,2,3,4,5];
arr.reverse();
console.log(arr); // [5, 4, 3, 2, 1] 會修改原陣列
- sort()
sort方法在沒有引數的時候,會按照字母表升序排序,有undefined放到最後,對於物件呼叫toString方法。
一般需要自定義一個排序方式,傳入一個比較函式作為sort方法的引數,sort也會改變原陣列。
// 採用預設排序法時出現的問題
var arr = [7,8,9,10,11];
arr.sort();
console.log(arr); //[10, 11, 7, 8, 9] 並沒有按照意料中的方式排序
// 所以需要定義一個自定義的函式,作為sort方法的引數進行排序
var arr2 = [-4,1,18,22,3,9];
function compare (a,b) {
return a - b; //根據a-b的正負來排序
}
arr2.sort(compare);
console.log(arr2);//[-4, 1, 3, 9, 18, 22] 寫成b-a會降序
//針對物件的屬性的數值進行排序
var student = [
{
name: 'a',
age: 10
},
{
name: 'c',
age: 30
},
{
name: 'b',
age: 20
},
];
student.sort(function(stu1,stu2) {
return stu1.age - stu2.age;
})
console.log(student); //{name: "a", age: 10} {name: "b", age: 20} {name: "c", age: 30} 按照物件的age屬性排序
ES5 陣列擴充套件了一些功能
- Array.isArray(obj)
Array物件的一個靜態函式,判斷一個物件是不是陣列
var a = [123];
var b = new Date();
console.log(Array.isArray(a)); //true
console.log(Array.isArray(b)); //false
- .indexOf(element)/.lastIndexOf(element)
用於查詢陣列內指定的元素的位置,沒找到返回-1,找到返回下標 -
.forEach(element,index,array)
遍歷一個陣列,引數為一個回撥函式,回撥函式有三個引數
1,當前元素 2,當前元素索引值 3,整個陣列
var arr = [1,2,3,4,5,6];
arr.forEach(function (e,i,array) {
array[i] = e + 1; //每項都加1
});
console.log(arr);//[2, 3, 4, 5, 6, 7]
//forEach代替了通常用for迴圈遍歷陣列
- every(function (element,index,array))/some(function (element,index,array))
every和some類似於一種邏輯判定,回撥函式返回一個布林值
every是所有函式的每個回撥函式都返回true的時候才返回true,有false的時候就終止執行,返回false
some是存在著有一個回撥函式返回true時就終止執行返回true,否則返回false
對於空陣列,every返回true,some返回false
var arr = [1,2,3,-2,3];
// 判斷陣列中每一項是否都為正值
var resultEvery = arr.every(function (value) { // 只判斷是不是整數,所以引數只用到value,寫一個value就好
return value > 0;
});
console.log(resultEvery); //false
// 判斷陣列中每一項是否存在正值
var resultSome = arr.some(function (value){
return value > 0;
});
console.log(resultSome); //true
-
map(function(element))
和forEach類似,遍歷陣列,回撥函式返回值組成一個新陣列返回,新陣列索引和原陣列一致,原陣列不變。
var arr = [1,2,3,4,5];
var arr2 = arr.map(function (element) { //遍歷陣列,返回一個新陣列,每項是原陣列的平方
return Math.pow(element,2);
})
console.log(arr); //[1, 2, 3, 4, 5] 原陣列不發生改變
console.log(arr2); //[1, 4, 9, 16, 25]
//上述需求也可以利用forEach實現 為:
var arr3 = [];
arr.forEach(function (e,i,array) {
arr3.push(Math.pow(e,2)); // 利用forEach來達到同樣的效果,要提前建立一個新陣列,將得到的平方值依次push進去
})
console.log(arr3); // [1, 4, 9, 16, 25]
console.log(arr); //[1, 2, 3, 4, 5]
-
filter(function(element)) 過濾
返回陣列的一個子集,回撥函式用於邏輯判斷是否返回,返回true則把當前元素加到返回陣列中,false則不加
新陣列只包含返回true的值,索引缺失的不包括,原陣列保持不變
var arr = [1,2,3,4,5];
console.log(arr.filter(function (e) {
return e % 2 == 0; //返回偶數
})); //[2, 4]
console.log(arr); // [1, 2, 3, 4, 5] 原陣列不變
//針對物件進行過濾
var student = [
{
username: 'aa',
age: 20,
},
{
username: 'bb',
age: 30,
},
{
username: 'ac',
age: 25,
},
];
//要過濾出student中username包含a字元的項
var result = student.filter(function (e) {
return e.username.indexOf('a') > -1; //使用indexOf可以判斷是否包含a字元
});
console.log(result);// {username: "aa", age: 20} {username: "ac", age: 25}
- reduce(function(v1,v2),value)/.reduceRight(function(v1,v2),value)
遍歷陣列,呼叫回撥函式,將陣列元素組合成一個值,reduce從索引最小值開始,reduceRight反向,方法有2個引數, 1,回撥函式,把兩個值合為一個,返回結果 2,value,一個初始值,可選
var arr = [1,2,3,4,5];
var arr1 = arr.reduce(function(v1,v2) {
console.log('本次v1為:'+v1 ,'本次v2為:' + v2);
return v1 + v2;
});
console.log(arr1); //15
Date
Date物件是JS提供的日期和時間的操作介面
Date物件有幾個靜態方法
- Date.now()
now方法返回當前距離 1970年1月1日00:00:00的毫秒數Date.now();//1502771978564
- Date.parse()
解析字串,返回距離 1970年1月1日00:00:00的毫秒數,解析失敗返回NaNconsole.log(Date.parse('2017-1-1')); //1483200000000
- Date.UTC()
預設返回當前時區的時間,接收年月日等變數作為引數,返回距離 1970年1月1日00:00:00的毫秒數Date.UTC(2015,0,1,2,3,4,567);//1420077784567
- Date()
Date函式可以直接呼叫,返回當前時間 - get
var d = new Date();
console.log(d.getTime()); //返回距離1970年1月1日00:00:00的毫秒數
console.log(d.getDate());//返回例項物件對應每個月的幾號(從1開始)
console.log(d.getDay());//周幾,週日為0,週一為1
console.log(d.getFullYear());//返回四位數的年份
console.log(d.getMonth());//月份,0為1月
console.log(d.getHours());//小時 0-23
console.log(d.getMilliseconds());//毫秒 0-999
console.log(d.getMinutes());//分鐘 0-59
console.log(d.getSeconds());//秒 0-59
console.log(d.getTimezoneOffset());//時區差異
另外get還有對應的set方法
- Date物件的應用距離
// 寫一個函式getChIntv, 獲取從當前時間到指定日期的間隔時間
function getChIntv(dateStr) {
var targetDate = new Date(dateStr);// 傳入目標引數,建立目標時間的date物件
var currentDate = new Date();//表示現在時間
var interval = targetDate - currentDate; // 可以直接相減,預設呼叫valueOf函式生成毫秒數
if (interval > 0) {
//生成的interval為毫秒數,我們轉換為秒數並且取整
var totalSeconds = Math.floor(interval/1000); //換算成秒數並且取整的值
var seconds = totalSeconds%60; //得到餘下來的秒數,為我們最終顯示的秒數,前面的可以整除的換算為分鐘小時和天
var totalMinutes = Math.floor(totalSeconds/60); //為總共的分鐘數 這裡用Math.floor取整
var minutes = (totalMinutes%60); //同樣,可以整除的去換算為小時和天數,餘下來的分鐘用於最終顯示,
var totalHours = Math.floor(totalMinutes/60); //總共的小時數 這裡用Math.floor取整
var hours = (totalHours%24); //餘下來的小時數作為最終顯示,可以整除的去換算成天數
var totalDays = Math.floor(totalHours/24); //總共的天數,不用換算成年了,所以直接換算成天數就好
console.log('距離目標日期還有:'+ totalDays + '天' + hours + '小時' + minutes + '分鐘' + seconds + '秒');
}
else {
console.log('目標日期已經過了');
}
}
getChIntv('2017-1-1');
相關文章
- js物件陣列Date的比較JS物件陣列
- Math陣列Date陣列
- Js中Math物件JS物件
- js 去掉陣列物件中的重複物件JS陣列物件
- JS 中特殊的物件-陣列JS物件陣列
- js,javascript陣列物件的父級物件 – 子集物件(陣列物件相減)JSJavaScript陣列物件
- json中物件陣列迭代JSON物件陣列
- JS 複製陣列和物件JS陣列物件
- JS中陣列物件的基本結構JS陣列物件
- JS中遍歷陣列、物件的方式JS陣列物件
- js中給陣列中物件去重JS陣列物件
- js 取陣列中某個物件的集合JS陣列物件
- vue js 物件轉陣列VueJS物件陣列
- js物件陣列去重JS物件陣列
- js陣列物件去重JS陣列物件
- json陣列和json物件的包含關係JSON陣列物件
- Javascript中的陣列物件排序JavaScript陣列物件排序
- js 是否能根據物件的id直接從物件陣列中獲取該物件JS物件陣列
- Javascript 物件 – 陣列物件JavaScript物件陣列
- 物件和陣列的遍歷物件陣列
- 陣列和物件的拷貝陣列物件
- 小陳學JS js內建物件 Date物件JS物件
- JS--陣列物件合併JS陣列物件
- JavaScript 之 物件/JSON/陣列JavaScript物件JSON陣列
- js:判斷物件或陣列JS物件陣列
- js本地物件——Date()JS物件
- Js陣列物件的屬性值升序排序,並指定陣列中的某個物件移動到陣列的最前面JS陣列物件排序
- js如何使用索引訪問陣列物件中的元素JS索引陣列物件
- JS中陣列與物件的遍歷方法例項JS陣列物件
- js中那些方法不改變原來的陣列物件JS陣列物件
- js 在陣列物件中匹配到指定的資料JS陣列物件
- 將json格式物件轉換成陣列物件JSON物件陣列
- JavaScript內部物件和Date物件JavaScript物件
- fastjson: json物件,json物件陣列,javabean物件,json字串之間的相互轉化ASTJSON物件陣列JavaBean字串
- 實體類定義陣列物件,和物件陣列物件
- js 物件轉為js陣列 && Object方法JS物件陣列Object
- javascript陣列和物件的區別JavaScript陣列物件
- JSON物件中的JSONObject和JSONArray以及與Map、String、陣列的轉化JSON物件Object陣列