你掌握了吗?——js数据类型隐式转换(上)

简介: 众所周知javascript是一种弱类型语言。强类型和弱类型主要是站在变量类型处理的角度进行分类的。强类型是一旦指定数据类型,如果不经过强制转换,那么将永远是指定的这个类型。js中无法声明数据类型,变量类型是根据实际值决定的,由编译器自动调用转换函数进行转换,这种方式称之为隐式转换,今天我们就来谈谈数据类型是如何隐式转换的。

js数据类型隐式转换


前言


众所周知javascript是一种弱类型语言。强类型和弱类型主要是站在变量类型处理的角度进行分类的。强类型是一旦指定数据类型,如果不经过强制转换,那么将永远是指定的这个类型。js中无法声明数据类型,变量类型是根据实际值决定的,由编译器自动调用转换函数进行转换,这种方式称之为隐式转换,今天我们就来谈谈数据类型是如何隐式转换的。


js数据类型


js数据类型共7种,包括6种基本数据类型,分别是Undefined、Null、String 、Number、Boolean、以及ES6新增的数据类型Symbol,一种复杂数据类型Object。


  • Undefined 只有一个值就是undefined,表示未经初始化的变量值


  • Null 只有一个值null,null值表示空对象指针


  • String 表示零个或多个16位的Unicode字符组成的字符序列


  • Number 包括整数和浮点数


  • Boolean 有两个字面值:true和false,表示一个逻辑实体


  • Symbol 每次创建的值都是唯一的,不能被强制转换


  • Object 复杂数据类型


js引擎内部实现类型转换的4个抽象操作


隐式类型转换是在一定场景下,js运行环境自动调用这几个方法,尝试转换成期望的数据类型


  • ToString(argument)


  • ToNumber(argument)


  • ToBoolean(argument)


  • ToPrimitive(input[ , PreferredType])


ToPrimitive(input[, PreferredType])


将input对象转成原始类型值,依赖valueOf()和toString()

PreferredType参数是Number,则ToPrimitive执行顺序:


  1. input本身是原始类型,返回input。


  1. 调用input.valueOf(),如果结果是原始类型,则返回这个结果。


  1. 调用input.toString(),如果结果是原始类型,则返回这个结果。


  1. 抛出TypeError异常。


PreferredType 参数是String,ToPrimitive执行顺序:


  1. input本身是原始类型,返回input。


  1. 调用input.toString(),如果结果是原始类型,则返回这个结果。


  1. 调用input.valueOf(),如果结果是原始类型,则返回这个结果。


  1. 抛出TypeError异常。


PreferredType没有传入参数


  • 如果input是内置的Date类型,PreferredType视为String


  • 否则PreferredType视为Number


ToBoolean(argument)


Argument Type Result
Undefined false
Null false
Boolean return argument
Number 仅当argument参数是 +0, -0, or NaN时,return false;否则return true
String 仅当argument参数是 空字符串时,return false;否则return true
Symbol true
Object true


ToNumber(argument)


Argument Type Result
Undefined NaN
Null +0
Boolean argument 为 true, return 1; argument 为 false, return 0
Number return argument参数
String 将字符串中的内容转化为数字(比如"23"->23),如果转化失败则返回NaN(比如"23a"->NaN)
Symbol 抛出 TypeError 异常
Object 先primValue = ToPrimitive(argument, Number),再对primValue使用ToNumber(primValue)


ToString(argument)


Argument Type Result
Undefined "undefined"
Null "null"
Boolean argument 为 true, return "true"; argument 为 false, return "false"
Number 用字符串表示数字
String 返回argument
Symbol 抛出 TypeError 异常
Object 先primValue = ToPrimitive(argument, Number),再对primValue使用ToString(primValue)


常见的隐式类型转换


转成String类型


  • 字符串连接符(+)转成字符串


var a = 123
var n = a + 'helloworld';
console.log(n)   // '123hellowold'
a = true
var m = a + 'helloworld'
console.log(m)   // 'truehelloworld'


