美文网首页工作生活
一道前端面试题引发的思考

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

作者: 我是一个前端 | 来源:发表于2019-07-04 15:47 被阅读0次

直接开始题目是

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
      }
}

image.png

规则就是这样,当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。
这个真是厉害了!

相关文章

  • 2017 前端面试准备 - 收藏集 - 掘金

    一道面试题引发的对 javascript 类型转换的思考 - 前端 - 掘金 最近群里有人发了下面这题:实现一个函...

  • 2017 前端面试准备 - 收藏集 - 掘金

    一道面试题引发的对 javascript 类型转换的思考 - 前端 - 掘金最近群里有人发了下面这题:实现一个函数...

  • 前端知识 - 收藏集 - 掘金

    一道 JS 面试题所引发的 "血案",透过现象寻本质,再从本质看现象 - 前端 - 掘金觉得本人写的不算很烂的话,...

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

    直接开始题目是 说句实话开发中谁写成这样保证会被打死。 不过面试就是面试,有面试官的考量点。 我理解的点有两个 1...

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

    最近在看前端面试题的过程中,发现在stackoverflow上有这么一道题,题目大概是这样的: 一看到这道题,相信...

  • 一道面试题引发的思考

    之前接触到了一道面试题目,分析之后觉得这道题目很有意思,考察了很多的底层知识。记录下来以便帮自己整理思路... 有...

  • 一道面试题引发的思考

    起因 今天跟一位程序员朋友日常聊天,聊到了一道面试题: 请用JS实现一个函数InsertItemToArray,函...

  • 一道面试题引发的思考

    转自:产品经理从0到1 之前面了几家公司,感受到了不同产品总监迥异的面试风格,有聊实的,有聊虚的,有单聊业务的,也...

  • 一道面试题引发的思考

    搜狐面试题:有12个球,外形都一样,其中有一个质量和其他的不一样,给你一架天平,请问最少称几次可以把那个不同的球找...

  • 前端面试宝典之:parseInt的陷阱

    parseInt 陷阱 从一道面试题说起 前端圈内流传着一道非常经典,但是非常容易踩坑的面试题。如下: 请问,你认...

网友评论

    本文标题:一道前端面试题引发的思考

    本文链接:https://www.haomeiwen.com/subject/xgllhctx.html