惯性聚合 高效追踪和阅读你感兴趣的博客、新闻、科技资讯
阅读原文 在惯性聚合中打开

推荐订阅源

Apple Machine Learning Research
Apple Machine Learning Research
Recent Announcements
Recent Announcements
IT之家
IT之家
人人都是产品经理
人人都是产品经理
G
Google Developers Blog
Microsoft Azure Blog
Microsoft Azure Blog
博客园_首页
大猫的无限游戏
大猫的无限游戏
U
Unit 42
罗磊的独立博客
博客园 - Franky
WordPress大学
WordPress大学
CTFtime.org: upcoming CTF events
CTFtime.org: upcoming CTF events
M
MIT News - Artificial intelligence
SecWiki News
SecWiki News
V
Vulnerabilities – Threatpost
P
Privacy International News Feed
P
Palo Alto Networks Blog
F
Fortinet All Blogs
P
Proofpoint News Feed
博客园 - 叶小钗
C
CERT Recently Published Vulnerability Notes
T
Tor Project blog
Spread Privacy
Spread Privacy
S
Securelist
C
Cisco Blogs
I
Intezer
D
Darknet – Hacking Tools, Hacker News & Cyber Security
Cyberwarzone
Cyberwarzone
钛媒体:引领未来商业与生活新知
钛媒体:引领未来商业与生活新知
P
Privacy & Cybersecurity Law Blog
宝玉的分享
宝玉的分享
OSCHINA 社区最新新闻
OSCHINA 社区最新新闻
Engineering at Meta
Engineering at Meta
S
Schneier on Security
C
CXSECURITY Database RSS Feed - CXSecurity.com
GbyAI
GbyAI
T
Troy Hunt's Blog
T
Threatpost
博客园 - 司徒正美
Y
Y Combinator Blog
Hugging Face - Blog
Hugging Face - Blog
AWS News Blog
AWS News Blog
T
The Blog of Author Tim Ferriss
G
GRAHAM CLULEY
N
Netflix TechBlog - Medium
酷 壳 – CoolShell
酷 壳 – CoolShell
Google DeepMind News
Google DeepMind News
Know Your Adversary
Know Your Adversary
S
SegmentFault 最新的问题

JavaScript

发现国内很多文章对宏任务和微任务的解释都是有问题的 - V2EX 智能香氛机小程序外包合作招募 - V2EX 分享一道 Node.js 的面试题,考察 JS 相关的最基本的掌握程度,代码完全来自官方文档 有人大量建立技术文档的.cn 中文站点,并将站内 js 链接指向 cdn.jsdelivr.net.cn - V2EX 发现了两个关于 JavaScript 语言好玩的网站,让人血压升高 js 判空值 最佳实践 - V2EX 简单的图像算法为什么 AI 搞不定呢 Capacitor.JS 如何自动化最后一步流程 JSON.parse 转数字精度丢失问题 有没有前端大佬,帮我看一下这个网站底部的粒子动画怎么做的。 - V2EX 这段前端代码存在并发读取竞态的问题吗? nstr - number → string, but looks good 前端 js 播放 base64 编码的 mp3,放出来杂音很大,请教是哪里出错了? 熟悉工业计算的来,是阀门相关的企业 js 不使用 promise 完成一个 sleep 函数,必须支持 await 调用 - V2EX 小米手机澎湃系统 AutoJS 的悬浮窗在证券软件打开时就消失 - V2EX 关于 js 复制粘贴问题 求助,无法在 wixsite.com 上使用 document.write threejs 官方文档看着好难受。 - V2EX 有没有 AI 能一步一步教会伸手党如何使用业务系统? 也聊下自己最近用 copilot 写程序的心得,还要讨教下方案 javascript 继续 套壳 AI 应用类 manus 如何在移动端 h5 页面实现<Select/>搜索下拉选择框! - V2EX 求前端高频数据绘图库 - V2EX 吐槽一下 Trae 记忆中好像在论坛看到有款专门在 iframe 中做前端的 js 库/框架? - V2EX JavaScript 中的 Promise 跟异步有关系吗?还是我的理解有问题?谁能把 Promise 解释清楚? Promise 的正确用法应该是什么样的? - V2EX 求问,小程序的菜单栏怎么和右边的功能键垂直居中? - V2EX 自习室小程序的座位图是如何实现的(前端) - V2EX 谷歌浏览器的 bug - V2EX 为什么中小公司的前端面试官爱问 array 和 object 有多少种方法 - V2EX 有什么办法能实现 uniapp 上的离线人脸识别 本人遇到了非常奇怪的关于“注释”ctrl+/ 快捷键问题,需要大佬们指点一二。 ChatGPT 语音对话技术 求前端大佬解惑, HTML 里的文本怎么做逐行滚动? 快应用问题求助 2024 JS 生态调查结果出炉: React 遥遥领先, Vue 程序员最穷 不顾“万人联名请愿”,甲骨文拒绝放弃 JavaScript 商标所有权 2025 年,我又把前端"老古董"--AMD 给翻了出来 有使用 javascript 编写 windows cmd 批处理程序的方法吗,类似 coffescript 这样转译的东西 js 小白,请教一下为什么网页上的播放器, Chrome 控制台不能用 querySelector 直接获取到呢 自荐一个 js 通信的包 Python 代码转换为 Javascript 运算结果不一致 css 的 justify-content 等效语法? 请教一下使用油猴脚本修改 html 内容后, 样式不生效的问题 async 函数中止/task local 方案后记,V8 上的另一个可行思路 如何在前端统计用户观看视频所消耗的流量?求教啊,大神们! pdfjs 中,通过 findController 可以搜索到对应的文本信息,并且高亮出来。那么, pdfjs 有没有什么 api 可以获取搜索到的信息的位置节点 ?请教 有没有独立的同时可以 pc 移动端用的三级联动城市选择组件啊 - V2EX 字幕滚动有没有更好的方式实现
你们 js 用过双等号吗 - V2EX
ethusdt · 2025-12-31 · via JavaScript