转成Number型


  • 自增自减运算符 ++/--


  • 加减乘除求余算数运算符 +-*/%


var a = '100'
var b = a--
var c = a/2
console.log(b) // 100
console.log(a) // 99
a+= ''
console.log(c) // 49.5


相关文章
|
2月前
|
存储 JavaScript 对象存储
js检测数据类型有那些方法
js检测数据类型有那些方法
140 59
|
1月前
|
存储 JavaScript 前端开发
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
JavaScript 数据类型分为基本数据类型和引用数据类型。基本数据类型(如 string、number 等)具有不可变性,按值访问,存储在栈内存中。引用数据类型(如 Object、Array 等)存储在堆内存中,按引用访问,值是可变的。本文深入探讨了这两种数据类型的特性、存储方式、以及检测数据类型的两种常用方法——typeof 和 instanceof,帮助开发者更好地理解 JavaScript 内存模型和类型检测机制。
71 0
JavaScript 数据类型详解:基本类型与引用类型的区别及其检测方法
|
1月前
|
JavaScript 前端开发 开发者
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
【干货拿走】JavaScript中最全的数据类型判断方法!!!!
22 1
|
1月前
|
存储 JavaScript 前端开发
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
JavaScript数据类型全解:编写通用函数,精准判断各种数据类型
19 0
|
2月前
|
存储 前端开发 JavaScript
前端基础(三)_JavaScript数据类型(基本数据类型、复杂数据类型)
本文详细介绍了JavaScript中的数据类型,包括基本数据类型(Number、String、Boolean、Undefined、Null)和复杂数据类型(Object),并解释了如何使用`typeof`操作符来识别变量的数据类型。同时,还讨论了对象、函数和数组等复杂数据类型的使用方式。
46 2
|
2月前
|
JavaScript 前端开发
JavaScript基础知识-基本数据类型和引用数据类型
关于JavaScript基础知识的文章,主要介绍了基本数据类型和引用数据类型。
41 2
JavaScript基础知识-基本数据类型和引用数据类型
|
3月前
|
开发者 图形学 开发工具
Unity编辑器神级扩展攻略:从批量操作到定制Inspector界面,手把手教你编写高效开发工具,解锁编辑器隐藏潜能
【8月更文挑战第31天】Unity是一款强大的游戏开发引擎,支持多平台发布与高度可定制的编辑器环境。通过自定义编辑器工具,开发者能显著提升工作效率。本文介绍如何使用C#脚本扩展Unity编辑器功能,包括批量调整游戏对象位置、创建自定义Inspector界面及项目统计窗口等实用工具,并提供具体示例代码。理解并应用这些技巧,可大幅优化开发流程,提高生产力。
356 1
|
3月前
|
前端开发 JavaScript
Web 前端大揭秘!JS 数据类型检测竟如此震撼,一场惊心动魄的代码探秘之旅等你来!
【8月更文挑战第23天】在Web前端开发中,合理检测数据类型至关重要。JavaScript作为动态类型语言,变量类型可在运行时变化,因此掌握检测技巧十分必要。
35 1
|
3月前
|
存储 前端开发 JavaScript
Web前端的奇幻之旅:探索JS数据类型的奥秘与差异
【8月更文挑战第23天】JavaScript是一种动态类型语言,提供多种内置数据类型支持信息的存储与操作。这些类型对Web前端开发者至关重要,直接影响代码性能与可读性。JavaScript数据类型主要分为两大类:原始数据类型(如Undefined、Null、Boolean等)与引用数据类型(如Object、Array等)。原始类型直接存储值,而引用类型存储指向数据的引用。原始类型不可变且存储在栈中,访问更快;引用类型则存储在堆中,可通过其引用进行修改。理解这些差异有助于编写高效、可维护的代码。
44 0
|
3月前
|
JavaScript
js常用数据类型转换
js常用数据类型转换
33 0