V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
• 请不要在回答技术问题时复制粘贴 AI 生成的内容
unt
V2EX  ›  程序员

最近在准备面试, 越发感觉 js 的心智负担好重啊

  •  
  •   unt · 2023-03-02 00:59:50 +08:00 · 2576 次点击
    这是一个创建于 669 天前的主题,其中的信息可能已经有所发展或是发生改变。

    前提简介:平时的工作内容重业务。自己喜欢记笔记,喜欢总结,涉猎范围比较广(主前端全栈),obsidian 有 500 篇自己码的笔记,记不得的知识点就秒搜一下。 随便举几个例子:

    1. 类型检测,有 typeof instanceof constructor Object.prototype.toString.call Array.isArray ,每种方式都有优缺点,硬要杠的话就是存在就有对应使用场景但是无形中要记的东西就变得好多,平时工作中还好,只要实现业务不出 bug 就好,没人会考你具体细节,而且很多记不清的功能都会去翻笔记或者去控制台现场测一遍,但是面试就不一样了,生怕面试官问的细,疯狂反问,到时候连这种基础都不知道的话又体现得自己基础不扎实,殊不知我可能 5 年前就自己手撸过一个全类型检测方法了。但是有很多东西研究完过一段时间就会忘,真记不住;
    2. 再说循环,for for in for of forEach map 那些个 some find filter reduce 什么的我就不讲了(虽然以上这些我都经常用)。我是真想 for 一把梭啊,for in for of 又是可枚举又是迭代器,啰嗦又怎么了,我却很喜欢,"less is more"正是我喜欢的东西,最好只给用户提供一种选择;
    3. 再说恶心的隐式转换,个别几个一直记不清,平时根本用不到;
    4. 还有一些奇技淫巧:写惯了 ES5 原生, 当年第一次遇到[...new Set(arr)]等等很多没见过的小技巧时我是震惊的,会怀疑自己,会害怕以后不这样写就是代码冗余,不优雅。
    5. pop() shift() unshift() push() slice() splice() (还要考虑是否有返回值,是否改变原数组)
    6. css 水平相比较 5 年前,就和我的英语一样,更是只减不增

    为了面试要去强记一些东西,研究得深的话(知识点太多了)记又记不住,记住这个忘记那个,是我记忆力衰退了吗,还是大家都这样。 我一直认为代码只是工具,代码是为了实现业务,业务是为了创造经济价值,技术永远在变革,几年前的写法如今很多都已淘汰,以后的 api 肯定是越来越人性化,越来越友好。我认为知识的广度更加重要,现在这样,心智压力真的好大。

    23 条回复    2023-03-02 16:30:07 +08:00
    VonBrank
        1
    VonBrank  
       2023-03-02 01:10:28 +08:00 via Android
    不用 ts 火葬场#doge
    Leviathann
        2
    Leviathann  
       2023-03-02 01:15:06 +08:00   ❤️ 3
    less is more
    我怎么觉得 some find filter 这些写出来比 for 的代码更 less 且表达得更 more 呢?
    enchilada2020
        3
    enchilada2020  
       2023-03-02 01:20:00 +08:00 via Android
    这就是 JS 诸多被人诟病的问题之一 一个东西 N 种写法 还哪个都不完美 使用者水平不行的话写出来的就是一坨…然后为了缓解它的各种毛病又衍生出一堆工具来 ESLint TS 之类的 如果没有 TS 又没有适当的注释 读 JS 代码那才叫痛苦
    liuw666
        4
    liuw666  
       2023-03-02 08:13:19 +08:00 via iPhone
    只写 TS
    chendy
        5
    chendy  
       2023-03-02 08:19:18 +08:00
    迫于 js 写不明白换了 ts
    不玩花活写业务代码的话大脑可以关机…
    mascteen
        6
    mascteen  
       2023-03-02 08:29:56 +08:00 via Android
    versun
        7
    versun  
       2023-03-02 08:30:07 +08:00
    同感,纯 js 真的感觉负担重,正在慢慢转 ts ,还有目前也在学 rails....
    ragnaroks
        8
    ragnaroks  
       2023-03-02 08:40:17 +08:00
    第二学会的语言是 csharp 的我第一时间从 js 转了 ts ,虽然那个时候的 ts 比 js 难用。准确的说我很难接受没有类型的语言,除了 js 还有 PHP 、LUA
    musi
        9
    musi  
       2023-03-02 08:45:42 +08:00
    上面说 ts 的,不觉得 ts 的花活更多吗
    网上 ts 的类型体操教程一堆,看源码类型定义都要先看个半天
    wu67
        10
    wu67  
       2023-03-02 08:48:01 +08:00
    typeof isarray 确实有点烦, js 本身类型就是个大坑. 不然也不会催生出 ts

    至于循环, 真的很考验经验. for of 遍历属性, for in 遍历 key, filter 过滤, map 是模按式生成新数组, reduce 是‘累计’, some 和 every 是其实就是 与或运算. 当然你都不喜欢, 你可以用 for( let x=0; x < 100;) 这些写法, 又没人强迫必须要用数组方法.

    除非没得选, 不然隐式转换是真的不应该去用, 用的都应该拖出去打.

    pop push splice 一般是变异方法, 会改变原值. 而 slice \ for of 这些是不改变原值的. 在 for of 里面改变引用类型数据的值的, 都应该拖出去打, 直接增加了心智负担.

    css, 一言难尽, 建议 flex 一把梭 + border-box 指哪打哪.
    makelove
        11
    makelove  
       2023-03-02 09:04:43 +08:00
    我怎么觉得 js 在语言里算极简,甚至比 python 这种都简单很多
    jones2000
        12
    jones2000  
       2023-03-02 09:04:47 +08:00
    js 挺好的,没有什么框架的限制, 想怎么写就怎么写。关键是一个记事本+浏览器就可以搞定开发和调试多方便。
    yaphets666
        13
    yaphets666  
       2023-03-02 09:11:22 +08:00
    向下转型 向上转型那些不是更恶心么
    unt
        14
    unt  
    OP
       2023-03-02 09:30:34 +08:00
    @wu67 就说循环,每种方法基本的功能和用法当然是知道的。 但是面试时可能会问:那 for in 能遍历数组吗,for of 能遍历对象吗,怎么让 for of 能够遍历对象呢,这时候就顺势谈到了 Set 和 Map 和迭代器,迭代器可能会谈到 Generator 。然后 for in 就会问到可枚举,描述符属性,原型链。。。
    unt
        15
    unt  
    OP
       2023-03-02 09:39:18 +08:00
    @Leviathann 我们对这句话的理解上有差别吧。 我的理解是:用极少的语言特性,打通这些特性间的链路,使用这些最基础的单元,自由组合,实现基本上所有的功能。而不是语言本身来帮忙封装一大堆方法,一种场景一个方法。
    DICK23
        16
    DICK23  
       2023-03-02 09:44:47 +08:00
    这些都是基础吧,而且 5 年经验的话也不至于问这些内容,除非面的岗位比较基础
    unt
        17
    unt  
    OP
       2023-03-02 09:46:24 +08:00
    @DICK23 就是因为基础才需要看的。
    yunyuyuan
        18
    yunyuyuan  
       2023-03-02 09:47:05 +08:00
    5 年经验面试被问这些,面试官就不专业。你列的都是基础中的基础,而且我觉得并没有到点子上。
    1. 检测 primitive 用 typeof ,检测是否包含原型链用 instanceof ,toString.call 算奇淫巧技,看看就行。Array.isArray 这也是基础。
    2. 如果你真的认为 for 一把梭比 some find filter reduce 好,你可能水平真的不咋样。
    3. 这个和 python 的缩进,go 的 if err != nil 一样,不做解释。
    4. 展开操作符也是基本知识,很容易理解啊,我一般用 lodash 去重。
    5. 如果这都记不住,那你写其他语言岂不是更痛苦? js 的“标准库”算很少了。

    我觉得 js 的负担在于框架太多太杂,没有一致的标准 /编码理念
    unt
        19
    unt  
    OP
       2023-03-02 09:54:30 +08:00
    @yunyuyuan 1. 我都知道; 2. 工作中这些我都经常用,for 不怎么用; 3. 。。。4. 我知道,我经常用; 5. 我知道
    yunyuyuan
        20
    yunyuyuan  
       2023-03-02 10:01:02 +08:00
    @unt 1. 哦; 2. 哦; 3. 哦; 4. 哦; 5. 哦

    我反驳的是你的帖子内容和「 js 的心智负担好重」没有关联,并不是这些知识谁知不知道,这些知识 1 年经验的都应该都知道
    byte10
        21
    byte10  
       2023-03-02 15:11:24 +08:00
    取最小集合去完成你的事情就可以了,管他啥 for in ,for of ,你记住一个就可以啦。。js 我是比较喜欢的,随便写 ,写的工具利器。
    unt
        22
    unt  
    OP
       2023-03-02 16:04:34 +08:00
    @byte10 面试害的。。。。
    byte10
        23
    byte10  
       2023-03-02 16:30:07 +08:00
    @unt (⊙o⊙)…这 面试都是一样的,java 这边更多😄,js 还好些吧。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1242 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 31ms · UTC 17:34 · PVG 01:34 · LAX 09:34 · JFK 12:34
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.