JavaScript 类型转换与运算规则

前言

JavaScript 是弱类型语言 ,变量没有固定类型,运算时会自动隐式转换类型,这是 JS 最容易踩坑的点。

目录

[一、JS 数据类型](#一、JS 数据类型)

二、类型转换

[1. 原始转数字](#1. 原始转数字)

[2. 所有转布尔](#2. 所有转布尔)

[3. 原始转字符串](#3. 原始转字符串)

[4. 对象转原始](#4. 对象转原始)

三、运算规则

[1. 算术运算](#1. 算术运算)

[2. 比较运算](#2. 比较运算)

[3. 逻辑运算](#3. 逻辑运算)

总结


一、JS 数据类型

分为 原始类型引用类型

  1. 原始类型 (7 种):NumberStringBooleanUndefinedNullSymbolBigInt
  2. 引用类型Object(包含数组、函数、对象等)

二、类型转换

1. 原始转数字

javascript 复制代码
// +
Number(true)     // 1
Number(false)    // 0
Number(null)     // 0
Number(undefined)// NaN
Number('123')    // 123
Number('')       // 0
Number('abc')    // NaN

2. 所有转布尔

javascript 复制代码
// !!
Boolean(null)     // false
Boolean(undefined)// false
Boolean(0)        // false
Boolean(NaN)      // false
Boolean('')       // false
// 以上 5 种是「假值」,其余全部为 true

3. 原始转字符串

javascript 复制代码
// ""
String(123)      // "123"
String(true)     // "true"
String(null)     // "null"

4. 对象转原始

  1. 先调用 valueOf(),如果返回原始值就用它
  2. 否则调用 toString(),如果返回原始值就用它
  3. 否则报错

三、运算规则

1. 算术运算 + - * / % ++ --

  • 转换为数字,然后运算
  • 特殊情况:x+y,x和y有一个是字符串,全部转换为字符串拼接
  • 特殊情况:NaN和任何类型运算得到的还是NaN

2. 比较运算 > < >= <= == != === !==

  • > < >= <=
    • 转换为数字,然后比较
    • 特殊情况:两端全是字符串,按Unicode 编码逐位比较
    • 特殊情况:两端存在NaN,一定为false
  • ===
    • 类型和值必须都相同
    • 特殊情况:两端存在NaN,一定为false
  • ==
    • 两端类型相同,比较值
    • 两端都是原始类型,转换成数字比较
    • 一端是原始类型,一端是对象类型把对象转换成原始类型后比较
    • 特殊情况:undefined和null只有与自身比较或者互相比较时,才会返回true
    • 特殊情况:两端存在NaN,一定为false
  • != !==
    • 对相等取反

3. 逻辑运算 ! && || ?:

  • x&&y
    • x为false,返回x
    • x为true,返回y
  • x||y
    • x为false,返回y
    • x为true,返回x

总结

  1. + 遇字符串必拼接,其他运算符优先转数字
  2. == 会隐式转换,=== 绝对相等
  3. 只有 6 个假值 ,其余全是 true
  4. 引用类型运算:先 valueOftoString
  5. 开发尽量用:Number()/String() 显式转换 + === 严格相等
相关推荐
kyriewen25 分钟前
别再对着 TypeScript 报错发呆了:我把 10 个最常见的红色波浪线翻译成了人话
前端·javascript·typescript
free351 小时前
从 0 实现一个 Tiny JavaScript VM:项目架构拆解
javascript
徐小夕3 小时前
我们开源了一款“框架无关”的思维导图编辑器,3分钟集成到任意系统
前端·javascript·github
PBitW3 小时前
GPT训练我的第三天,明白了应该咋说满分回答!😕😕😕
前端·javascript·面试
像我这样帅的人丶你还3 小时前
Java 后端详解(四):分页与搜索
java·javascript·后端
labixiong4 小时前
还原一个完整符合规范的 Promise(二)
前端·javascript
To_OC4 小时前
万字解析《JS 语言精粹》之第五章:继承 5 大核心精髓(JS 原型核心)
前端·javascript·代码规范
裕波6 小时前
AI 正在重写应用开发。Vue 与 Vite,给出新的答案。
javascript·vue.js
kyriewen7 小时前
折腾了半年 AI 编程工作流,最后发现效率瓶颈是桌上那块屏幕
前端·javascript·ai编程
张元清9 小时前
React useDebounce Hook:给状态和回调做防抖(2026)
javascript·react.js