类型转换

  • 文本主要是:知识点学习总结
  • 不足之处欢迎留言之处

显式类型转换 - Number函数

  • 数字 -》 数字
  • 字符串 如果字符串内为数字 -> 数字; 不全部为数字 -> NaN; 空字符串 -> 0。
  • 布尔值: true -> 1 false -> 0
  • undefined -> NaN
  • null -> 0
  • 对象 -> 先执行对象的valueOf方法,如果返回原始数据类型,则使用Numbe方法。 如果返回对象数据类型,再调用toString方法,如果返回原始数据类型,则使用Number方法,如果toString再次返回一个对象数据类型,则抛出异常

显式类型转换 - String函数

  • 数字 -》 相应的数字字符串
  • 字符串 -> 原值
  • 布尔值: true -> 'true' false -> 'false'
  • undefined -> 'undefined'
  • null -> 'null'
  • 对象 -> 先执行对象的toString方法,如果返回原始数据类型,则使用String函数。 如果返回对象数据类型,调用valueOf方法,如果返回原始数据类型,则使用String方法,如果再次返回一个对象数据类型,则抛出异常

显式类型转换 - Boolean函数

  • undefined、null、+0、-0、NAN、'' -> 均为 false; 其他均为true

隐式类型转换

  • 自动转换,仍然遵循显示转换规则

常见面试题

例1:

+ []  
// 结果  0
// 原理: + 运算符, 则 Number([]) ->  Number([].valueOf()) ->  Number([].toString()) ->  + Number('')

例2:

{} + [] 
// 结果 0
// 原理:此处{}被认为一个空的代码块,不执行 {} + [] -> + [] 与上例一样

例3: 

[] + [] 
//结果: ''
//原理:[] + [] ->  [].valueOf().toString() +  [].valueOf().toString() -> '' + ''

例4: 特别说明 火狐和谷歌上结果不一致,原因尚未知晓,大佬请留言告知
[] + {} 
// 结果 "[object Object]"
// 原理 [] + {} ->  [].valueOf().toString() +  {}.valueOf().toString() -> '' +  "[object Object]"

typeOf

typeof []
"object"

typeof undefined
"undefined"

typeof null
"object"

typeof 1
"number"

typeof true
"boolean"

typeof function() {}
"function"

typeof NaN
"number"

typeof Symbol()
"symbol"
  • 说明 typeof null -> object 变量的值被设计保存在一个 32 位的内存单元中。该单元包含一个 1 或 3 位的类型标志 000 标识object ;null 二进制全是0 所以会认为null 为 object.这是一个历史遗留bug

判断一个数组

Array.isArray([]) 
arr instanceof Array; 判断一个对象是不是某个类型的实例
arr.constructor == Array

D_Q_
483 声望12 粉丝

前端萌萌哒