JavaScript类型转换:隐式魔法与显式掌控

什么是类型转换

类型转换Type conversion/typecasting)是指将数据由一种类型变换成另一种类型。js是一门弱类型语言,其允许变量类型的隐式类型转换显示类型转换,较为常见的类型转换有三种:

  • 转字符串类型
  • 转数字类型
  • 转布尔类型

显示类型转换

显式转换 (也称为强制类型转换 )是指程序员主动在代码中明确指定的一种类型转换方式。 以下是较为常见的显示类型转换方法:

  • 转字符串类型 String(X)
  • 转数字类型 Number(X)
  • 转布尔类型 boolean(X)

下面列出常见数据类型分别显式转换为数值类型、字符串类型以及布尔类型的值

表 1.1 显式类型转换

图表来源:Torn《JavaScript之类型转换》

隐式类型转换

JavaScript是一种弱类型(动态类型)语言,在运算或者比较时,如果操作数的类型不匹配,引擎会自动进行隐式类型转换(Type Coercion)。

我们先来看看js中==VS===

1.==会发生隐式类型转换,所以只判断值是否相等。

2.===不会发生隐式类型转换,所以会判断值和类型是否相等。

两种隐式类型转换

1.原始类型转原始类型

2.引用类型转原始类型

这里我们着重来聊聊引用类型转原始类型:

  • 引用类型转布尔类型----任何引用类型都是true
  • 引用类型转字符串类型----String(obj)==>obj.ToString()==>Toprimitive(obj,string)
  • 引用类型转数字----Number(obj)==>obj.ToNmber()==>Toprimitive(obj,Number)

Toprimitive抽象操作的完整执行逻辑

  • Toprimitive(obj,String)
  1. 判断obj是否为原始类型,是则直接返回
  2. 否则,调用toString(),如果得到了原始类型,则返回
  3. 否则调用valueOf(),如果得到了原始类型,则返回
  4. 否则,抛出TyoeError异常
  • Toprimitive(obj,Number)
  1. 判断obj是否为原始类型,是则直接返回
  2. 否则,调用valueOf(),如果得到了原始类型,则返回
  3. 否则,调用toString(),如果得到了原始类型,则返回
  4. 否则,抛出TyoeError异常

valueOf()

valueOf()在对象原型上,它只能将包装类的对象转化为原始类型(new String() new Boolean() new Number())。

toString()

在js中的大部分构造函数原型上都有自己重写的toString()方法。

  1. {}.toStirng()返回由'object 和\[\[class]和]'组成的字符串
  2. \[\].toString()返回由数组中每个元素以逗号拼接而成的字符串
  3. xxx(其他).toString()直接返回xxx的字符串字面量

发生隐式类型转换的场景

  1. 四则运算 + - * / %
  2. 判断语句 if while == >= <= != > <

+号的特殊作用

1.作为一元运算符 -- 会发生隐式类型转换,转成number (+'123'直接变成数字123) 2. 作为二元运算符 -- 只要+左右两边有一个是字符串,那么另一个也会转字符串进行拼接

下面列出常见数据类型分别隐式转换为数值类型、字符串类型以及布尔类型的值

表 1.2 隐式类型转换

相关推荐
随风一样自由5 小时前
【前端独角兽】刚进入前端领域的前端开发用jQuery还是Vue3?
前端·javascript·vue3·jquery
YHHLAI6 小时前
[特殊字符] 面试中的 Promise —— 从入门到精通
前端·javascript·面试
weixin_BYSJ19876 小时前
SpringBoot + MySQL 乒乓球运动员信息管理系统项目实战--附源码04954
java·javascript·spring boot·python·django·flask·php
沪飘大军7 小时前
ll-llm:一个零依赖、可插拔的 OpenAI 兼容 LLM 代理
javascript
山河木马8 小时前
GPU自动处理专题3-NDC怎么映射成屏幕像素坐标(视口变换)
javascript·webgl·图形学
Appthing10 小时前
在 TanStack Start 中使用 VitePWA 的正确配置
javascript
前端炒粉11 小时前
手写promise
java·前端·javascript
mONESY11 小时前
Node.js fs 文件系统模块 四种读写方案全解析
javascript·后端
Larcher11 小时前
从回调地狱到优雅异步:Node.js 文件操作进化史
javascript·后端·架构
熊猫钓鱼>_>11 小时前
Electron:当 Web 技术统治桌面
大数据·前端·javascript·人工智能·架构·electron·agent