随机生成字母和数组的组合
Math.random().toString(36).substr(2);
格式化时间
const dateFormatter = (formatter, date) => {
date = (date ? new Date(date) : new Date)
const Y = date.getFullYear() + '',
M = date.getMonth() + 1,
D = date.getDate(),
H = date.getHours(),
m = date.getMinutes(),
s = date.getSeconds()
return formatter.replace(/YYYY|yyyy/g, Y)
.replace(/YY|yy/g, Y.substr(2, 2))
.replace(/MM/g, (M < 10 ? '0' : '') + M)
.replace(/DD/g, (D < 10 ? '0' : '') + D)
.replace(/HH|hh/g, (H < 10 ? '0' : '') + H)
.replace(/mm/g, (m < 10 ? '0' : '') + m)
.replace(/ss/g, (s < 10 ? '0' : '') + s)
}
dateFormatter('YYYY/MM/DD hh:mm:ss',new Date())
获取变量的实际类型
const trueTypeOf = (obj) => {
return Object.prototype.toString.call(obj).slice(8, -1).toLowerCase();
};
console.log(trueTypeOf(''));
console.log(trueTypeOf(0));
console.log(trueTypeOf());
console.log(trueTypeOf(null));
console.log(trueTypeOf({}));
console.log(trueTypeOf([]));
console.log(trueTypeOf(0));
console.log(trueTypeOf(() => {}));
1. if多条件判断
if (x === 'abc' || x === 'def' || x === 'ghi' || x ==='jkl') {}
if (['abc', 'def', 'ghi', 'jkl'].includes(x)) {}
2. if...else...
let test: boolean;
if (x > 100) {
test = true;
} else {
test = false;
}
let test = x > 10;
let text = x > 10 ? true : false
if(status === 0 || status === 1 || status === 2 || status === 3) {
console.log('按钮可以点击');
}
if([0, 1, 2, 3].includes(status)) {
console.log('按钮可以点击');
}
const statusTextObject = {
100: '已删除',
101: '未开始',
102: '上课中',
103: '已下课',
104: '已评估'
}
text = statusTextObject[status] || '--';
3. Null, Undefined, 空值检查
if (first !== null || first !== undefined || first !== '') {
let second = first;
}
let second = first || '';
4. 函数条件调用
function test1() {
console.log('test1');
};
function test2() {
console.log('test2');
};
var test3 = 1;
if (test3 == 1) {
test1();
} else {
test2();
}
(test3 === 1? test1:test2)();
5. switch多条件
switch (data) {
case 1:
test1();
break;
case 2:
test2();
break;
case 3:
test();
break;
}
var data = {
1: test1,
2: test2,
3: test
};
data[anything] && data[anything]();
6. 隐式返回
function getArea(diameter) {
return Math.PI * diameter
}
getArea = diameter => (
Math.PI * diameter;
)
7. 普通数组去重&对象数组去重
const uniqueArr = (arr) => [...new Set(arr)];
console.log(uniqueArr([1, 2, 3, 1, 2, 3, 4, 5]));
const uniqueElementsBy = (arr, fn) =>arr
.reduce((acc, v) => {if (!acc.some(x => fn(v, x))) acc.push(v);return acc;}, []);
uniqueElementsBy([{id: 1, name: 'Jhon'}, {id: 2, name: 'sss'},
{id: 1, name: 'Jhon'}], (a, b) => a.id == b.id)
8. 从数组中取出相对应属性的值
const reducedFilter = (data, keys, fn) =>data.filter(fn)
.map(el =>keys.reduce((acc, key) => {acc[key] =el[key];return acc;}, {}));
const data = [
{
id: 1,
name: 'john',
age: 24
},
{
id: 2,
name: 'mike',
age: 50
}
];
let a = reducedFilter(data, ['id', 'name'], item => item.age > 24);
9.关于 return cur.push(v*2),cur之谜
let arr=[1,2,3,4]
const b=arr.reduce((cur,v)=> [...cur,v*2],[])
const b1=arr.reduce((cur,v)=> {
return cur.push(v*2),cur
},[])
const b2=arr.reduce((res, cur)=> {
res.push(cur * 2);
return res;
}, [])
return cur.push(v*2),cur等同于return cur
10.邮箱正则
export const isEmail = (e) => {
return /^([a-zA-Z0-9]+[_|_|\-|.]?)*[a-zA-Z0-9]+@([a-zA-Z0-9]+[_|_|.]?)*[a-zA-Z0-9]+\.[a-zA-Z]{2,3}$/.test(e)
}
11.是否是微信浏览器
export const isWeiXin = () => {
return ua.match(/microMessenger/i) == 'micromessenger'
}
12.去除html标签
const removeHtmlTag = (str) => {
return str.replace(/<[^>]+>/g, '')
}
13.动态引入js
export const innerScript = (src) => {
const s = document.createElement('script');
s.type = 'text/JavaScript';
s.async = true;
s.src = src;
const t = document.getElentsByTagName('script')[0];
t.parentNode.insertBefore(s, t)
}
14.判断对象是不是空对象
let data={}
JSON.stringify(data)==='{}'
Object.keys(data).length===0
const isEmpty = obj => Reflect.ownKeys(obj).length === 0 && obj.constructor === Object
15.判断对象中是不是所有值都为空
let data = { name: "1", value: "2", value2: ""}
Object.values(data).every(i=>!i)
Object.values(data).some(i=>!i)
16.双!号操作符将任何变量转换为布尔值
!!0
!!'0'
!!'true'
!!'false'
!!'undefined'
!!false
!!undefined
!!null
17.当满足条件时往对象中添加属性
let isExist = true;
let obj = {
other:'other'
}
if(isExist){
obj.name='IMyself'
}
obj={
...obj,
...isExist&&{name:'IMyself'}
}
18.函数执行时间
console.time('testTime')
for(let i=0;i<10;i++){
console.log(i)
}
console.timeEnd('testTime')
19.判断是否滚动到底部
const bottomVisible = () =>
document.documentElement.clientHeight + window.scrollY >=
(document.documentElement.scrollHeight ||
document.documentElement.clientHeight);
20.去除数组中的空值假值
Array.filter(Boolean);
const newArr = arr.filter((item)=> {
return item && item.trim();
});
21.js拼接get请求参数,加入有值参数去除空参
const formatParams = (params) => {
var result = [];
for (var key in params) {
if (params[key] !== null && params[key] !== undefined && params[key] !== '') {
result.push(key + '=' + encodeURIComponent(params[key]));
}
}
return result.join('&').padStart(result.join('&').length + 1, '?');
}
console.log(formatParams({ a: 1, b: '' }));
22.判断浏览器是否全屏
window.addEventListener('resize', handleResize);
function handleResize() {
if (window.innerHeight == screen.height) {
console.log('浏览器已进入全屏模式');
} else {
console.log('浏览器已退出全屏模式');
}
}
window.onresize = () => {
const clientHeight = document.documentElement.clientHeight || document.body.clientHeight
let isFullScreen = screen.height == clientHeight
}
document.addEventListener('fullscreenchange', (event) => {
if ((window.innerWidth === screen.width && window.innerHeight === screen.height) || window.fullScreen) {
console.log('浏览器进入全屏模式');
} else {
console.log('浏览器退出全屏模式');
}
});
23.url参数转对象
parseQueryString: function (url) {
url = url == null ? window.location.href : url
var search = url.substring(url.lastIndexOf('?') + 1)
if (!search) {
return {}
}
return JSON.parse('{"' + decodeURIComponent(search).replace(/"/g, '\\"').replace(/&/g, '","').replace(/=/g, '":"') + '"}')
},
24. 对象序列化
stringfyQueryString: function (obj) {
if (!obj) return '';
var pairs = [];
for (var key in obj) {
var value = obj[key];
if (value instanceof Array) {
for (var i = 0; i < value.length; ++i) {
pairs.push(encodeURIComponent(key + '[' + i + ']') + '=' + encodeURIComponent(value[i]));
}
continue;
}
pairs.push(encodeURIComponent(key) + '=' + encodeURIComponent(obj[key]));
}
return pairs.join('&');
},
25. 时间格式化
formatDateTime: class formatDateTime {
constructor(date, type) {
this.date = !date ? new Date() : (typeof date == 'number' ? new Date(date) : date)
this.type = type
}
toSet() {
var y = this.date.getFullYear();
var m = this.date.getMonth() + 1;
m = m < 10 ? ('0' + m) : m;
var d = this.date.getDate();
d = d < 10 ? ('0' + d) : d;
var h = this.date.getHours();
var minute = this.date.getMinutes();
var s = this.date.getSeconds();
s = s < 10 ? ('0' + s) : s;
minute = minute < 10 ? ('0' + minute) : minute;
if (this.type == 'hm') {
return h + ':' + minute
} else if (this.type == 'mdhm') {
return m + '-' + d + ' ' + h + ':' + minute
} if (this.type == 'ymd') {
return y + '-' + m + '-' + d
} else {
return y + '-' + m + '-' + d + ' ' + h + ':' + minute + ':' + s
}
}
}