数据类型的转换汇总
Number类型的转换
把其他数据类型转换为number类型的方法
isNaN,Number,parsseIn,praseFloat
在进行加减乘除运算时
1 | '12px'=>NaN; "主灯"=>NaN |
js中的数学运算
+、-、*、/、% 加减乘除取模
除了加法有特殊性,其与运算遇到非数字类型时都要先转换为Number在进行运算
注:+有字符串拼接的作用(就是把其他值转化为 字符串再拼接)
特殊:({ }).toString()==>'[object object ]'
//对象的{}要用()包起来,否则报错,因为{}会被认为是代码块
其余都直接转化为字符串
1 | //加法的特殊性 |
布尔类型的转换
将其他数据转换为布尔类型(3种)
Blooean / ! / !!
判断语句
除以下5种外,其余都为true
0, null, ’ ‘, NaN, undefined,
注意
1 | //对象和对象比较:比较的是空间地址,不是同一个空间,肯定是false |
规律,两个等于号比较时,左右两边的的数据类型不一样,浏览器会把两边类型都转为数字再比较(对象类型比较特殊,应该先转化为字符串,再转化为数字),但是null和undefined除外null和undefined和其他任何值都不相等
1 | null==undefined =>true |
规律,两个等于号比较时,两边类型相同时,直接比较,对象和对象比较的是空间地址;{}!={},另外NaN和任何值都不等
JS中的数据类型检测汇总
typeof
用来检测数据类型的运算符
语法:typeof [value],typeof后面跟的都是值
返回结果:首先是个字符串,字符串中包含了我们需要检测的数据类型
typeof null=’object’ >虽然时基本数据类型,但是它属于空对象指针,检测结果是对象(局限性)
并且不能细分出当前对象是数组还是正则(局限性)
typeof 1>1?1:2; =>2 //优先级,先计算typeof 1;再比较,
instanceof&constructor
instanceof:检测某一实例是否属于当前类
constructor:构造函数
使用instanceof检测某个值是否属于某个数据类型 的内之类,从而检测出它是否是这个类型的值,对对象类型的值有明显的区分instanceof检测的弊端
基本类型的值无法基于它检测
var num=12; typeof num => ‘Number’
num instanceof Number =>false
var num2=Number(12); typeof num2 => ‘object’
num2 instanceof Number =>true
不管是哪一种方式创建基本类型值,都是自己所属类的实例,只不过类型不一样而已instanceof 是基于原型链来检测的,是要当前类的实例在原型链上,最后返回的结果都是true,这也是instanceof的弊端
constructor
获取要检测数据类型的constructor属性,判断它是否为某个数据类型的内置类来检测
ary.constructor===Array; =>true;
ary.constructor=’AA’;
ary.constructor===”AA’; =>true
=>由于constructor的值可以被修改,所以检测结果非常不可靠
Object.prototype.toString.call([value])
获取Object.prototype的toString方法,将方法中的this改为需要检测数据类型的值,然后执行
在Number String Boolean Array……这些类的原型上都有toString方法,这个方法就是把本身的值转换为字符串的
在Object这个类的原型上也有一个toString方法,但是这个方法是返回当前值的所属类详细信息,固定结构:[Object 所属的类型]
使用该方法检测,不管你是什么值,我们都可以正正常检测出我们需要的结果
1 | var obj={name:'珠峰'}; |
因为alert弹出的都是字符串,所以会自动将()中的内容调用toString,而对象类型调用toString,会出现
[Object 所属的类型]