一. 基本数据类型
1.数字(number)
常规数字和NaN(not a number)
NaN和任何值(包括自己都不相等 NaN != NaN)
isNaN检测一个值是否为非有效数字,如果不是有效数字返回true,反之为false。在使用isNaN进行检测时,首先会验证是否为数字类型, 如果不是则会首先用Number()方法,将值转换为数字类型再检测。
console.log( isNaN(12.5) ) => false
console.log( isNaN('AA') ) => true
Number方法在转换字符串时,只要字符串中包含任意一个非有效字符(第一个点除外)结果都是NaN(空字符串会变成0)
console.log(Number('12.5')) => 12.5
console.log( Number('12.5px') ) => NaN
console.log( Number('12.5.5') ) => NaN
console.log( Number(' ') ) => 0
Number方法在转换布尔类型时,true为1,false为0
console.log(Number(true) ) => 1
console.log(Number(false) ) => 0
console.log(isNaN(false)) => false
Number方法在转换null和undefined时,null为0,undefined为NaN
console.log(Number(null) ) => 0
console.log(Number(undefined) ) => NaN
Number方法在转换引用数据类型为数字时,是先把它基于toString方法转换为字符串,然后在转换为数字
console.log({}.toString()) => [object Object] => NaN
console.log([].toString()) => '' => 0
console.log([12.5].toString()) => '12.5' => 12.5
console.log([12.5, 12.6].toString()) => '12.5, 12.6' => NaN
其他类型转换为数字类型的几种方法
Number() 根据浏览器V8底层渲染规则进行转换(参考上文)
parseFloat() 额外提供的方法,先将值转为字符串在进行转换,可转换小数(从左到右依次转换,遇到非有效数字字符时停止,如果第一个字符不能转换为数字,parseFloat会直接返回 NaN。)
parseInt() 额外提供的方法,先将值转为字符串在进行转换,只可转换为整数(从左到右依次转换,遇到非有效数字字符时停止,如果第一个字符不能转换为数字,parseInt会返回 NaN。)
2.字符串(string)
所有单引号,双引号,反引号(模板字符串)包起来的·都是字符串
toString可以将其他类型转换为字符串
nul与undefined不能进行转换(原型上有此方法但是被浏览器禁止了)
普通对象则转换为[object Object](因为Object.prototype.toString方法不是用来转换为字符串的,而是检测数据类型的)
普通对象
3.布尔(boolean)
true/false
把其他类型转换为布尔值,只有0,null,nudefined,'',NaN为false,其余的都为true
转换方法:
1.Boolean()
Boolean(0) => false
2.!取反(先转换为布尔再取反)!!取反再取反(直接转换为布尔型)
console.log(!0) => true
console.log(!!0) => false
3.条件判断 (条件只为一个值)
4.空对象指针(null)
null用来表示尚未存在的对象,常用来表示函数企图返回一个不存在的对象。
5. 未定义(undefined)
当声明的变量还未被初始化时,变量的默认值为undefined。
属性名不存在时,输出undefined
没写return函数默认返回undefined
二.引用数据类型
1.对象类型 Object
①数组 []
②普通对象 {}
任何一个对象都是由0个或多个键值对组成,且键不能重复
③正则对象/^[\d]$/
④数学函数对象 Math
⑤日期对象 Date
……
2.函数数据类型 Function