【js】类型转化

67 阅读2分钟

js数据类型

  • 原始值类型: number/string/boolean/null/undefined/symbol/bigint
  • 对象类型:
  1. 标准普通对象 object {}
  2. 标准特殊对象 Array/Date/Math/RegExp
  3. 非标准特殊对象 Number/String/Boolean
  4. 可执行对象 function

例如:

1 -> 原始值
new Number (1) ->  非标准特殊对象

Symbol -> 创建一个唯一值

  • 给对象设置唯一值属性名。 Map可以允许属性名是对象。 Symbol.toPrimitive/iterator/hasInstance/toStringTag
  • vuex状态管理:在派发行为标识统一进行管理。

把其他类型转化为数字Number

隐式转化:浏览器默认转化 Number([val])

发生场景:

  • 数学运算 - * / 例如:10 - '2' -> 8
  • isNaN检测
  • == 比较

转化规则:

  • 字符串转化为数字 :空字符串 '' ->0 /'123'->123/ '2w'-> NaN
  • 布尔转化为数字: true->1 false->0
  • null - 0 undefined -NaN
  • Symbol 无法转化报错
  • BigInt 去除n
  • 对象转化为数字:
  1. 先调用对象的Symbol.toPrimitive ,若无则进行下一步
  2. 再调用对象的valueOf获取原始值,若无则进行下一步
  3. 再调用对象的toString()将其转化为字符串, 最后再把字符串基于Number()转化为数字
// 情况1
let a = new Date()
a[Symbol.toPrimitive]
//ƒ [Symbol.toPrimitive]() { [native code] }
a[Symbol.toPrimitive]('number')
//1666186608758 相当于 Number(new Date())
// 情况3:
arr[Symbol.toPrimitive]
//undefined
arr.valueOf()
//[3]
arr.toString()
//'3'
Number('3')
//3
// 基本对象转化为数字
let obj = {}
obj[Symbol.toPrimitive]
//undefined
obj.valueOf()
//{}
obj.toString()
//'[object Object]'
Number('[object Object]')
//NaN

显示转化:Number([val])/parseInt()

parseInt([val],[radix])

  • val必须是字符串,不是,要先隐式转换为字符串String([val])
  • radix 进制
  1. 不写,或者0 默认是10 (0x->16进制)
  2. 有效范围:2-36之间(不在有效范围内直接返回NaN)
  3. 从左侧第一个字符查找符合radix进制的值,遇到不符合的结束查找。把找到的内容按照[radix]进制转换为10进制数值。 parseInt('101124r',2) -> 1011 = 1*2^3 + 1*2^1+1*2^0 = 8+2+1

把其他类型转化为字符串String

String([val]) [val].toString()不是同一个方法。

  • +两边,出现字符串,进行字符串的拼接。
  • +两边,一边是对象,把对象按照toPrimitive->valueOf->toString
  • new Date()[Symbol.toPrimitive]('default')
  • +'10'只出现在左边,进行数字转化
String(null) -> null 
String([]) - > ''
String({}) -> '[object Object]'

把其他类型转化为布尔Boolean

五个假值:null undefined false 0 NaN。其他转成Boolean均为true

== 进行类型转化

  • 对象和字符串比较,对象转字符串按照toPrimitive->valueOf->toString
  • null == undefined -> true ,null/undefined和其他值都不相等
  • NaN != NaN
  • 对象 == 对象 比较的是堆内存地址,地址相同则相等。
  • 两边类型不一样都是转化为数字进行比较的。

=== 不会隐式转化,只要类型不同,直接false

转化表: JavaScript类型转换表,参自《JavaScript权威指南》
在这里插入图片描述