栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

分享一道很有意思的面试题

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

分享一道很有意思的面试题

今天看到一个很好玩的面试题,只修改 obj 内部代码使下方输出的结果为:true

let obj = {
  a: 1
}

//输出结果毫无疑问就是false,如何使输出结果为true呢?
console.log(obj == 1 && obj == 2 && obj == 3); //false
题解
        let obj = {
            a: 1,
            valueOf() {
                return this.a++
            }
        }

        console.log(obj == 1 && obj == 2 && obj == 3);

想要理解这道题首先要明白 valueOf 是什么

在对象中写一个 valueOf 函数可以通过隐式转换自动触发。比如:比较、计算、隐式转换等等

        let obj = {
            a: 1,
            valueOf() {
                return this.a++
            }
        }


        //比较
        console.log(obj == true); //true
        
        //计算
        console.log(obj + 1); //3
        
        //隐式转换
        console.log(!!obj); //true
        
        //直接输出就是一个对象
        console.log(obj); //{a: 3, valueOf: ƒ}

由此可知,只要对象发生了比较、计算、隐式转换就会自动触发函数 valueOf

如果你理解了上述,那么答案你应该就自然明白了

        let obj = {
            a: 1,
            valueOf() {
                return this.a++
            }
        }

        //见下述解释
        console.log(obj == 1 && obj == 2 && obj == 3);

产生隐式转换后a返回1,11结果为true,然后a++变成了2,22结果为true 依次类推…

上面这道题如果理解了,那就看这一道题,同样的思路

        let obj = {
            a: 10
        }

        // 如何使结果为true?
        console.log(obj == 10 && obj == 20 && obj == 30);
题解
      let obj = {
            a: 10,
            valueOf() {
                if(this.a == 10){
                    this.a = 20;

                    return 10;
                }else if(this.a == 20){
                    this.a = 30;

                    return 20;
                }else{
                    return 30
                }
            }
        }

        console.log(obj == 10 && obj == 20 && obj == 30); //true

解释:如果a的值为10就把他的值设置为20然后返回10,如果a的值为20就设置为30并返回20,最后如果a的值不等于10、20就让他返回30

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/1000099.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号