JS的类型与类型转换

86 阅读3分钟

JS类型

JS中基本数据类型记忆法:USONB(除了object,其他都存储在内存栈中)

  • U:undefined
  • S:string symbol
  • O:object
  • N:null(属于object类型,typeof判断得到的结论) number
  • B:boolean

关于null和undefined:

null表示"没有对象",用作一个空值的显示。表示一个变量预期有值,但是目前为空值。

undefined表示“缺少值” ,即访问一个不存在的变量或对象属性时的默认返回值。

JS中引用类型:(存储在内存堆中)

  • Object
  • Array
  • Date
  • Regexp
  • Function
  • 基本包装类型(String Number Boolean Global Math)

类型判断

(1)typeof——用于基本数据类型

typeof 不能精确判断object类型,只能告诉我们是object,所以对object对象的判断使用instanceof。

(2)instanceof——用于引用类型

判断一个实例是否属于某种类型、判断一个实例是否是其祖先类型的实例。

(3)Object.prototype.toString.call——用于任意类型

Object.prototype.toString.call(1) // "[object Number]"

Object.prototype.toString.call('hi') // "[object String]"

Object.prototype.toString.call({a:'hi'}) // "[object Object]"

Object.prototype.toString.call([1,'a']) // "[object Array]"

Object.prototype.toString.call(true) // "[object Boolean]"

Object.prototype.toString.call(() => {}) // "[object Function]"

Object.prototype.toString.call(null) // "[object Null]"

Object.prototype.toString.call(undefined) // "[object Undefined]"

Object.prototype.toString.call(Symbol(1)) // "[object Symbol]"

类型转换

基本数据类型->基本数据类型

原始值转为boolean转为number转为string
falsefalse0'false'
truetrue1'true'
0false0'0'
1true1'1'
NaNfalseNaN'NaN'
InfinitytrueInfinity'Infinity'
-Infinitytrue-Infinity''-Infinity'
'0'true1'0'
'20'true1'20'
''false0''
'hjh'trueNaN'hjh'
nullfalse0'null'
undefinedfalseNaN'undefined'

引用类型->基本数据类型(内含ToPrimitive函数原理)

原始值转为boolean转为number转为string
{}trueNaN'[object Object]'
[]true0''
function(){}trueNaN'function(){}'
[1]true1'1'
[1,2]trueNaN'1,2'
['aaa']trueNaN'aaa'
['aaa','bbb']trueNaN'aaa,bbb'

(1)所有引用类型转boolean都是true

(2)转number或string逻辑

  • 转string时调用ToPrimitive(input, 'string'),先调用toString方法,如果得到的是原始数据类型,返回该值;否则调用valueOf方法,如果得到的是原始数据类型,返回该值;否则抛出异常
  • 转number时,调用ToPrimitive(input, 'number'),先调用valueOf方法,如果得到的是原始数据类型,返回该值;否则调用toString方法,如果得到的是原始数据类型,返回该值;否则抛出异常

valueOf和toString的返回值

valueOf返回值toString返回值
Number返回对象本身转换为字符串类型时的字符串值。
可以传一个参数,决定转换为字符串时的进制(2、8、16)
String返回对象本身返回对象本身
Boolean返回对象本身返回"true"或"false"字符串
Object返回对象本身返回的是"[object type]"字符串,"type"指的是对象本身的类型识别。
例如Object对象返回"[object Object]",Math对象返回"[object Math]"
Array返回对象本身相当于用数组值调用join(',')所返回的字符串。
例如:[1,2,3].toString()会是"1,2,3"

基本数据类型->引用类型

字符串数值truefalseboolean
objectnew String(字符串)new Number(数值)new Boolean(true)new Boolean(false

隐式类型转换场景

  • 条件判断
  • 一元操作符,例如+'1'、-a
  • 二元运算符,例如a==b,a+b