JS陣列,日期,Math,正則
陣列
建立
var arr1 = new Array();
arr1[0] = "hi";
arr1[1] = 1;
arr1[2] = 0.95;
console.log(arr1);
var arr2 = ["hi", 1, 0.95];
console.log(arr2);
普通for迴圈,for in迴圈
var arr1 = ["hi", 1, 0.95]; for (let i = 0; i < arr1.length; i++) { console.log(arr1[i]); } for (x in arr1) { console.log(arr1[x]); }
高階函式foreach遍歷
arr1.forEach(function (value, index, array) {
console.log(value);
})
其中,value表示值,inde表示下表,array表示陣列物件
迭代器遍歷
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let ent = arr1.entries();
for (let e of ent) {
console.log("key="+e[0]+" value="+e[1]);
}
新增元素到陣列的末尾push
let arr1 = ["hi", 1, 0.95]; arr1.push("hehe"); arr1.forEach(function (value) { console.log(value)// "hi" 1 0.95 "hehe" });
新增元素到陣列的頭部unshift
let arr1 = ["hi", 1, 0.95];
arr1.unshift("hehe");
arr1.forEach(function (value) {
console.log(value)//"hehe" "hi" 1 0.95
});
刪除陣列最前面(頭部)的元素shift
let arr1 = ["hi", 1, 0.95];
arr1.shift();
arr1.forEach(function (value) {
console.log(value)//1 0.95
});
});
刪除陣列末尾的元素pop
let arr1 = ["hi", 1, 0.95]; arr1.pop(); arr1.forEach(function (value) { console.log(value)//"hi" 1 });
找出某個元素在陣列中的索引indexof
let arr1 = ["hi", 1, 0.95];
console.log(arr1.indexOf(1));//1 -1表示不存在這樣的元素
從一個索引位置刪除多個元素(index,count)
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let arr2=arr1.splice(1, 4);
console.log(arr1);//1 6 7 8 9
console.log(arr2);//2 3 4 5
index表示開始刪除的位置,count表示刪除的個數,返回結果是刪除的元素組成的陣列
複製一個數組slice
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let arr2=arr1.slice();
console.log(arr1);//1, 2, 3, 4, 5, 6, 7, 8, 9
console.log(arr2);//1, 2, 3, 4, 5, 6, 7, 8, 9
連線所有陣列元素組成一個字串join
let arr1 = [1, 2, 3, 4, 5, 6, 7, 8, 9];
let arr2=arr1.join(",")
console.log(arr1);//1, 2, 3, 4, 5, 6, 7, 8, 9
console.log(arr2);//"1,2,3,4,5,6,7,8,9"
日期Date
Date普通函式
Date本身也是一個函式,返回的是當前時間,可以傳引數,但是返回結果也是當前時間
時間戳
Date.now();
console.log(Date());
console.log(Date(2000, 1, 1));
//output
Fri Nov 09 2018 11:14:19 GMT+0800 (中國標準時間)
Fri Nov 09 2018 11:14:19 GMT+0800 (中國標準時間)
Date建構函式
let d1=new Date();
console.log(d1);//Fri Nov 09 2018 11:18:03 GMT+0800 (中國標準時間)當前時間
// 年:使用四位數年份,比如2000。如果寫成兩位數或個位數,
// 則加上1900,即10代表1910年。如果是負數,表示公元前。
// 月:0表示一月,依次類推,11表示12月。
// 日:1到31。
// 小時:0到23。
// 分鐘:0到59。
// 秒:0到59
// 毫秒:0到999。
let d2=new Data(年,月,日,消失,分鐘,秒,毫秒);
不傳引數,返回當前時間,傳引數,可以隨意從開頭計算傳,舉例:
new Date(2013)
// Thu Jan 01 1970 08:00:02 GMT+0800 (CST)
上面程式碼中,2013被解釋為毫秒數,而不是年份。
new Date(2013, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 1, 0, 0, 0, 0)
// Tue Jan 01 2013 00:00:00 GMT+0800 (CST)
上面程式碼中,不管有幾個引數,返回的都是2013年1月1日零點。
Date建構函式,合法字串
new Date('2013-2-15')
new Date('2013/2/15')
new Date('02/15/2013')
new Date('2013-FEB-15')
new Date('FEB, 15, 2013')
new Date('FEB 15, 2013')
new Date('Feberuary, 15, 2013')
new Date('Feberuary 15, 2013')
new Date('15 Feb 2013')
new Date('15, Feberuary, 2013')
// Fri Feb 15 2013 00:00:00 GMT+0800 (CST)
只要是能被Date.parse()方法解析的字串,都可以當作引數。
引數數值不合法,正負,超過規定值
new Date(2013, -1)
// Sat Dec 01 2012 00:00:00 GMT+0800 (CST)
new Date(2013, 0, -1)
// Sun Dec 30 2012 00:00:00 GMT+0800 (CST)
引數使用負數,表示扣去的時間。
new Date(2013, 15)
// Tue Apr 01 2014 00:00:00 GMT+0800 (CST)
new Date(2013, 0, 0)
// Mon Dec 31 2012 00:00:00 GMT+0800 (CST)
引數如果超出了正常範圍,會被自動折算。比如,如果月設為15,就折算為下一年的4月。
get 類方法
getTime():返回例項距離1970年1月1日00:00:00的毫秒數,等同於valueOf方法。
getDate():返回例項物件對應每個月的幾號(從1開始)。
getDay():返回星期幾,星期日為0,星期一為1,以此類推。
getYear():返回距離1900的年數。
getFullYear():返回四位的年份。
getMonth():返回月份(0表示1月,11表示12月)。
getHours():返回小時(0-23)。
getMilliseconds():返回毫秒(0-999)。
getMinutes():返回分鐘(0-59)。
getSeconds():返回秒(0-59)。
getTimezoneOffset():返回當前時間與 UTC 的時區差異,以分鐘表示,返回結果考慮到了夏令時因素。
所有這些get*方法返回的都是整數,不同方法返回值的範圍不一樣。
分鐘和秒:0 到 59
小時:0 到 23
星期:0(星期天)到 6(星期六)
日期:1 到 31
月份:0(一月)到 11(十二月)
年份:距離1900年的年數
Date.parse(),返回毫秒數
Date.parse('Aug 9, 1995')
Date.parse('January 26, 2011 13:51:50')
Date.parse('Mon, 25 Dec 1995 13:30:00 GMT')
Date.parse('Mon, 25 Dec 1995 13:30:00 +0430')
Date.parse('2011-10-10')
Date.parse('2011-10-10T14:48:00')
時間戳轉各種時間格式
專案中,這種需求是最多,下面給出轉換程式碼:
js 時間戳轉為日期格式
/**
* 時間戳格式化函式
* @param {string} format 格式
* @param {int} timestamp 要格式化的時間 預設為當前時間
* @return {string} 格式化的時間字串
*/
function date(format, timestamp){
var a, jsdate=((timestamp) ? new Date(timestamp*1000) : new Date());
var pad = function(n, c){
if((n = n + "").length < c){
return new Array(++c - n.length).join("0") + n;
} else {
return n;
}
};
var txt_weekdays = ["Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"];
var txt_ordin = {1:"st", 2:"nd", 3:"rd", 21:"st", 22:"nd", 23:"rd", 31:"st"};
var txt_months = ["", "January", "February", "March", "April", "May", "June", "July", "August", "September", "October", "November", "December"];
var f = {
// Day
d: function(){return pad(f.j(), 2)},
D: function(){return f.l().substr(0,3)},
j: function(){return jsdate.getDate()},
l: function(){return txt_weekdays[f.w()]},
N: function(){return f.w() + 1},
S: function(){return txt_ordin[f.j()] ? txt_ordin[f.j()] : 'th'},
w: function(){return jsdate.getDay()},
z: function(){return (jsdate - new Date(jsdate.getFullYear() + "/1/1")) / 864e5 >> 0},
// Week
W: function(){
var a = f.z(), b = 364 + f.L() - a;
var nd2, nd = (new Date(jsdate.getFullYear() + "/1/1").getDay() || 7) - 1;
if(b <= 2 && ((jsdate.getDay() || 7) - 1) <= 2 - b){
return 1;
} else{
if(a <= 2 && nd >= 4 && a >= (6 - nd)){
nd2 = new Date(jsdate.getFullYear() - 1 + "/12/31");
return date("W", Math.round(nd2.getTime()/1000));
} else{
return (1 + (nd <= 3 ? ((a + nd) / 7) : (a - (7 - nd)) / 7) >> 0);
}
}
},
// Month
F: function(){return txt_months[f.n()]},
m: function(){return pad(f.n(), 2)},
M: function(){return f.F().substr(0,3)},
n: function(){return jsdate.getMonth() + 1},
t: function(){
var n;
if( (n = jsdate.getMonth() + 1) == 2 ){
return 28 + f.L();
} else{
if( n & 1 && n < 8 || !(n & 1) && n > 7 ){
return 31;
} else{
return 30;
}
}
},
// Year
L: function(){var y = f.Y();return (!(y & 3) && (y % 1e2 || !(y % 4e2))) ? 1 : 0},
//o not supported yet
Y: function(){return jsdate.getFullYear()},
y: function(){return (jsdate.getFullYear() + "").slice(2)},
// Time
a: function(){return jsdate.getHours() > 11 ? "pm" : "am"},
A: function(){return f.a().toUpperCase()},
B: function(){
// peter paul koch:
var off = (jsdate.getTimezoneOffset() + 60)*60;
var theSeconds = (jsdate.getHours() * 3600) + (jsdate.getMinutes() * 60) + jsdate.getSeconds() + off;
var beat = Math.floor(theSeconds/86.4);
if (beat > 1000) beat -= 1000;
if (beat < 0) beat += 1000;
if ((String(beat)).length == 1) beat = "00"+beat;
if ((String(beat)).length == 2) beat = "0"+beat;
return beat;
},
g: function(){return jsdate.getHours() % 12 || 12},
G: function(){return jsdate.getHours()},
h: function(){return pad(f.g(), 2)},
H: function(){return pad(jsdate.getHours(), 2)},
i: function(){return pad(jsdate.getMinutes(), 2)},
s: function(){return pad(jsdate.getSeconds(), 2)},
//u not supported yet
// Timezone
//e not supported yet
//I not supported yet
O: function(){
var t = pad(Math.abs(jsdate.getTimezoneOffset()/60*100), 4);
if (jsdate.getTimezoneOffset() > 0) t = "-" + t; else t = "+" + t;
return t;
},
P: function(){var O = f.O();return (O.substr(0, 3) + ":" + O.substr(3, 2))},
//T not supported yet
//Z not supported yet
// Full Date/Time
c: function(){return f.Y() + "-" + f.m() + "-" + f.d() + "T" + f.h() + ":" + f.i() + ":" + f.s() + f.P()},
//r not supported yet
U: function(){return Math.round(jsdate.getTime()/1000)}
};
return format.replace(/[\]?([a-zA-Z])/g, function(t, s){
if( t!=s ){
// escaped
ret = s;
} else if( f[s] ){
// a date function exists
ret = f[s]();
} else{
// nothing special
ret = s;
}
return ret;
});
}
Math
屬性
Math.E//返回算術常量 e,即自然對數的底數(約等於2.718)。
Math.LN2;//返回 2 的自然對數(約等於0.693)。
Math.LN10;//返回 10 的自然對數(約等於2.302)。
Math.LOG2E;//返回以 2 為底的 e 的對數(約等於 1.414)。
Math.LOG10E;//返回以 10 為底的 e 的對數(約等於0.434)。
Math.PI;//返回圓周率(約等於3.14159)。
Math.SQRT1_2;//返回返回 2 的平方根的倒數(約等於 0.707)。
Math.SQRT2;//返回 2 的平方根(約等於 1.414)。
方法
Math.abs(x);//返回數的絕對值。
Math.acos(x);//返回數的反餘弦值。
Math.asin(x);//返回數的反正弦值。
Math.atan(x);//以介於 -PI/2 與 PI/2 弧度之間的數值來返回 x 的反正切值。
Math.atan2(y,x);//返回從 x 軸到點 (x,y) 的角度(介於 -PI/2 與 PI/2 弧度之間)。
Math.ceil(x);//對數進行上舍入。
Math.cos(x);//返回數的餘弦。
Math.exp(x);//返回 e 的指數。
Math.floor(x);//對數進行下舍入。
Math.log(x);//返回數的自然對數(底為e)。
Math.max(x,y);//返回 x 和 y 中的最高值。
Math.min(x,y);//返回 x 和 y 中的最低值。
Math.pow(x,y);//返回 x 的 y 次冪。
Math.random();//返回 0 ~ 1 之間的隨機數。
Math.round(x);//把數四捨五入為最接近的整數。
Math.sin(x);// 返回數的正弦。
Math.sqrt(x);// 返回數的平方根。
Math.tan(x);//返回角的正切。
Math.valueOf();//返回 Math 物件的原始值。
正則
建立一個正則表示式
//字面量
/*
/pattern/flags
*/
let regex = /ab+c/;
let regex = /^[a-zA-Z]+[0-9]*\W?_$/gi;
//new出來
/*
new RegExp(pattern [, flags])
*/
let regex = new RegExp("ab+c");
let regex = new RegExp(/^[a-zA-Z]+[0-9]*\W?_$/, "gi");
let regex = new RegExp("^[a-zA-Z]+[0-9]*\\W?_$", "gi");
字面量和new出正則,二者等價,由pattern+flgs組成。
常用方法
1.test():在字串中查詢符合正則的內容,查詢到返回true,反之返回false
用法:正則.test(字串);
var str = '12345678';
var reg = /\D/;
if(reg.test(str)){
alert('不全是數字');
}else{
alert('全是數字');
}
2.search():在字串中搜索符合正則的內容,搜尋到就返回出現的位置(從0開始,若搜尋到的不只是一個字母,則返回第一個字母的位置),反之返回-1
用法:字串.search(正則)
var str = 'webrty';
var reg = /B/i; //i表示不區分大小寫
console.log(str.search(reg)); //返回2
3.match():在字串中搜索符合正則的內容,匹配成功就返回內容,格式為陣列,失敗則返回null
用法:字串.match(正則);
var str = 'as123msd8xx29shdkdk220nm';
var reg = /\d+/g; //匹配至少一個數字, g表示全域性匹配
console.log(str.match(reg)); // ["123", "8", "29", "220"]
4.replace():查詢符合正則的字串,替換成對應的字串,返回替換後的內容
用法:字串.replace(正則,新的字串/回撥函式); (在回撥函式中,第一個引數是指匹配到的第一個字元)
var str = '吃葡萄不吐葡萄皮';
var reg = /葡萄|皮/g; //匹配葡萄或皮 , 全域性匹配
var str2 = str.replace(reg,'*');
console.log(str2); //吃*不吐**
Pattern
pattern由各個字元組成,各個字元的意義為:
^:匹配字串的開始位置
$:匹配字串的結束位置
*:匹配前面子表示式任意次數
+:匹配前面子表示式一次或多次
?:匹配前面子表示式0次或多次
. :匹配任何單個字元
{n}:n為非負整數,匹配確定的n次。例如:“o{2}”不能匹配‘bod’中的‘o’ ,但能匹配‘food’中的‘o’
{n,}:至少匹配n次
{n,m}:最少匹配n次,最多匹配m次
x|y:匹配x或y
[xyz]:字元集合。匹配任意一個字元。例如‘[abc]’ 匹配 ‘plain’ 中的 ‘a’
[xyz]:匹配未包含的任意字元。例如‘[abc]’ 匹配 ‘plain’ 中的 ‘plin’
\b:匹配單詞邊界。例如‘er\b’ 可以匹配‘nerver’ 中的‘er’ ,但不能匹配 ‘verb’中的‘er’
\B:匹配非單詞邊界
\d:匹配一個數字字元,同[0-9]
\D:匹配一個非數字字元,同[^0-9]
\n:匹配一個換行符
\r:匹配一個回車符
\s:匹配任何不可見字元,如空格
\S:匹配任何可見字元
\w:匹配任何包括下劃線的單詞字元
\W:匹配任何非單詞字元
flags
g: 全域性匹配
i: 忽略大小寫
m: 多行搜尋
可以寫在一起