JavaScript数据类型转换

基本类型

number,string,boolean,undefined,null,object,symbol数组

显式转换

转string

number, string, boolean, undefined,null,symbol会以字符串的形式原样貌输出。编码

object: 会输出为"[object Object]".net

转number

使用基本包装类型Number

Stringcode

  • 数字格式:原样貌输出,例如 Number('123') ==> 123
  • 空字符串:输出0,例如Number('') ==> 0
  • 其余: 输出NaN, 例如Number('s') ==> NaN

booleancdn

  • true: 1,
  • false:

undefined: NaN对象

null: 0blog

object:调用object的toString方法,取其返回值进行转换,规则同其余类型。unicode

  • 例如 Number({toString() {return ''}}) ==> 0
  • 例如 Number({toString() {return 'ss'}}) ==> NaN

symbol: 会报错。报错内容:Cannot convert a Symbol value to a number字符串

使用parseInt

Stringget

  • 数字格式:原样貌输出,例如 parseInt('123') ==> 123
  • 数字打头:输出前面的数字,例如 parseInt('1s') ==> 1
  • 空字符串:输出0,例如parseInt('') ==> NaN
  • 其余字符串格式: 输出NaN, 例如parseInt('s') ==> NaN

其余状况:均为NaN

转boolean

String:当字符串长度大于1时转为true,不然false,例如Boolean(' ') ==> true

number:当数字不全为0时转为true,不然false,例如Boolean(0.01) ==> true, Boolean(0.0) ==> false

undefined,null: false

object: 均转为true,例如 Boolean({toString() {return false}})

Symbol: 均转为true,例如 Boolean(Symbol(false))

转Object

number,string,boolean 转为其对应的基本包装类型,例如 Object(1) ==> Number{1}。可是并不相等。

undefined,null: 转换为空对象。例如 Object(undefined) ==> {}

symbol: 转换为symbol包装类型对象【此处解释存疑】。例如 Object(Symbol(12)) ==>

隐式转换

字符串链接+

转换规则:会把其余数据类型调用String()方法转换成字符串而后拼接。

  • 例如: 1 + 'true' ==> 1true

+号说明:

  • 字符串链接符+:只要+号两边至少有一边是字符串。
  • 算术运算符符+:两边都不能是字符串。

算术运算符

算术运算符: (+、-、*、**、/、%) 转换规则:会把其余数据类型调用Number()转换成数字,而后作加法运算。

  • 例如: 1 + true ==> 2

关系运算符

转换规则:

  • 当关系运算符两边有一边是字符串的时候,会将其余数据类型使用Number转换,而后比较关系。
    • 例如:'2' < true ==> false
  • 当关系运算符两边都是字符串的时候,会同时转成number,而后比较关系。此时是按照字符串对应的unicode编码来转成的数字。能够使用charCodeAt查询。
    • 例如:'aab' < 'abb' ==> true

特殊状况

  • undefined == undefined ==> true
  • undefined == null ==> true
  • null == null ==> true
  • NaN == NaN ==> false

复杂数据类型

复杂数据类型:对象、数组

转换规则:先调用valueOf()方法获取其原始值,若是是值类型,则中止继续调用。若是不是值类型,则调用该类型的toString()方法,若是是值类型,则转换为字符串进行比较,若是是复杂数据类型则报错。

  • 例如:var a = { valueOf() { return 1 }, toString () { return 2
    } },a == 1 ==> true

逻辑非隐式转换

逻辑非:将其余数据类型使用Bollean()转换成布尔类型。

  • 例如:
    • [] == 0 ==> true
      • [].valueOf().toString()获得空字符串
      • Number('') === 0
    • ![] == 0 ==> true
      • 逻辑非优先级高于关系运算符 ![] =false
      • false == 0 成立
    • ![] == [] ==> true
      • 逻辑非优先级高于关系运算符 ![] = false
      • [].valueOf().toString()获得空字符串
      • Number('') = 0
      • false == 0 成立
    • [] == [] ==> false
      • 引用类型比较的是地址值
    • !{} == {} ==> false
      • 逻辑非优先级高于关系运算符 !{} = false
      • {}.valueOf().toString()获得'[object Object]'
      • Number('[object Object]') = NaN
      • false == NaN ==> false
    • {} == {} ==> false
      • 引用类型比较的是地址值

参考地址

相关文章
相关标签/搜索