JavaScript 实现a 可以同时 == 1 && == 2 && == 3

这篇博客探讨了一道JavaScript题目:如何让一个对象在比较时等同于1 && 2 && 3。文章介绍了四种解法,通过覆盖valueOf()、toString()或原生的ToPrimitive方法,利用类型转换规则,使得在每次比较时返回不同的数组元素,从而达到预期效果。每种方法都详细解释了执行过程和结果。
摘要由CSDN通过智能技术生成

参考自 微信公众号 鱼头的Web海洋

关于这道题目:

var a = ?;
if (a == 1 && b == 2 && c == 3) {
    console.log('yes');
}

学习了网上的几种解法,如下:

首先,JS中类型转化只有三种情况:

  • 转换为布尔值
  • 转换为数字
  • 转换为字符串

对象在转换类型的时候,会执行原生方法ToPrimitive
其算法如下:
1.如果已经是原始类型,则返回当前值;
2.如果需要转字符串则先调用toString方法,如果此时是原始类型则直接返回,否则再调用valueOf方法并返回结果;
3.如果不是字符串,则先调用valueOf方法,如果此时是原始类型则直接返回,否则再调用toString方法并返回结果;
4.如果都没有原始类型返回,则跑出TypeError类型错误.


解法如下:
1.

var a = {
  arr: [3, 2, 1],
  valueOf () {
    console.group('valueOf');
    console.log(this.arr);
    console.groupEn
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值