JavaScript 数据类型

1 动态类型

JavaScript 是一种弱类型或者说动态语言。我们声明变量时不用提前声明其数据类型,在程序运行过程中类型会被自动确定。这意味着我们可以使用同一个变量保存不同类型的数据。

2 原始类型和对象类型

JavaScript 的数据类型分为两类:原始类型(primitive type)和对象类型(object type)。

原始类型包括 Undefined、Null、布尔值(Boolean)、数值(Number)、字符串(String)和符号类型值(Symbol)。原始类型定义的值是不可变的(值本身无法被改变),我们把这个值称为原始值。举个例子,我们对一个字符串进行操作一定返回一个新字符串,原始字符串不会被改变。

对象是指内存中的可以被标识符引用的一块区域。在 JavaScript 中,对象可以被看作是一组属性的集合。对象中的属性分为两种:数据属性和访问器属性。每个数据属性都由“键值对”构成。键是一个字符串(或者 Symbol),值可以是任意类型的值。数据属性有 value,writable,enumerable 和 configurable 特性。访问器属性由访问器函数(get 和 set)构成,拥有 get,set,enumerable 和 configurable 特性。在 MDN Web Docs 中查看 JavaScript 对象属性的特性

3 使用 typeof 操作符判断数据类型

typeof 操作符返回一个字符串,表示操作数的数据类型。typeof 可能的返回值:

类型结果
Undefined“undefined”
Null“object”
Boolean“boolean”
Number“number”
String“string”
Symbol“symbol”
宿主对象Implementation-dependent
函数对象“function”
任何其他对象“object”

4 数据类型转换

数据类型在一定条件下可以相互转换,类型转换分为显示类型转换和隐式类型转换。

4.1 显式类型转换

显示类型转换就是我们主动调用 Number 函数、String 函数或者 Boolean 函数进行的转换。各原始类型的类型转换结果如下表所示:

原始类型NumberStringBoolean
UndefinedNaN字符串 “undefined”false
Null0字符串 “null”false
Booleantrue 转换为 1,false 转换为 0true 转换为字符串 “true”,false 转换为字符串 “false”自身
Number自身转换为相应的字符串0 和 NaN 转换为 false,其他的都转换为 true
String如果可以被解析为数值则转换为相应的数值(空字符串转换为 0),否则转换为NaN自身空字符串转换为 false,其他的都转换为 true
Symbol不能转换为数值(TypeError: Cannot convert a Symbol value to a number)转换为相应的字符串true

对象类型转换成 Number 类型时,先调用对象自身的 valueOf 方法,如果该方法返回原始类型的值(数值、字符串和布尔值),则直接对该值使用 Number 方法,不再进行后续步骤。如果 valueOf 返回复合类型的值,再调用对象自身的 toString 方法,如果 toString 方法返回原始类型的值,则对该值使用 Number 方法,不再进行后续步骤。如果 toString 方法返回的是复合类型的值,则报错。

对象类型转换成 String 类型时,先调用 toString 方法,如果 toString 方法返回的是原始类型的值,则对该值使用 String 方法,不再进行后续步骤。如果 toString 方法返回的是复合类型的值,再调用 valueOf 方法,如果 valueOf 方法返回的是原始类型的值,则对该值使用 String 方法,不再进行后续步骤。如果 valueOf 方法返回的是复合类型的值,则报错。

对象类型转换成 Boolean 类型时,转换为 true。其实,对于 Boolean 函数,除了 undefined、null、false、0、NaN、空字符串转换为 false,其他的都转换为 true。

4.2 隐式类型转换

隐式类型转换是暗藏在表达式里面的转换,即 JavaScript 在进行四则运算、判断语句、Native 调用的时候,后台悄悄调用转换函数进行的转换。

1 + "foo"   // => "1foo"
true + 1    // => 2
true + true // => 2
1 + {a: 1}  // => "1[object Object]"
[] + []     // => ""
[] + {}     // => "[object Object]"
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值