Ison Lee

vuePress-theme-reco Ison Lee    2019 - 2020
Ison Lee Ison Lee
Home
Category
  • 前端
Tag
TimeLine
Contact
  • 掘金
  • GitHub
author-avatar

Ison Lee

5

Article

3

Tag

Home
Category
  • 前端
Tag
TimeLine
Contact
  • 掘金
  • GitHub

变量的数据类型转换

vuePress-theme-reco Ison Lee    2019 - 2020

变量的数据类型转换

Ison Lee 2020-08-06 22:03:56 JavaScript基础

# 前言


概念:将一种数据类型转换为另一种数据类型

通常有三种形式的类型转换:

  • 转换为字符串类型
  • 转换为数值类型
  • 转换为布尔型

转换为 null 和 undefined 没有意义。


# typeof 运算符


获取变量的数据类型

typeof a
typeof(a)
1
2

typeof运算符返回结果的类型式string

# 变量类型转换的分类


# 显式类型转换

  • toString()
  • String()
  • Number()
  • parseInt(String)
  • parseFloat(String)
  • Boolean()

# 隐式类型转换

  • isNaN()
  • 自增/自减运算符 ++ --
  • 正号/负号 +a -a
  • 加号 +
  • 运算符 - * /

# 特殊隐式类型转换

  • 逻辑运算符: && || ! 非布尔值进行与或运算时,会先将其转换为布尔值,然后运算,但是运算结果时原值。

  • 关系运算符: < > <= >= 等。关系运算符得到的运算结果都是布尔值


# 其他简单类型 -> String


# 字符串拼接 隐式类型转换

let a = 1
console.log(a+'')
1
2

内部调用String()函数,a = a+'' 等价于 a = String(a)

# toString()

a.toString()
1

toString不会影响到原有变量,它会将转换结果返回

补充

null 和 undefined 这两个值没有 toString()方法

Number类型调用toString时,可以再方法中传递一个整数作为参数。toString会把数字转换为指定进制,不指定默认转换为10进制

# String() 强制转换

String(a)
1
  • 对于 Number 和 Boolean 而言,本质就是调用toString()方法。
  • 对于 null 和 undefined,则不会调用toString()方法。null 直接转换为 "null" , undefined 直接转换为 "undefined"

# 其他数据类型 -> Number


# Number()

使用Number函数分为三种情况:

  • 字符串 -> 数字
    • 如果字符串中是纯数字,直接转换为数字
    • 如果字符串中包含了非数字(小数点不包括),则在转换为NaN
    • 如果字符串是一个空字符串或者全是空格,则转换为0
  • 布尔 -> 数字
    • true -> 1
    • false -> 0
  • null -> 数字
    • 0
  • undefined -> 数字
    • NaN 使用Number函数,如果无法转换为数字,则会转换为NaN

# parseInt()

parseInt的作用是将字符串中的有效数字转换为数字


    parseInt("5")
1
2
  • 如果字符串为数字字符串结合,只保留字符串最开头的数字,中文后面部分全部消失
  • 如果对非String使用,会先转为String再进行操作
  • 四舍五入
  • 如果字符串不是数字开头,则直接转换为NaN
  • 如果字符串是一个空串或者空格,转换时会报错
  • 如果有两个参数,后面参数表示将需要转换的变量作为x进制转换为十进制

boolean,null,undefined 使用parseInt函数都会得到NaN

# parseFloat()

将字符串转换为浮点数

内容可参考parseInt(),不同的是 parseFloat 可以获得有效的小数部分。

补充
  • 16 进制的数字,以0x开头
  • 8 进制的数字,以0开头
  • 2 进制的数字,0b开头(不是所有的浏览器都支持:chrome 和火狐支持,IE 不支持)

# 转换为Boolean


其他的数据类型都可以转换为 Boolean类型。情况如下:

  • 数字 -> 布尔

除了0,NaN,其他都是true

  • 字符串 -> 布尔

除了空串,返回都是true。空格字符串也返回true

  • null/undefined 都会转换为 false
  • 引用数据类型会转换为 true,[] {} 也会转换为true

# 隐式转换为Boolean类型

当非 Boolean 类型的数值和 Boolean类型的数值做比较时,会先把前者进行隐式转换为 Boolean类型,然后再做比较。举例如下:

console.log(1 == true); // 打印结果:true
console.log(0 == true); // 打印结果:false
1
2

# 显式转换为Boolean类型

  • 使用!!可以显式转换Boolean类型。
  • 使用Boolean()函数

# 隐式转换


隐式类型转换,内部调用的都是显式类型的方法

# isNaN()

判断指定参数是否为NaN,返回结果为Boolean类型。

执行过程

  • 先调用Number()函数
  • 然后将Number()返回结果与NaN进行比较

# 自增/自减运算符

执行过程

  • 先调用Number(参数)函数;

  • 然后将Number(参数)的返回结果进行 加 1 操作。

# 正号/负号

执行过程

注意,这里说的是正号/负号,不是加号/减号。

任何值做+a -a 运算时,运算结果都会自动转换为 Number 类型。 内部调用的是 Number() 函数。

# 加号

  • 字符串 + 数字
    • 当加号的两边,只要有一个是字符串的时候,就会调用 String() 函数将数字转为字符串,然后再计算。导致最终的运算结果是字符串
  • Boolean + 数字
    • Boolean 型和数字型相加时, true 按 1 来算 ,false 按 0 来算。这里其实是先调 Number() 函数,将 Boolean 类型转换为 Number类型,然后再和 数字相加
  • null + 数字
    • 等价于:0 + 数字
  • undefined + 数字
    • 计算结果:NaN

# 运算符:-、*、/

  • 任何非 Number 类型的值做-、*、/运算时,会将这些值转换为Number然后再运算(内部调用的是 Number() 函数),运算结果是 Number 类型。(注:任何值 + 字符串是特例,运算结果是字符串)

  • 任何的值和字符串做加法运算,都会先转换为字符串,然后再做拼串操作

  • 任何值和NaN做运算的结果都是NaN