写在前面
我们在写js逻辑的时候,不可否认的用到了很多逻辑的运算符,像||、&&这些,那么我们基本都是在三元运算符或者if判断里进行使用,那么我们其实可以在赋值的时候一样的使用,今天我们就看看怎么使用它来写一些看起来比较牛逼的代码!
规则
首先说一下他们的规则,比如我们写一个简单的赋值:
代码语言:javascript复制let name = 0 || 2 //结果:2
let name = 0 && 2 //结果:0
let name = 0||4 && false || 4 //结果:4
是不是脑子有点懵,这里说一下规则
- || 首先判断左边是true还是false,如果是true就直接取左边的,如果是false就直接取右边的
- && 首先判断左边的是true还是false,如果是true就直接取右边的,如果是false就直接取左边的
- 如果||和&&同时存在,首先计算&&其次计算||
写个?
代码语言:javascript复制/**
* @param {Object} value 形参值
* @param {Object} callback、 形参 函数
*/
function fn(value, callback) {
if (typeof value === 'undefined') value = 0;console.info(value)
if(callback){
callback()
}
}
/**
* @csdnfn 作为实参传递
*/
function csdnfn() {
console.info("ok")
}
window.onload = function() {
fn(csdnfn())
}
这是一段很普通的代码,写过js的基本上都可以看的明白,我们给fn两个参数,一个是值,一个是函数,因为js如果你不给形参值的话,那么他形参本身是undefined,undefined其实在布尔中是false,所以我们一般写逻辑的时候首先判断该值是不是传递了,从而进行一个业务的执行,但是如果使用赋值逻辑运算符怎么写呢?
改写的?
代码语言:javascript复制/**
* @param {Object} value 形参值
* @param {Object} callback、 形参 函数
*/
function fn(value, callback) {
console.info(value = value || 0) //如果vlaue为false,直接赋值为0
callback && callback() //如果函数存在,直接执行右边的
}
/**
* @csdnfn 作为实参传递
*/
function csdnfn() {
console.info("ok")
}
window.onload = function() {
fn(csdnfn())
}
结果:
怎么样,是不是看起来就比较装逼了,其实我们看大神的代码的时候,很多的时候会这样写,其实好不好呢,我觉得不好,那如果我直接传一个null过去,其实是false,但是他给我赋值为0了,怎么办,只是说我们一般情况下默认不会传一个false过去,所以才会有这样的写法存在。