1. Булево суждение
вар б = правда
if(b) is if(true) эквивалентно сокращению if(b===true)
2. Численная оценка
if(n) эквивалентно сокращению if(n!==0 && !isNaN(n))
3. Определить, пуста ли строка
if(str) эквивалентно сокращению if(str!=='')
4. Определить, существует ли объект
if(obj) эквивалентен сокращению if(obj!==undefined && obj!==null)
//如果对像不存在
if(!obj){
console.log('对象不存在!')
//相当于if(obj===undefined || obj===null)的简写
}
4.1 Определить, является ли объект пустым. if(Object.keys(obj).length>0) не имеет сокращения. Это способ написания ES6.
var obj={}
if(Object.keys(obj).length!==0){
//对象不为空
console.log(true)
}else{
//对象为空
console.log(false)
}
Если ES5, вы можете использовать метод for in или преобразовать строку json, чтобы определить, является ли объект obj пустым.
//定义全局变量,定义一个对象person
var person = {name:'张三'}
//定义一个方法,判断对象是否为空。
function isOwnProp(obj) {
//遍历对象属性。
//如果有属性就进入循环,找到一个属性就返回true并退出循环和结束函数。
for (let key in obj) {
return true
}
return false
}
//调用方法进行判断
if (isOwnProp(person)) {
console.log('对象不为空,拥有自有属性!')
} else {
console.log('对象为空!')
}
или объект для строки
if(JSON.stringify(obj)==='{}'){
console.log('对象为空!')
}
5. Длина определяет, является ли массив пустым.
var arr = []
if (arr.length > 0) {
//数组不为空
} else {
//数组为空
}
Нить — это массив специальных бусин, который помимо индекса массива, такого как str[0], также имеет атрибут длины. Следовательно, if(str.length>0) также можно использовать для определения того, пуста ли строка.
length нельзя использовать для определения существования объекта, потому что объект не имеет собственного свойства длины, то есть obj.length не определено. А когда obj=null или undefined, выполнение программы obj.length вызовет исключение и сообщит об ошибке.
6. Необязательный оператор цепочки ( ?. )
if(obj?.age) эквивалентно сокращению if(obj && obj.age)
Это сокращение для if( obj != null && obj != undefined && 'age' in obj && obj.age )
?. Можно использовать множественное сплайсинг. Позволяет считывать значение свойства, расположенного глубоко в цепочке объектов, без необходимости явно проверять правильность каждой ссылки в цепочке.
let name = obj?.sub?.item?.name
Функция этого кода заключается в том, что об ошибке не будет сообщено, даже если obj, sub или item не определены.
Предварительное условие, obj должен быть объявлен первым, иначе все равно будет выброшено исключение.
То есть, если в объекте obj есть податрибут, под податрибутом есть атрибут элемента, а в объекте элемента есть атрибут имени, то возвращается значение имени, в противном случае возвращается значение undefined. Независимо от результата код выполняется нормально, и исключения не выполняются.
Если ?. не используется, то есть пусть name=obj.sub.item.name, пока один из объектов obj, sub и item не определен, программа выдаст ссылочное исключение, то есть xxx не определено и сообщить об ошибке.