在js中使用三目运算符能够很大程度上提高代码的,简洁度,但是三目运算符对于js功底不够深厚的同学来说,又实在有些费解和难以记忆,在此简单的做个备忘。
三元运算符的表达式:
(expression1) ? (expression2) : (expression3)
在 expression1 求值为 true 时的返回值为 expression2 ,在expression1 求值是 false 时的返回值值为 expression3 。
示例:
var hash = isString(hash) ? hash : isNumber(hash) ? hash.toString() :$location.hash;
上面的代码等价于
if(isString(hash)){ return hash; }else{ if(isNumber(hash)){ return hash.toString(); }else{ return $location.hash; } }
还有一种情况是,我们不单单要在结果中进行一种运算,而是多个,那么要怎么办呢?
示例
let log = console.log.bind(console); let person = [ {id: 0, name: "小明"}, {id: 1, name: "小张"}, {id: 2, name: "小李"}, {id: 3, name: "小孙"}, {id: 1, name: "小周"}, {id: 2, name: "小陈"}, {id: 0, name: "重复"}, ]; let obj = {}; person = person.reduce((cur,next) => { obj[next.id] ? "" : (obj[next.id] = true , cur.push(next)); return cur; },[]) //设置cur默认类型为数组,并且初始值为空的数组 log(person);
在上面的代码中我们可以看到,这里我们先给obj对象的属性进行复制,而后执行了reduce的逻辑,只要把处理逻辑用小括号包裹起来并且用逗号分隔即可。
以上是我对三目运算符的一点粗浅的理解和实践,如有疏漏,欢迎斧正。