js数据类型
一、数据类型
(一)基本数据类型
1、数值类型
大致可以看成两类(整数类型和浮点类型)、(NaN非数字类型)
注意:Infinity、-Infinity与其他数值进行算术运算时,整个算术表达式将变成特殊值NaN。
Infinity、-Infinity可以进行比较运算,两个Infinity总是相等的,两个-Infinity也相等。
注意:js内部所有数以64位浮点数形式存储(所以涉及小数的比较与运算要小心),浮点数用二进制表达时是无穷的(即浮点数不是精确的值),所以0.1+0.2=0.3 false
注意:js允许除数为零,当除数与被除数都为0时,值为NaN。正数除以0为Infinity,负数除
以0为-Infinity。
判断一个数是否为NaN: isNaN() 用于判断某个数值型变量是否为非数,若参数不是数值型会先转换,而es6方法Number.isNaN()只对数值型有效,不进行类型转换,可准确判断是否NaN。
2、字符串类型(无字符类型)
用单引号或者双引号括起来
注意:如果在字符串中使用特殊字符(如单引号、双引号。空格等),必须使用转义字符
3、布尔类型
布尔类型的值只有两个true和false
4、undefine的类型
undefine的类型的值只有一个undefined,表示该变量不存在或者没有赋值
注意:任何数与undefined运算为NaN
5、null类型
注意:typeof判断类型时为object 可以给变量赋值为null解除占用
注意:null==undefined true ===严格相等判断时为false
6、Symbol数据类型
注意:不是构造函数,不可用new生成,直接Symbol(),表示独一无二的值,可接受一个字符串作为参数,即使参数同,相互间也不相等
注意:当想要同一个Symbol值时,用到知识点Symbol.for() 它接受一个字符串作为参数,然后搜索有没有以该参数作为描述的 Symbol 值。如果有,就返回这个 Symbol 值,否则就新建并返回一个以参数为描述的 Symbol 值
Symbol.keyFor() 返回一个已登记的Symbol类型值的key(即描述)
(二)复杂数据类型
3大引用类型Object 、 Array 、Function
二、判断数据类型的方法
1、typeof只可以检测number,string,boolean,object,function,undefined。
弊端:null与Array检测不了,都会判断为object,其他可以正确判断
补充判断是不是数组的方法:arr instanceof Array
arr.constructor=Array
Array.isArray(arr) 有兼容性问题
Object.prototype.toString.call(arr)=‘[object Array]’
注意:es5中typeof是保险操作,因为即使没有声明,也为undefined 但es6 typeof不是一个百分百安全操作,因为存在暂时性死区(let const命令声明的变量没有变量提升,只要在声明前使用就会报错)
2、instanceof 检测某个对象是不是另外一个对象的实例,只能用来判断对象和函数,不能用来判断字符串和数字
例如 arr instanceof Array 检测arr是不是内置类Array的实例
3、constructor 指向对应的构造函数
4、Object.prototype.toString.call 判断某个对象值属于哪种内置类型
let date = new Date;
console.log(Object.prototype.toString.call(date));//[object Date]
let re = ‘//’;
console.log(Object.prototype.toString.call(re));//[object String]
let Pz = [8,6,4];
console.log(Object.prototype.toString.call(sz));//[object Array]
let mms = function(){};
console.log(Object.prototype.toString.call(hs));//[object Function]
三、类型间的转换
1、转为字符串
1)String(参) 此方法可将其他所有类型转为字符串类型
2)参.toString() 注意不可转null与undefined类型
3)隐式转换:在进行+运算时,若一个是字符串类型,一个为其他类型则会将其他类型转为字符串类型在进行拼接
2、转为数值类型
1) Number()
纯数字的字符串转换后为数字,非纯数字的字符串为NaN,""空字符串转后为0
布尔类型true转后为1 ,布尔类型false转后为0
undefined转换后为NaN
null转换后为0
[]空数组转换后为0,其他NaN
Object转后为NaN
Function转后为NaN
2) parseInt() 不识别小数
若字符串首字符为数字则遇非数字结束。若首字符非数字则为NaN
布尔类型true转后为NaN ,布尔类型false转后为NaN
undefined转换后为NaN
null转换后为NaN
[]空数组转换后为NaN,非空数组遇逗号结束,若第一个数组值就不是数字则NaN
Object转后为NaN
Function转后为NaN
3)parseFloat() 同parseInt()但识别第一个小数点
3、转为布尔类型
Boolean() 数字0、"“”空字符串、null、undefined、NaN转换后为false,其他true
.