这是一个创建于 166 天前的主题,其中的信息可能已经有所发展或是发生改变。

写了很多年 js ,都是用三等号。即使类型不匹配也要强制使用 Number String 等方式转换一下再判断。

现在发现双等号直接可以帮你转类型后再比较。

甚至可以这么用: if (a == 0) { ... }, 这里当 a 是 0 / "" / false 时候都成立。

看到很多项目都把双等号给禁了( eslint eqeqeq ),没仔细研究,但有些情况下还是不错的。

  • JS
  • 双等号
  • 类型转换

    87 条回复    2026-01-05 14:30:47 +08:00

    aisles1

    1

    aisles1      2025 年 12 月 31 日   ❤️ 1

    无脑===

    june4

    2

    june4      2025 年 12 月 31 日

    val == null 应该是 js 基本常识技能吧?那判断为 null 你是怎么做的? val === null || val === undefined?

    gorvey

    3

    gorvey      2025 年 12 月 31 日   ❤️ 13

    隐式转换罢了

    qiaobeier

    4

    qiaobeier      2025 年 12 月 31 日

    十多年前我用这个当面试题来着😂

    evan1

    5

    evan1      2025 年 12 月 31 日

    @june4 #2 直接 if (value)判断是否有值

    ethusdt

    6

    ethusdt      2025 年 12 月 31 日

    @june4 啊?判断 null 还要 val == null 么?直接 if (val) 不行么?

    ixixi

    8

    ixixi      2025 年 12 月 31 日

    不知道啊 ,我用 ts

    wu00

    9

    wu00      2025 年 12 月 31 日

    十几年前好像都是==

    maplezzz

    10

    maplezzz      2025 年 12 月 31 日

    隐式转换设计的太复杂了,不同的类型,各种各样可能的 case ,用的时候很容易出现意料之外的问题

    jydeng

    11

    jydeng      2025 年 12 月 31 日

    太麻烦了,容易出问题

    june4

    12

    june4      2025 年 12 月 31 日

    @ethusdt if (val)当然不行,这个把 空串,0 之类的都算 false 了,很多时候就是判断是空值(null),不是没有值

    MinorN

    13

    MinorN      2025 年 12 月 31 日

    坚决 === ,我同事曾经用 == 找了 1h 的 bug ,然后叫我帮忙看看哪里出了问题

    cpstar

    14

    cpstar      2025 年 12 月 31 日

    if(!!val)

    masterclock

    15

    masterclock      2025 年 12 月 31 日   ❤️ 3

    完全不适用 ==,只用 ===
    不直接使用 if(a),全部包装成基于业务语义的 isNull isEmpty isValid isGood...

    g17

    16

    g17      2025 年 12 月 31 日   ❤️ 1

    无脑 === ,手动转类型

    aloxaf

    17

    aloxaf      2025 年 12 月 31 日

    > 甚至可以这么用: if (a == 0) { ... }, 这里当 a 是 0 / "" / false 时候都成立。

    我觉得代码中就不应该出现 a 有可能是 0 / "" / false 的情况……

    temporary

    18

    temporary      2025 年 12 月 31 日

    如果需要展示的情况,0 需要展示,而 "" NaN null undefined 大概率要展示成 -

    ethusdt

    19

    ethusdt      2025 年 12 月 31 日

    @june4 #12 哦,我明白了,就是判断某个值是 null ,而非 0/空字符串/false 之类的具体值。但是业务场景下,这些都是一样效果,用户没有填一个值那就给默认 false/0/空字符串,除非有特殊需求默认成其他值。

    我想到的就这点了。能再举几个例子场景么。

    crocoBaby

    21

    crocoBaby      2025 年 12 月 31 日

    卧槽,我一直偷懒用的==,确实遇到 0 和 false 和 null 的问题

    craftsmanship

    22

    craftsmanship      2025 年 12 月 31 日 via Android   ❤️ 3

    总有人说 JS 简单 结果在双等和三等上面都分不清楚适用场景,,,也分不清 falsy value 和 nullish value
    真特么菜。

    craftsmanship

    23

    craftsmanship      2025 年 12 月 31 日 via Android

    JS 是个由于初期设计太过垃圾而导致引入过多不必要的复杂性的语言 有大量细节需要记忆 由于不规范导致的灵活性让人可以玩花活 写出来的代码难读难维护 反直觉的设计让不熟悉这门语言的人踩很多坑 很多使用者根本意识不到自己在干什么 看看上面的回复就知道了
    从改善这些缺点来讲 TS 是大救星

    shintendo

    24

    shintendo      2025 年 12 月 31 日

    ESLint 关于===的规则("eqeqeq")里,有个选项开关就是允许==null 。

    此外早年流行的几个 JS 代码规范,StandardJS, Airbnb, Google Style Guide, 全都是“禁止使用==,但==null 例外”,算是通行做法。

    craftsmanship

    26

    craftsmanship      2025 年 12 月 31 日 via Android

    @shintendo 我原来就是遵守这个规范 但现在感觉#15 的做法更好 完全避免 JS 的那些隐式语义 包成 util 不费劲而且一目了然 让所有人都能读懂意图

    craftsmanship

    30

    craftsmanship      2025 年 12 月 31 日 via Android

    @tonytonychopper 怎么说呢 为了八股而八股的话 完全没必要 属于做题大国的坏习惯 但八股里考察的点 其实是有意义的 只是以八股的形式出现很恶心
    比如隐式转换就能看出使用者对 JS 的熟悉程度 也是非常常见的坑点 想全记住规则并不现实 因为确实太复杂 但这个都不了解的话 那完全不合格
    然而所有这些在 AI 时代已经不重要了…

    craftsmanship

    31

    craftsmanship      2025 年 12 月 31 日 via Android

    @meteor957 有 #24 已经提过了 再具体点说就是 唯一使用双等的场景 就是用来判断 nullish value
    面试时值得问的点太多了 隐式转换确实不合适 因为这应该是 JS 基本功 默认是了解的

    GuguDan

    32

    GuguDan      2025 年 12 月 31 日

    用的,因为有时候接口就是会返回 ‘0’

    craftsmanship

    33

    craftsmanship      2025 年 12 月 31 日 via Android

    @GuguDan 坏习惯 这种应该 Number(val) === 0 而非偷懒使用双等的隐式转换
    想玩花活?没问题 +val === 0
    少打几个字母 让代码变得晦涩难读 有意义吗?完全没意义 但很多人这样写 显得自己很 6
    这就是 JS

    hafuhafu

    34

    hafuhafu      2025 年 12 月 31 日

    以前前端工程化没流行开的时候,只用`==`的人大把,甚至反而很多人都不知道`===`。特别是一些后端顺便写前端的人。
    多亏了前端工程化和各种创建项目的脚手架以及开源项目里面用了 ESLint ,倒逼大家去学习一些规范。
    说个我感觉很搞笑的事,以前看到有不少人搜 ESlint 报红怎么解决,最后的方案是卸载掉...

    gdw1986

    35

    gdw1986      2025 年 12 月 31 日 via Android

    这种现在交给 AI 应该没什么难度吧

    Shaar

    36

    Shaar      2025 年 12 月 31 日

    我刚入行做 cocos-js 开发的时候,根本不知道===这个东西,一直用== 直到出现了一个隐形 bug ,查了非常久才知道有==和===的问题,十年了,我都无法忘怀这个东西

    lueluev

    38

    lueluev      2025 年 12 月 31 日

    我去,开倒车

    wangtian2020

    39

    wangtian2020      2025 年 12 月 31 日

    我只用 == 很少用严格===。
    项目我一个前端没人管我。 == 能没问题的地方 === 一定没问题。=== 会出现问题的地方 == 可能反而没问题。
    通常情况下只有会 string number 之类的在进行比较,其他一切比较情况都是写法有问题

    woodcutter

    41

    woodcutter      2025 年 12 月 31 日

    小程序页面穿参会把 number 转成 string ,一般我想省事就用==,懒得再转了。

    akakidz

    42

    akakidz      2025 年 12 月 31 日

    双等号就是邪修,TC39 委员会的人,也不能把双等号在项目里用明白 太复杂了!下一个维护项目的人,难道要在脑子里跑一遍所有场景下状态机 预判前人写的双等号可能要处理的业务逻辑?

    silverwzw

    43

    silverwzw      2025 年 12 月 31 日

    用 a === b || (a !== a && b !== b)

    realpg

    44

    realpg      2025 年 12 月 31 日

    我是邪修 我很常用 == 必要时候才 ===

    大概是弱类型语言用的太多了 对==和===一般不会写出 bug

    zbinlin

    45

    zbinlin      2025 年 12 月 31 日

    只有一种情况会用:判断是 等于或不等于 null 和 undefined 时。

    ASHYWHISPER

    47

    ASHYWHISPER      2025 年 12 月 31 日

    我在想,反正基本上都是无脑===为什么 ES 规范,不直接将==表示===的作用呢,当然我是刚学前端的 JS 初学者

    kdwnil

    49

    kdwnil      2025 年 12 月 31 日 via Android   ❤️ 1

    多数时候都不应该用==,但特殊情境下,手搓超短代码的时候可以靠这种隐式转换省一点空间,就用了

    meteor957

    52

    meteor957      2025 年 12 月 31 日

    @craftsmanship 既然如此,=== 依然可以 cover 所有场景且没有太多成本。我刚刚说面试都不应该问的原因是不管是实际开发还是面试都应该默认遵守使用===的规则,当你使用==时本身就引入了不必要的心智负担。

    qwerty12345

    54

    qwerty12345      2025 年 12 月 31 日

    老项目里全是[==],还好没有出过什么大问题,现在重构了,基本都是[===]

    v21984

    55

    v21984      2025 年 12 月 31 日

    除 == null 或者 == undefined 这两种情况外,全使用 ===

    CarryOnHxy

    56

    CarryOnHxy      2025 年 12 月 31 日

    eslint eqeqeq 规则有个 smart 模式

    TimPeake

    57

    TimPeake      2025 年 12 月 31 日

    不用 怕别人看出我是前端仔

    TimPeake

    59

    TimPeake      2025 年 12 月 31 日

    @TimPeake 噢不对,是用。不用 === 。
    ---------
    之前很久了 某个群里 吹牛闲聊,发了 类似 xxxx === xxxx 这样的伪代码,结果群里立马有人回复,“你小子前端仔 ?”

    IamUNICODE

    61

    IamUNICODE      2025 年 12 月 31 日

    我是直接设置 eslint 警告的,不接受==

    freezebreze

    62

    freezebreze      2025 年 12 月 31 日

    现在回想起来以前学 js 。在没有 ai 的年代,简直是在历屎中遨游

    94

    64

    94      2025 年 12 月 31 日

    早期很长一段时间用的 == 因为学编程的时候就是 = 和 ==。
    后面业务写的多起来之后才慢慢改成 ===。一些地方该用 _.isNill 之类的就用,而不是自己去写空值判断逻辑。

    隐式转换有些时候是好用,但是有一些时候会埋坑。

    LandCruiser

    65

    LandCruiser      2025 年 12 月 31 日

    处理==null 这种问题的唯一正确方式是,if ( valid ){}else{} 而不是 if ( unvalid ){}

    SanjinGG

    67

    SanjinGG      2025 年 12 月 31 日

    @june4 #12 但 js 中的 null 更多应该指的是未赋值的对象,或者空对象,一般也就 val 是 object 时才会出现 null ,他为什么存在空串,0 的情况? if(val)完全够用。js 只是没有强约束,但应该也没憨憨就一个变量,一直赋值不同类型值一路使用吧?

    june4

    70

    june4      2025 年 12 月 31 日

    @SanjinGG 啊,你哪怕是用 ts,就没有见过这种类型 `number | null | undefined` ? 或 `string | null | undefiend`

    Aliceeeeee

    71

    Aliceeeeee      2025 年 12 月 31 日 via iPhone

    禁用==。同时也绝不使用 null, 一律 undefined

    AoEiuV020JP

    74

    AoEiuV020JP      2025 年 12 月 31 日

    确实有时候感觉双等号是不是方便点, 尤其奇葩项目中 userId 是 string|number 混用的,
    但 AI 写的代码总是用三等号, 搞得我都不好意思要求双等号了,
    不过我是纯 ts ,

    nicenight

    75

    nicenight      2025 年 12 月 31 日

    只要你不用单等号,我都能接受。你要是像我同事一样用单等号做判断,那我就要放狗了

    craftsmanship

    78

    craftsmanship      1 月 1 日 via Android

    @Aliceeeeee 同时 null 和 undefined 的语义是不一样的 这种 billion dollar mistake 你要不要了解下再写 JS ?

    SanjinGG

    79

    SanjinGG      1 月 1 日 via Android

    @june4 没见过,初始化大部分也是赋值空字符串,根本不会给 null ,undefined 也只有在开发阶段会出现,到最终上线根本不会让他是 undefined

    liuxue

    80

    liuxue      1 月 1 日

    自己写的代码不用,别人的代码逻辑简单的,能找到类型的就换掉。

    goodboy95

    81

    goodboy95      1 月 3 日 via Android

    没这个胆子用双等号。
    顺便,对于你说的这种“判断是否不存在有效值”,我们一般直接!a

    kenvix

    82

    kenvix      1 月 3 日

    有一种情况可以安全使用==,就是判断是否为 null 或 undefined ,这种情况我都是这样做的,没有任何问题。
    对于==,null 只 与 undefined 相等,null 不会与任何其他值相等

    kenvix

    83

    kenvix      1 月 3 日

    @evan1 #5 你这个是重大错误,if (value)会导致 0 和空串被判为 false ,比==还危险

    NerbraskaGuy

    84

    NerbraskaGuy      1 月 4 日

    无脑用===的遇到后端接口明明规定是 1 实际给'1',而且不同接口 string 和 number 看心情来,这种的就老实了

    humbass

    85

    humbass      1 月 5 日

    都没讲到重点,实际上浏览器的环境有关。

    前端表单的内容都是 字符串,当后端数据一起计算拼接的时候, === 就不是很方便,因此 == 就派上用场了。
    比如 input 的年龄,if (age == 18) ,这里的 age 实际上是 String, 引擎自己转了,非要用 === 比较,你得 parseInt(age) === 18 ,代码太丑了。

    BetterJason

    87

    BetterJason      1 月 5 日

    @GuguDan #32 这种就是后端太垃圾导致的后果,要吗都用 0 要吗都用“0”, 一会儿这样 一会儿那样, 这种人就是把代码当儿戏,我现在接手的项目里面就是这样,导致出了很多问题,特别恶心人!