对象的解构赋值出现的问题,空字符串和undefined的比较

今天修改了一下项目的样式,因为样式是自己导师手动封装的,所以传不同的参数,就会有不同的效果,记录一下今天遇到的一个问题
这是有问题的样式
在这里插入图片描述
这是原来应该有的样式
在这里插入图片描述
这是原来样式的代码

在这里插入图片描述
这是组件里面封装的代码,想到传入组件中的参数cType为’‘空字符串,根据es6对象的解构赋值,cType应该是默认的default吧,后来样式出现问题,就下断点调试了一下,发现cType的值是’’,于是有去阮一峰老师的es6博客官网重新看了一下对象解构赋值的默认值,原文是这样写的,

在这里插入图片描述
只有与undefined严格相等的时候,才会导致默认值生效,null就不行,空字符串’'也不行,我一直以为‘’和undefined是相等的,因为‘’比较时会被转义成false,undefined也会转义成false(这个观点是不正确的),但是通过demo发现,不是这样的,
这是打印的结果
在这里插入图片描述

我靠,undefined == false居然是false,一直以为是true,因为在之前的印象里面undefined,和unll都可以转换成false,但是undefied和null判断等不等于false时居然都是false,
为了让自己搞明白为啥不相等就去找相关的文章,最后找到了这篇文章,令我茅塞顿开,JavaScript:undefined!=false之解 及==比较的规则
大致说一下:undefined不等于false的原因很简单,因为基本数据类型对于==全等比较的时候,规则是将两边的值转换成数字,再看看转换结果数字是否相等,undefined转化成数字是NAN,所以将Number,String,Boolean与undefined进行比较的时候,总是返回false,至于null不等于false的原因,就是null的类型是一个对象,对象进行全等比较的时候会调用valueOf的方法,返回一个标量,如果valueOf的方法没有返回标量,就会调用toString方法,返回标量(至于具体怎么调用参考上面这篇文章吧,很详细),然后将标量转换成数字进行比较,而null上面没有valueOf和toString方法,所以返回的也是false
既然知道了问题所在,那就很好解决了,因为要严格相等于undefined对象的解构默认值才生效,所以就把空字符串改成undefined就可以了。

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值