前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >有趣的赋值逻辑运算符

有趣的赋值逻辑运算符

作者头像
何处锦绣不灰堆
发布2020-05-28 22:59:36
8700
发布2020-05-28 22:59:36
举报
文章被收录于专栏:农历七月廿一农历七月廿一
写在前面

我们在写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 === '?developer/article/1634671/undefined') value = 0;console.info(value)
			if(callback){
				callback()
			}
		}
        /**
		 * @csdnfn 作为实参传递
		 */
		function csdnfn() {
			console.info("ok")
		}
		window.onload = function() {
			fn(csdnfn())
		}

这是一段很普通的代码,写过js的基本上都可以看的明白,我们给fn两个参数,一个是值,一个是函数,因为js如果你不给形参值的话,那么他形参本身是?developer/article/1634671/undefined,?developer/article/1634671/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过去,所以才会有这样的写法存在。

本文参与?腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2020-03-26 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客?前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与?腾讯云自媒体分享计划? ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 写在前面
  • 规则
  • 写个?
  • 改写的?
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
http://www.vxiaotou.com