资讯专栏INFORMATION COLUMN

一道前端面试题引发的思考

gaomysion / 1667人阅读

摘要:直接开始题目是厉害了说句实话开发中谁写成这样保证会被打死。不过面试就是面试,有面试官的考量点。官方是这么说的。结果完美,不过小姐姐的意思是数组的方法会自动触发数组的。

直接开始题目是
if(a==1 && a==2 && a==3){
    alert("厉害了")
}

说句实话开发中谁写成这样保证会被打死。

不过面试就是面试,有面试官的考量点。

我理解的点有两个

1、隐式类型转换

先说说隐式类型转换有几种情况

先说条件判断 ==

String和Number比较:"1" == 1,字符串会调用Number()方法转为数字后再比较。

Boolean和Number比较:true == 1, Boolean调用Number()方法转为数字后再比较。

布尔值和字符串比较:true == "1",会将双方调用Number()转换为Number,然后再进行比较。

总结一句话,==两侧非Number都会调用Number()转化后再调用。

再说说 + - * /运算符

它们四个可以分两类,+和其它,我们都知道+既可以做运算符也可以做字符串链接。

1+1 = 2
1+"1" = "11"
2-"1" = 1
2*"1" = 2
2-/"1" = 2

除了+号运算符,其它运算符两侧如果有字符串数字的话也是会调用Number转换再运算。

聊到这里你发现这和题目没毛关系啊!过来人告诉你 冷静!往下看

2、valueOf / toString等原生api的掌握程度

针对对象的valueOf / toString等原生api,我们看数字和对象的比较/数字和对象的运算

以上我们总结单纯的隐式类型转换没办法解决问题

js里除了空字符串、数字0、null、undefined、false、NaN为假 其它均为真。

JavaScript调用valueOf方法将对象转换为原始值。你很少需要自己调用valueOf方法;当遇到要预期的原始值的对象时,JavaScript会自动调用它。官方是这么说的。

1 == {
    valueOf:()=>{
        return 1
    }
}

//true

从结果看 对象会自动调用valueOf方法

这样我们就可以改成:

a = {
      value :0,
      valueOf :function(){
            this.value++
            return this.value
      }
}

1==a //true
2==a //true
3==a //true
//结果为true,每次隐式类型转换的过程都会自动调用valueOf。

//接下来说toString

//都有valueOf了 还说toString干嘛,的确默认都会调用,只不过有优先级。
//我只能说js作者很牛逼。

//如果同时有包含它们两个(valueOf和toString会怎么样

a = {
      value :0,
      valueOf :function(){
            this.value++
            return this.value+"aa"
      },
      toString:function(){
           this.value+=2
           return this.value
      }
}

规则就是这样,当valueOf返回不为基本类型的时候,回去调用toString方法。

调用了三次结果变为6

还有一个很骚的方法,是从一个小姐姐博客看到的,https://juejin.im/post/5d124a12f265da1b9163a28d
文章第六题:我聊的这个就是这个题,不过感觉小姐姐聊得更专业点。

let arr=[1,2,3]
arr.join = arr.shift
arr ==1
arr ==2
arr ==3

结果完美,不过小姐姐的意思是数组的toString方法会自动触发数组的jion。
这个真是厉害了!

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/105311.html

相关文章

  • 一道简单面试引发思考

    摘要:另一个问题,就是我下面要提及的作用域问题,我当时思考的时间太久了这是回忆中的面试题实际略有差异,不纠结了说一下脚本的运行结果引用错误中给出的错误提示。 版权声明:此文首发于我的简书账号人生还有多少个二十年,转载请注明出处。 此处有几百字唠叨:   当天,我早早起床,跨越上百公里,高德导航,路人指点,跌跌撞撞到达招聘会现场,当时已是中午十二点半,吃了午餐(半瓶白开水),开始准备投递...

    wpw 评论0 收藏0
  • 一道面试引发思考 --- Event Loop

    摘要:想必面试题刷的多的同学对下面这道题目不陌生,能够立即回答出输出个,可是你真的懂为什么吗为什么是输出为什么是输出个这两个问题在我脑边萦绕。同步任务都好理解,一个执行完执行下一个。本文只是我对这道面试题的一点思考,有误的地方望批评指正。 想必面试题刷的多的同学对下面这道题目不陌生,能够立即回答出输出10个10,可是你真的懂为什么吗?为什么是输出10?为什么是输出10个10?这两个问题在我脑...

    betacat 评论0 收藏0
  • 一道面试引发思考 --- 理解 new 运算符

    摘要:首先,我先去上搜索了的定义运算符创建一个用户定义的对象类型的实例或具有构造函数的内置对象的实例。 今天看到一道面试题,如下,问: 实例化 Person 过程中,Person返回什么(或者 p 等于什么)? function Person(name) { this.name = name return name; } let p = new Person(Tom); 说实...

    shengguo 评论0 收藏0
  • 一道面试引发思考:(2)

    摘要:由虚拟机生成并抛出,,属于系统内部错误或者资源耗尽等严重情况,属于需要担负的责任,这一类异常事件是无法恢复或者不可能捕获的,将导致应用程序中断,但是自定义是可以捕获的。 题目 showImg(http://img-storage.qiniudn.com/15-9-22/50608386.jpg); 答案:D 分析 Java 异常的结构体系 showImg(http://img-stor...

    stefan 评论0 收藏0
  • 一道面试引发思考

    摘要:下面我们来使用面向对象类图这里就不再画了首先面试题中所提到的我们都可以看成类,比如停车场是一个类吧,它里面的车位是一个类吧,摄像头,屏幕。。。 以下是某场的一道面试题(大概): 1、一个停车场,车辆入场时,摄像头记录下车辆信息2、屏幕上显示所接收的车辆的信息情况(车牌号)以及各层车位的车位余量3、停车场一共四层车位,其中的三层都为普通车位,还有一层为特殊车位(体现在停车计费价格上面的不...

    Apollo 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<