一、非空判断
1.判断字符是否为空
if(strVal || strVal===0){
// ... 不为空时候去处理
}
取反运算符,以下都为false,如:false、undefined、null、空字符串('')、数字0、数字NaN
2.判断数组是否为空
要注意数组是否被转换为undefined
let arr = []
if (arr.length === 0){
// ... 为空的时候去处理
}
3.判断对象是否为空
- es6中可以使用Object.keys(obj),该方法返回值是对象中属性名组成的数组
if(Object.keys(data).length === 0){
// ... 为空的时候去处理
}
- 将json对象转化为json字符串,再判断该字符串是否为空
4.判断为空的简写方法
if (letiable1 !== null || letiable1 !== undefined || letiable1 !== '') {
// ... 不为空
}
5.用户输入框为空
为空格,制表符,换页符 等,用正则去掉空符来判断
if (str.replace(/(^s*)|(s*$)/g, "").length ==0) {
console.log('不能为空')
}
二、浅拷贝/深拷贝
赋值: 赋的是该对象的在栈中的地址,而不是堆中的数据。
浅拷贝: 拷贝后,对象的基本数据类型互不影响,但二级子类型数据会影响
深拷贝: 拷贝后,新的内存地址,数据互不影响
对象的浅拷贝
1、对象的直接遍历赋值
2、ES6中的 let copyObj = Object.assign({}, obj);
3、ES7扩展运算符 let copyObj = { ...obj }
对象的深拷贝
JSON.parse(JSON.stringify())
可以实现数组或对象深拷贝,但不能处理函数和正则
三、数组对象
1. 添加新属性(数组对象)
如:添加1项属性showIndex
arr.forEach((item,index) => {
item.showIndex = index
})
// 方式 1
let newArr = arr.map( item =>{
return {...item, isSelected:true}
})
// 方式 2
let newArr = []
arr.map(item => {
newArr.push(
Object.assign({},item,{isSelected:true})
)
})
2. 删除
for (let i = 0; i < length; i++) {
if (_arr[i] == _obj) {
if (i == 0) {
_arr.shift(); //删除并返回数组的第一个元素
return _arr;
}
else if (i == length - 1) {
_arr.pop(); //删除并返回数组的最后一个元素
return _arr;
}
else {
_arr.splice(i, 1); //删除下标为i的元素
return _arr;
}
}
}
3.去重(数组对象中,根据1个属性)
// 回显数据去重处理
let obj = {}
let newArr = orgArr.reduce((cur, next) => {
if (!obj[next.lesseeId]) {
obj[next.lesseeId] = true
cur.push(next)
}
return cur
}, [])
四、if.else的替代
1.排非策略和三元运算符
if (!user || !password) return throw('数据不能为空!')
2.多条件判断
if (type === 'jpg' || type === 'png' || type === 'gif' || type === 'svg') {
// ...
}
// 等效于:
if (imgArr.includes(type)) {
...
}
3.对象关联的键值对
let enums = {
'A': handleA,
'B': handleB,
'C': handleC
}
function action(val){
let handleType = enums[val]
handleType()
}