努力工作,日益消瘦,总有些代码不想记住。我称之为:拿来即用系列
一:格式化时间
1.去除时间的T
// 去除日期中T
function timeFormatSeconds(time) {
if(!time) return time;
var date = time.substr(0, 10); //年月日
var hours = time.substring(11, 13);
var minutes = time.substring(14, 16);
var seconds = time.substring(17, 19);
var timeFlag = date + ' ' + hours + ':' + minutes + ':' + seconds;
timeFlag = timeFlag.replace(/-/g, "/");
timeFlag = new Date(timeFlag);
timeFlag = new Date(timeFlag.getTime() + 8 * 3600 * 1000);
timeFlag = timeFlag.getFullYear() + '-' + ((timeFlag.getMonth() + 1) < 10 ? "0" + (timeFlag.getMonth() + 1) : (timeFlag.getMonth() + 1)) + '-' + (timeFlag.getDate() < 10 ? "0" + timeFlag.getDate() : timeFlag.getDate()) + ' ' + (timeFlag.getHours() < 10 ? "0" + timeFlag.getHours(): timeFlag.getHours()) + ':' + (timeFlag.getMinutes() < 10 ? "0" + timeFlag.getMinutes(): timeFlag.getMinutes()) + ':' + (timeFlag.getSeconds() < 10 ? "0" + timeFlag.getSeconds() : timeFlag.getSeconds());
return timeFlag;
}
复制代码
2.去除时间的T(正则)
2022\10\31更新
let str = "123abc";
str.replace(/[a-zA-Z]+/g,""); //去掉字母
复制代码
2.格式化时间
2022\10\31更新
export function parseTime(time, pattern) {
if (arguments.length === 0 || !time) return null;
const format = pattern || '{y}-{m}-{d} {h}:{i}:{s}';
let date;
if (typeof time === 'object') {
date = time;
} else {
if ((typeof time === 'string') && (/^[0-9]+$/.test(time))) {
time = parseInt(time);
} else if (typeof time === 'string') {
time = time.replace(new RegExp(/-/gm), '/');
}
if ((typeof time === 'number') && (time.toString().length === 10)) {
time = time * 1000;
}
date = new Date(time);
}
const formatObj = {
y: date.getFullYear(),
m: date.getMonth() + 1,
d: date.getDate(),
h: date.getHours(),
i: date.getMinutes(),
s: date.getSeconds(),
a: date.getDay(),
};
return format.replace(/{(y|m|d|h|i|s|a)+}/g, (result, key) => {
// @ts-ignore
let value = formatObj[key];
// Note: getDay() returns 0 on Sundayday
if (key === 'a') {
return ['日', '一', '二', '三', '四', '五', '六'][value];
}
if (result.length > 0 && value < 10) {
value = '0' + value;
}
return value || 0;
});
}
复制代码
二:XSS和转义符
1.后端返回字段中有>号和<号,导致浏览器编译不正确
functionXSS_encode_html ( str ){
returnstr ? str.replace(/[<">']/g, (a) => {
return {
'<':'<',
'"':'"',
'>':'>',
"'":'''
}
[a]}) : '';
}
复制代码
三:循环
1.return
function back(){
for (let p = 0; p < 4; p++) {
if (p>2) {
for (let l = 0; l < 3; l++) {
if (l>2) {
console.log('l>2');
return
}else{
console.log(l,'l');
}
}
console.log('退出第一层循环');
}
}
console.log('退出第二层循环');
}
back()//0 'l', 1 'l', l>1,未打印退出循环。结论是return能直接结束函数
复制代码
2.continue
continue:continue 会结束本次循环,直接开始下一次循环。对于 for 循环,执行continue 语句后自增语句仍然会执行,对于 while 和 do…while 循环,continue 语句会重新进行循环的判断。
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 1) {
continue
}
console.log(i + '-' + j)
}
}
//0-0, 0-2, 1-0, 1-2, 2-0, 2-2
复制代码
3.break
break实际有两种用法
1.它可用于终止 switch 语句中的一个 case。
2.当 break 语句出现在一个循环内时,循环会立即终止,且程序流将继续执行紧接着循环的下一条语句。如果是多层循环,break 语句会跳出所在的当前整个循环,到外层代码继续执行。break不仅可以结束其所在的循环,还可结束其外层循环,但一次只能结束一种循环
for (let i = 0; i < 3; i++) {
for (let j = 0; j < 3; j++) {
if (j === 2) {
break
}
console.log(i + '-' + j)
}
}
//0-0, 0-1, 1-0, 1-1, 2-0, 2-1
复制代码
4.albel语句
从无线嵌套的n循环内直接跳出来,而非只结束一层循环 ||--`label语句--
2. var num = 0;
point:
for (var i=0;i<10;i++){
for(var j=0;j<10;j++){
if(i == 3 && j==4){
break point;
}
}
num = i * j;
console.log(num)//0,10,20
//循环在i=3,j=4跳出了双层循环,到了point处
}
复制代码
四:阻塞进程
1.弹窗
- 弹窗有时候阻塞代码进程,
比如说原生的alert,confirm ,prompt。此刻必须点击确定,才会继续下一步。而有的则不会,比如ui框架的dialog。此时代码是不会阻塞的