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() 显式转换 + === 严格相等
相关推荐
万少1 天前
产品原型不用从零画 -GPT 出图,Gemini 生成 HTML
前端·javascript·后端
ZC跨境爬虫1 天前
跟着 MDN 学JavaScript day_9:字符串方法实战挑战与解题思路
开发语言·前端·javascript
hewins1 天前
NestJS 从入门到精通
javascript
柒和远方1 天前
LeetCode 452. 用最少数量的箭引爆气球 —— 区间贪心经典:排序 + 扫描一箭穿心
javascript·python·算法
小小龙学IT1 天前
Drizzle ORM:TypeScript 生态中冉冉升起的数据库工具链引言
javascript·数据库·typescript
旺王雪饼 www1 天前
localStorage 和 sessionStorage区别与联系
服务器·前端·javascript
এ慕ོ冬℘゜1 天前
【双月日期范围选择器】博客(可直接交作业 / 上线)
前端·javascript·交互·jquery
VidDown1 天前
VidDown 使用介绍:一个免费、本地化的在线工具集
javascript·编辑器·音视频·视频编解码·视频
小牛itbull1 天前
告别传统主题开发!ReactPress Theme Starter —— 用 Next.js 15 构建现代化无头博客
javascript·cms·react·wordpress·nextjs·reactpress·blog-theme
深蓝电商API1 天前
逆向工程入门:从Chrome DevTools到JS混淆还原
前端·javascript·chrome·爬虫·chrome devtools