初学者必踩,老手也会翻车:JavaScript 加性操作符详解

16 阅读4分钟



大家好,我是 31 岁的小米。

写代码第 N 年,头发还在,但发际线已经开始对 JavaScript 有了自己的理解。今天这篇文章,我想聊一个几乎每天都在用、但又经常被低估的东西:

JavaScript 的加性操作符:+ 和 -。

别看它们简单。真正踩坑,往往就从这些“最基础”的地方开始。

故事从一家咖啡馆开始

想象这样一个场景。我在一家咖啡馆打工,名字叫 JavaScript。这家店有两个“老员工”:

  • 一个叫 加号 +
  • 一个叫 减号 -

看起来很普通,对吧?但只要你在这家店多待一会儿,就会发现:这俩人性格完全不一样。

加法操作符:看起来是加法,实际是“变脸大师”

1、在数学世界里,加号很单纯

在你心里,加号是什么?

没毛病。在 JavaScript 里,当 + 面对两个数字 时,它非常老实:

这时候的 +,就是你小学数学里的那个加号。

规则一:如果两个操作数都是 Number,加号执行数值加法。

2、一旦字符串进场,加号立刻“变脸”

问题从这里开始。有一天,一个叫 字符串 的顾客走进了咖啡馆。

你以为它会算出 3?不。它端出来的是:

为什么?因为在 JavaScript 里:只要加号一侧出现字符串,加号就会变成“拼接符”。

在 JavaScript,加号的潜台词是:“只要你是字符串,我就陪你一起当字符串。”

3、隐式类型转换:加号最擅长的魔术

加号真正让人头疼的,不是拼接本身,而是隐式类型转换。

比如下面这些:

你第一眼看是不是有点懵?我们拆开看。

(1)布尔值

所以:

(2)null

于是:

(3)undefined:问题制造机

于是:

一旦参与运算的是 NaN,结果永远是 NaN。

4、加号最经典的面试陷阱

来,我们做几道 JS 面试题。

面试题 1

结果是?

"532"

为什么?

  • "5" + 3 → "53"
  • "53" + 2 → "532"

面试题 2

结果是?

"55"

为什么?

  • 3 + 2 → 5
  • 5 + "5" → "55"

加号是从左到右执行的。

面试题 3(经典中的经典)

结果是?

""(空字符串)

原因是:

  • [] 转字符串是 ""
  • "" + "" = ""

减法操作符:一个“原则性极强”的人

和加号比起来,减号在 JavaScript 是个非常有原则的人。它只有一句话:

我不拼接,我只做数学。

1、减号永远是数值运算

不管你给它什么,减号都会说一句话:“先给我变成 Number。”

在减号眼里,没有字符串,只有数字。

2、减号遇到非数字:直接 NaN

因为:

3、减号与特殊值

是不是发现了一个规律?减号和加号在“数值转换规则”上是一样的,但减号没有字符串拼接的特权。

加号 vs 减号:性格对比表

真实业务中的“加减惨案”

场景 1:金额计算

你以为是 120,结果页面上展示的是 10020

老板看了沉默,产品看了流泪。

场景 2:表单数据统计

如果 v.value 是字符串?恭喜你,total 会在某一刻变成字符串,从此一去不复返。

生存建议(非常重要)

1. 数值计算前,主动转换

不要指望 JS 替你做“正确”的隐式转换。

2. 字符串拼接,请用模板字符串

可读性比 a + b 高太多。

3. 面试时,永远先分析类型

看到 +,第一反应不是算结果,而是问自己一句话: “这里有没有字符串?”

总结

在 JavaScript 里:

    • 是一个情绪化的艺术家
    • 是一个冷静的理工男

它们看起来简单,却藏着 JavaScript 最核心的设计哲学之一:动态类型 + 隐式转换

真正厉害的前端、全栈、Node 工程师,不是没踩过坑,而是见到 + 和 -,心里已经开始自动推演转换规则。

END

如果你能把这两个操作符吃透,后面的比较操作符、逻辑操作符、隐式转换体系,都会顺得多。

我是小米,一个喜欢分享技术的31岁程序员。如果你喜欢我的文章,欢迎关注我的微信公众号“软件求生”,获取更多技术干货!

好朋友们,我们下篇见。