数据类型
基本数据类型
1、数字number—常规数字和NaN
2、布尔Boolean
3、字符串String
4、空对象指针null
6、未定义undefined
引用数据类型
1、对象数据类型 Object
普通对象{}
数组对象[]
math对象
date对象
正则对象/^ {6,16}$/
类数组对象
2、函数数据类型function
常用浏览器内核
webkit
gecko
presto
trident
number数据类型
number数据类型包含:常规数字和NaN
NaN—Not a Number:不是一个数但是是一个数字类型
NaN和任何值(包括自己)都不相等NaN !==NaN 不能用相等的方式判断一个数是否为有效数字。
isNaN
检测一个值是否为非有效数字,如果为非有效数字返回true ,否则是有效数字返回false。(是数字返回false,不是返回true)
console.log(isNaN(10));//输出false
console.log(isNaN('aa'));//输出true
console.log(isNaN('10'));//输出false
注意:使用isNaN进行检测时,首先会验证测试的值是否是数字类型,如果不是则调用Number()方法,把值转换为数字类型,然后再检测。
Number(‘10’); //输出10 isNaN(10)//输出false
字符串转换为数字类型
把字符串转换为数字,只要字符串中包含非有效数字类型字符(第一个小数点除外)输出的结果都是NaN,空字符串则输出0
console.log(Number('1.1'));
console.log(Number('12.5.5'));
console.log(Number('12.5pp'));
console.log(Number(''));
数组转换为数字类型
数字对象转换为数字类型,首先先将数组里的元素转换成字符串再调用Number方法判断字符串里的是否为数字,对于字符串,从左到右依次查找有效的数字字符,知道遇到非数字字符,停止查找,不论之后是否还有数字返回NaN
console.log(Number([12]));
console.log(Number([12,13]));
2. parseInt/parseFloat([value],[进制]):转换为数字类型的两个方法,[value],先转换成字符串,对于字符串,从左到右依次查找有效的数字字符,知道遇到非数字字符,停止查找,不论之后是否还有数字,最后把找的数字字符当做数字返回。
console.log(parseFloat([12,13]));//输出12
console.log(parseInt([12,13]));//输出12
布尔类型转换为数字类型
console.log(Number(true));
console.log(Number(false));
console.log(isNaN(false));
把引用数据类型转换为数字,是先把基于toString方法转换为字符串,然后再转换为数字。
null和undefined转换为数字类型
console.log(Number(null));
console.log(Number(undefined));
String字符串数据类型
所有用单引号、双引号、反引号(撇 ES6模板字符串)包起来的都是字符串
把其他类型转换为字符串
1、[val].toString();
let a=12;
console.log(a.toString());//输出 '12'
console.log((NaN).toString());//输出'NaN'
注意:
- null和undefined是禁止直接toString的
- 普通对象.toString()的结果是"[Object Object]"
console.log(({name:'ddd'}).toString());//输出[object Object]
2、字符串拼接
四则运算法则中,除了加法之外,其余都是数学计算,只有加法可能存在字符串拼接,一但字符串遇到加法,则不是数学运算而是字符串拼接。
Boolean布尔数据类型
只有0、NaN、’ '、null、undefined 五个值转换为false,其余都转换为true(而且没有任何的特殊情况 )
console.log(Boolean(0));
console.log(Boolean(''));
console.log(Boolean(' '));
console.log(Boolean(null));
console.log(Boolean(undefined));
console.log(Boolean([]));
console.log(Boolean([12]));
取反
- !:取反(先转换为布尔类型再取反)
- !!:取反再取反,相当于转换为布尔<=>Boolean
- 条件判断时,如果条件只是一个值,不是==/===/!= 等等的比较条件,是要把这个值先转换为布尔类型,然后验证真假。
if(1){
console.log("hello");//值为true输出hello
}
if('12px'+5){
//=>'12px5'
console.log("world");//值为true输出world
}
if('12px'-5){
//=>NaN-5 =>NaN
console.log("!!");//值为false不输出
}
null/undefined的区别
null和undefined都代表的是没有
- undefined:意料之外(不是我能决定的)
let num;//创建一个变量没有赋值,默认值是undefined
....
num=12; //之后可以赋值也可以不赋值
- unll:意料之中(一开始不知道值,手动设置为null
,后期再给赋值操作)
let num=null;//let num=0; 一般最好用null作为初始的空值,因为0不是空值,它在栈内存中有自己的存储空间。
....
num=12;