详解JavaScript中的类型判断与类型转换
作者:布鲁斯要蓝调
类型判断
typeof:只能判断原始类型,并且判断null的时候会判断出null为'object';使用typeof判断 引用类型时:只能判断出function
Object.prototype.toString(): 因为区别对象、数组、函数单纯使用 typeof 只能判断为object对象,但是可以通过Object.prototype.toString方法,判断某个对象值属于哪种内置类型。 例:[object String] 1).如果this值是undefined,就会返回 [object Undefined] 2).如果this值是null,就会返回 [object Null] 3).生成变量 o,让 o 成为ToObject(this)的结果 4).让class成为 o 的内部属性[[class]]的值 5).最后返回由"[object 和 class 和 "]" 三个部分组成的字符串
例: console.log(Object.prototype.toString.call(new Date())); //[object Date]
- 数组身上的判断方法:Array.isArray()
Array.isArray()方法用来判断某个方法是否是数组并且返回一个布尔值
- instanceof:只能判断引用类型,不能判断原始类型,它是顺着原型链找的 ;但是数组也是属于Object 也可以判断出它是Object;instanceof用于检测构造函数的
prototype
属性是否出现在某个实例对象的原型链上。
类型转换
对象转原始类型
js的类型转换只有三种类型的转换: to string, to boolean, to number
转number
调用 ToPrimitive (obj,Number)
- 如果obj是基本类型,直接返回
- 否则,调用ValueOf方法,如果得到一个原始类型.则返回
- 否则,调用toString方法,如果得到一个原始类型.则返回
- 否则报错 []==![] Number({})//NaN
转string
调用ToPrimitive (obj,String)
- 如果obj是基本类型,直接返回
- 否则,调用toString方法,如果得到一个原始类型.则返回
- 否则,调用ValueOf方法,如果得到一个原始类型.则返回
- 否则报错
隐式转换
一元操作符 : +'1'=>Number(1)=1 '+'会触发Number()
当+运算作为一元操作符时,会调用ToString()处理该值
二元操作符
v1+v2
- lprim=ToPrimitive(v1)
- rprim=ToPrimitive(v2)
- 如果lprim或rprim是字符串,那么返回 ToString(lprim)和ToString(rprim)的拼接结果
- 否则返回ToNumber(lprim)和否则ToNumber(rprim)的相加结果
==
当执行 x == y 时,
如果x和y是同一类型,
如果x是undefined,返回true
如果x是null,返回true
x是数字 x是NaN,返回false
如果x和y指向同一个对象,返回true,否则返回fasle
特例: null == undefined //true
1 == 'h' 会先ToNumber('h')再判断
false == '1' 会先ToNumber('false') ToNumber('1')
true == {a:1} // ToPrimitive({a:1})
[] == ![]
!运算符优先级更高 先执行![] !为布尔 ![]为false []==false 然后有==将这两个向Number靠近 []为引用类型,调用ToPrimitive() 然后先调用valueOf()没有 再调用toString()转换成'' ''再转换成0 false转换成0 所以[] == ![]
到此这篇关于详解JavaScript中的类型判断与类型转换的文章就介绍到这了,更多相关JavaScript类型判断与转换内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!