V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
AshoneA
V2EX  ›  程序员

面试的时候看到的一些细节问题

  •  
  •   AshoneA · 2019-03-15 23:17:53 +08:00 · 6749 次点击
    这是一个创建于 2058 天前的主题,其中的信息可能已经有所发展或是发生改变。

    今天面试一位前端的时候,给他出了道题目让他写点代码,答案没写出来也没什么,就是发现面试的人在判断两个值是否相等的时候居然用的是==而不是===,个人感觉只要写 JS 超过半年以上应该会很习惯的用===去判断,==几乎是不会用到的一个判断符号(而且 eslint 大部分的规则都会直接提示==是不合法的)。面试的人在我心中就感觉是个基本不怎么写代码的人...而且简历上的一些项目百度了一下居然能出来个好几页,这是培训出来的吗?还是我的判断有误,请各位指教一下

    第 1 条附言  ·  2019-03-16 23:49:56 +08:00
    谢谢各位的意见哈,怪我没有说清楚吧,其实本来是出了道类似排序难度的算法题目给他做,只是看到他代码中有一段判断值的时候用的是==,并不是专门考察==和===的区别哈。如果他这个题目没有解出来我就会去看下他的代码规范之类的,因为总要看到面试者有没有可取之处嘛,如果题目没有做出来规范我觉得也很 OK。
    如果因为说了用==的代码不好惹到了用==的老哥,表示抱歉了。
    46 条回复    2019-03-17 12:02:25 +08:00
    zealot0630
        1
    zealot0630  
       2019-03-15 23:31:39 +08:00 via Android
    说不定人家是 coffee/dart 出身呢
    AshoneA
        2
    AshoneA  
    OP
       2019-03-15 23:33:16 +08:00
    @zealot0630 不是的哈,一直都是写前端的呢
    zbinlin
        3
    zbinlin  
       2019-03-15 23:40:29 +08:00
    过去就过去了,没必要揪着别人不放。
    akatquas
        4
    akatquas  
       2019-03-15 23:43:01 +08:00 via iPhone
    考察原理,不要纠结语法细节
    xlui
        5
    xlui  
       2019-03-15 23:54:45 +08:00 via iPhone
    楼上说不要纠结语法细节的,我觉得如果语法细节不做好,到时候入职了写的也是垃圾代码。
    zhoufenfens
        6
    zhoufenfens  
       2019-03-15 23:57:45 +08:00
    完了,写==的都写的是垃圾代码
    AshoneA
        7
    AshoneA  
    OP
       2019-03-16 00:00:36 +08:00   ❤️ 1
    @akatquas 我觉得这不是语法细节吧,如果写 JS 半年以上一直有在写,完全不会去思考就会去写===的
    zhuangzhuang1988
        8
    zhuangzhuang1988  
       2019-03-16 00:02:23 +08:00   ❤️ 1
    谭浩强式题目
    AshoneA
        9
    AshoneA  
    OP
       2019-03-16 00:04:06 +08:00
    @zhuangzhuang1988 如果他都能写出来答案我是不会纠结这个的,关键是他没写出来只能看看他代码其他地方有没有可取之处了呀
    akatquas
        10
    akatquas  
       2019-03-16 00:41:02 +08:00 via iPhone
    @xlui 你有考虑降低闭包开销嘛?
    Sparetire
        11
    Sparetire  
       2019-03-16 04:04:55 +08:00 via Android
    @akatquas 偶尔会考虑。。尤其是事件绑定的时候,如果没有引用其他外部变量,能通过 this 拿到的值,就不会通过函数外部实例拿了,不过感觉多数人没这习惯
    Perry
        12
    Perry  
       2019-03-16 06:26:31 +08:00
    语法细节上班的时候完全可以用 linting 解决,同意楼上考原理的说法。
    不过确实这些细节容易会让面试官减分
    Cbdy
        13
    Cbdy  
       2019-03-16 06:43:11 +08:00 via Android
    用==的很不专业,建议谨慎录用
    JK9993
        14
    JK9993  
       2019-03-16 07:17:39 +08:00 via iPhone
    注意题主是说判断两个值是否相等的条件,这样子用两等当然不靠谱,但是其他情况我觉得能接受吧
    JK9993
        15
    JK9993  
       2019-03-16 07:19:48 +08:00 via iPhone
    嗯,好像说了废话……我意思是说如果是出题的判断两个值是否相等
    fakeshadow
        16
    fakeshadow  
       2019-03-16 07:59:18 +08:00
    我偶尔也会写错,因为不是只写 js,从其他语言突然转换过来不适应。
    stillsilly
        17
    stillsilly  
       2019-03-16 08:07:39 +08:00 via iPhone
    我们公司后台传长得像数字的值(数量、id、用 01 表示的布尔)时精神错乱,完全不看这个字段的含义应该用什么,很随机地一会儿用数字,一会儿用字符串…

    我勤快的时候用 String Number 强转一下===,不勤快的时候就直接==了…
    yinjunjian0
        18
    yinjunjian0  
       2019-03-16 09:04:27 +08:00
    有时后端传过来的是字符串 1 或者数字 1
    你不确定的话
    那用==好
    还是写两行===和转换下再===好呢
    zqx
        19
    zqx  
       2019-03-16 09:39:11 +08:00 via Android
    感觉==还是有使用场景的
    zhzbql
        20
    zhzbql  
       2019-03-16 09:42:50 +08:00
    大部分进行判断相等的情况下类型都是可预期的,用==有什么问题?在类型不可预期的情况下才用=== 。我就是这样,不要问为什么,问就是一个字,懒,可以少打一个=号
    murmur
        21
    murmur  
       2019-03-16 09:53:49 +08:00
    三等号一般我只用在 0 null undefined 这些值上 至于 string 算了吧 多打一个难受
    meteor957
        22
    meteor957  
       2019-03-16 10:10:41 +08:00
    工作不够饱和吗,一个三等号你纠结半天,还跑来专门发帖?面试完了就完了,谁也不认识谁。

    “==几乎是不会用到的一个判断符号”,你确定?
    lodash 源码中有不少==,null == undefined,在判错的时候能省去多余的判断
    Malthael
        23
    Malthael  
       2019-03-16 10:26:01 +08:00   ❤️ 1
    你这算啥,我一个同事还写 if(xxx() == true) 呢。
    qshu
        24
    qshu  
       2019-03-16 10:30:53 +08:00
    @Malthael 哈哈哈,去掉== true 也可以呀
    qshu
        25
    qshu  
       2019-03-16 10:31:15 +08:00
    我发现我的确是 越来越习惯用 === 了
    learnshare
        26
    learnshare  
       2019-03-16 10:43:57 +08:00
    === 的要求还是要坚持的,写过一段时间代码的话,应该会有被坑的时候
    宁愿手动转类型,也别占自动转换的便宜
    dying4death
        27
    dying4death  
       2019-03-16 11:55:11 +08:00
    @Malthael 不太懂前端那一套是怎么样
    这样的写法在 java,kt 中我就经常用,lol
    因为其实 xxx()可能会返回空的情况,所以判断是否等于 true 还是有必要的,除非你说完全百分百返回布尔值
    itkdqwzero
        28
    itkdqwzero  
       2019-03-16 12:14:53 +08:00 via iPad
    在小公司 多语言切换是常见的,我转行做 C++有两年了,都忘了这一茬。不用===也是什么都能实现,你这样面试对自学转行的新手太不友好,你觉得这很重要?很多实习生 for 循环都不会
    QiaTia
        29
    QiaTia  
       2019-03-16 13:06:47 +08:00
    完了完了 平时根本不咋用 === ,
    鬼晓得后端会不会传一个字符型的数字来!
    xiangyuecn
        30
    xiangyuecn  
       2019-03-16 13:18:34 +08:00
    表示只会用到===true ===false,其他大部分用==,非要有不确定类型的地方(+num||0) (""+str) 转换成明确的类型在比较。除了字符串就是数值了吧。另外表示 js 的判断逻辑很强大,很简洁。

    最后反正怎么写,==也好===也好,该出问题的地方还是会出问题。
    peneazy
        31
    peneazy  
       2019-03-16 13:21:32 +08:00 via iPhone
    js 权威指南里面大量使用==,以跳过 null 和 undefined 的判断。后端不靠谱的时候,也需要使用==
    godgc
        32
    godgc  
       2019-03-16 14:40:46 +08:00
    三等和两等 基本都要看使用场景,虽说是推荐===,但是有些场景 比如后端返回的 data number 和前端进行校验时 前端会转为 string,所以说还是要看场景吧
    Ley
        33
    Ley  
       2019-03-16 16:02:39 +08:00 via Android
    惊了,这贴的风向和预想的大相径庭…
    支持楼主的观点,不考虑是不是培训班,会觉得这类细节无所谓的很可能水平有限… 当然如果是特殊情况特别考虑才这么写的另当别论。
    xiaxiaokang
        34
    xiaxiaokang  
       2019-03-16 16:14:10 +08:00
    你题目没有标注是否类型相等,出题应该是:判断两个变量值相等且类型相等。
    所有你出题有问题。判断两个值是否相等==是可以的。
    作为 js==和===无非是(值相等)和(值和类型相等)
    ayase252
        35
    ayase252  
       2019-03-16 16:18:02 +08:00 via iPhone
    尽量用===

    必须用==的情况的话个人感觉应该留个注释,阐明使用的理由。
    GX88624
        36
    GX88624  
       2019-03-16 16:47:12 +08:00
    数据类型可预知我都是== 能省点省点, 不可预知和易出问题才===
    yuanfnadi
        37
    yuanfnadi  
       2019-03-16 16:52:18 +08:00
    eslint 规则配置 禁止 '=='
    darknoll
        38
    darknoll  
       2019-03-16 18:28:40 +08:00
    这就跟写一个算法,不判断传入的值是否为空一个性质。
    稍微好点的公司当然是直接 pass 了。
    GM
        39
    GM  
       2019-03-16 20:00:57 +08:00
    不注意细节的人,招进来后很可能给你写一大堆功能看起来能用,但是实际上质量很低的代码,你愿意要这种人?
    meszyouh
        40
    meszyouh  
       2019-03-16 20:35:37 +08:00 via Android
    接数据的时候,刚入门的时候用 === .出了几个莫名其妙的 bug 后,长心了,与后台传过来的数据判断 用 ==,心情好转换一下
    hirasawayui
        41
    hirasawayui  
       2019-03-16 20:42:28 +08:00
    @yinjunjian0 1 和 '1' ,一般用 + 强制转换成数字
    doommm
        42
    doommm  
       2019-03-16 21:27:46 +08:00
    == 我只用来判断 null 和 undefined,number 和 string 的判断还是显示转换一下比较好
    qiannianfozhan
        43
    qiannianfozhan  
       2019-03-17 02:49:18 +08:00 via Android
    我笔试也写的==,中枪
    qfdk
        44
    qfdk  
       2019-03-17 03:22:45 +08:00 via iPhone
    @Malthael 老哥 你还好 维护 2008 年的项目 全是这样 哭笑不得
    fsdgfd
        45
    fsdgfd  
       2019-03-17 03:32:33 +08:00
    1. 好奇你们对 Object.is 怎么看
    2. 好奇你们对下图中的观点怎么看

    DavidNineRoc
        46
    DavidNineRoc  
       2019-03-17 12:02:25 +08:00
    判断值相等不用 == 用 === ?
    == 就是用来判断值相等的不是?
    === 是用来判断恒等的.
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2774 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 28ms · UTC 08:40 · PVG 16:40 · LAX 01:40 · JFK 04:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.