有趣的赋值逻辑运算符

写在前面

我们在写js逻辑的时候,不可否认的用到了很多逻辑的运算符,像||、&&这些,那么我们基本都是在三元运算符或者if判断里进行使用,那么我们其实可以在赋值的时候一样的使用,今天我们就看看怎么使用它来写一些看起来比较牛逼的代码!

规则

首先说一下他们的规则,比如我们写一个简单的赋值:

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就直接取左边的
  • 如果||和&&同时存在,首先计算&&其次计算||

写个🌰

/**
		 * @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,所以我们一般写逻辑的时候首先判断该值是不是传递了,从而进行一个业务的执行,但是如果使用赋值逻辑运算符怎么写呢?

改写的🌰

/**
		 * @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过去,所以才会有这样的写法存在。

谢谢阅读

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章