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() 显式转换 + === 严格相等
相关推荐
paopaokaka_luck37 分钟前
智慧社区综合服务小程序(人脸识别、AI问答、Echarts图形化分析)
前端·javascript·spring boot·spring·数据分析·echarts
Hilaku2 小时前
为什么死磕 1px 的团队,用户体验反而更差?
前端·javascript·程序员
陈拉斯2 小时前
给公司年会写了个大屏抽奖系统:动画在前端跑,凭什么说结果没被改?
javascript
yzy853 小时前
Vue中下载或打开文件的JavaScript方法
前端·javascript·vue
用户298698530143 小时前
在 React 中用 JavaScript 将 Word 转换为文本
前端·javascript·react.js
李少兄4 小时前
深入解析 JavaScript 中的 `document` 对象
javascript
paopaokaka_luck4 小时前
考研政治刷题小程序(AI推荐题目、ECharts数据分析、章节练习与专项训练、模拟考试、错题本与收藏夹、学习打卡与目标管理、题库和组卷维护)
前端·javascript·spring boot·spring·数据分析·echarts
刃神太酷啦4 小时前
前端入门第一课:HTML 基础语法 + 常用标签 + 实战全解
服务器·c语言·前端·javascript·css·c++·html
mldong5 小时前
给流程设计器加国际化,我没引 vue-i18n
前端·javascript·vue.js
开开心心就好11 小时前
批量提取PDF中的图片,直接导出原图
前端·javascript·支持向量机·智能手机·pdf·html·启发式算法