5种方法实现(a==1 a==2 a==3) == true
创始人
2024-01-28 02:47:51
0

乍一看,这个咋能相等呢?深入思考就发现不仅可以相等,还有不少方法,下面就来讲讲这些方法都是如何实现的。

一、valueOf && toString

直接上代码:

比较运算分为2种, 一种为严格比较(===),只有类型相等,值也一致时才会为true,否则为false。

另一种为抽象相等也叫宽松相等(==),现将运算数转化为相同类型(隐式转换),再做比较。

看看js中隐式转换的规则,可以参考 JS中的隐式转换

签名:ToPrimitive(input, PreferredType?) //PreferredType: Number 或者 String

流程如下:

  1. input为原始值,直接返回;
  2. 不是原始值,如果有symbol.toPrimitive方法,则调用该方法,否则执行3;
  3. 调用该对象的valueOf()方法,如果结果是原始值,返回原始值;
  4. 调用valueOf()不是原始值,调用此对象的toString()方法,如果结果为原始值,返回原始值;
  5. 如果返回的不是原始值,抛出异常TypeError。

其中PreferredType控制是调取valueOf()还是toString()。

ps: Date类型按照String去调用。

再看看 == 比较的转换规则 参考 ECMA抽象等于比较语法

上面的规则抽象成表格如下:

我们上述情况适用于第9条,先把Object转换成原始类型再做比较。拆分开就发生了如下过程:

好了,知道了上面的这些操作规则,那么把toString()改成valueOf()也是完全可以的

二、Array && join

数组对象的隐式转换遵从对象的转换规则,但是在调用数组的toString()方法之前先调用了一下join()方法

所以我们就可以这样写了

三、Symbol.toPrimitive

根据上面第一条规则,我们可以重写对象的symbol.toPrimitive方法。

上面的方法都是通过隐式转换实现,还有一种是直接通过数据劫持。

四、Object.defineProperty

五、Proxy

同样使用proxy也是完全可以的。

相关内容

热门资讯

开封市创业小本项目 开封市创业... 看到很多朋友说:在开封发展没有前途,觉得很不可思议。我个人认为,在开封创业是可有作为的。关键是如何去...
10个小本创业项目 10个小本... 10个小本创业项目(附案例)故事项目:烤地瓜认识一对烤地瓜的老人,老夫妻俩个是背井来到城里,因为在农...
对口援疆 潮涌天山丨天山闽水共...   闽水情长润天山,丝路共鸣绘山海。  从1999年福建省首批援疆干部挥别山海来到天山脚下的新疆昌吉...
小本创什么项目好?5个最容易上... 点击添加图片描述(最多60个字)照片书这种风靡欧美的个人图片保护模式,已经从欧美展开,于2017年9...
最适年轻人小本创业阅读小项目大... 90后事业有成,有房有车,年纪轻轻就赢得了普通人可能要奋斗一辈子的东西,这真的令很多人羡慕,可见事业...
最适合年轻人的五个创业小本生意... 四、年轻人冷门创业小本生意:个性化小礼品个性化小礼品这种风靡欧美的个人图片保存新模式,已经从欧美展开...
小本创业好项目 小本创业项目范... 选择创业项目时,投资企业家会尽力选择自己熟悉的行业或对相关知识有很好把握的行业,然后他们才能充分利...
马云点评创业 马云点评创业 马... 7.马云点评创业的经典语录:生存下来的第一个想法是做好,而不是做大。8.马云点评创业的经典语录:创业...
马云创业演讲 马云创业演讲 马... 马云演讲稿梦想与坚持导语:演讲稿也叫演讲词,它是在较为隆重的仪式上和某些公众场合发表的讲话文稿。演讲...
益补居小吃是小本创业投资者的首... 益补居小吃是小本创业投资者的首选项目发布时间:2013-06-发布人:顾工来源:六婆串串香描述:益补...