框架和业务中的区别-简单理解

框架和业务中的区别-简单理解

一个普通的函数,传入两个参数,查看是否有变化,有返回true,没有返回false

在普通业务中,我们可能这样写就可以完成了

export function hasChanged(x, y) {
    return x!==y;
}

image-20230923143433271

但如果在框架中,我们需要考虑各种不同场景,来看下面的代码

export function hasChanged(x, y) {
    if (x === y) {
        return x === 0 && 1 / x !== 1 / y
    }else {
        return x === x || y === y
    }
}

如果 x === y 就证明相同,没有变化,那为什么要返回下面一大串不直接返回 false 呢?

有没有可能,两个东西相等但它是不同的东西

有,0! ,如+0 === -0 ,但 +0-0 是两个东西,如下

为什么+0-0不一样呢?因为运算特点不同,1/+0 = Infinity1/-0 = -Infinity

正无穷 Infinity 负无穷 -Infinity

image-20230923143839085

所以我们在第一个if判断返回时加上了x === 0 && 1 / x !== 1 / y这样的判断,即x 为 0,如果x是+0,y是-0,那就后面的判断就成立,返回就是true表示有变化

image-20230923144139336

我们接下来的else判断返回也是一样的理解,为什么x !== y不直接返回true呢?

有没有可能两个东西不相等,但它是同一个东西呢?

有,NaN!,如NaN === NaN它是false

image-20230923144849397

所以在else判断返回时,让 x 和 y 自身比较来排除了NaN的情况

最后,官方是有注意到这种情况的,所以提供了Object.is()方法来进行判断

image-20230923145213770

所以我们的函数就可以改为如下

export function hasChanged(x, y) {
   return !Object.is(x,y);
}

image-20230923145413470

通过这个简单的例子,可以想想在平时写代码时有没有什么没有考虑到的,希望对你有所帮助!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值