JavaScript数据类型
1、JS数据类型
- 值类型:undefined、number、string、boolean、symbol
- 引用类型:function、object
2、undefined和null
2.1、在if语句中,undefined和null都会自动转为false
// if (!undefined) {
// console.log("undefined");
// }
// if (!null) {
// console.log("null");
// }
2.2 null是object类型,undefined就是undefined类型
// console.log(typeof null);
// console.log(typeof undefined);
// console.log(null == undefined); //true
// console.log(null === undefined); //false
2.3 null是空指针对象,转为数值时为0,undefined是一个表示"无"的原始值,转为数值时为NaN
// console.log(Number(null)); //0
// console.log(Number(undefined)); //NaN
2.4、出现的场景
// console.log(document.getElementById("aa")); //对象为空,结果null
// let i;
// console.log(i); //变量声明,但是没有赋值,结果为undefined
// function fn(x) {
// console.log(x);
// }
// f(); //调用函数时,应该提供的参数没有提供,该参数等于undefined
// let o = new Object(); //对象没有赋值的属性,该属性的值为undefined
// var x = f();
// x; //函数没有返回值时,默认返回undefined
3、number类型
3.1 为什么 0.1+0.2!=0.3
JavaScript 采用“IEEE 754 标准定义的双精度64位格式”表示数字,不区分整数值和浮点数值,所有数字均用浮点数值表示,64位格式是如何存储的呢?分为三个部分:第一部分:符号位(1位):表示正数还是负数(0表示正数、1表示负数),第二部分:指数位(11位),第三部分:有效位(52位)。0.1转成二进制(十进制->二进制,如果是正数:除2取余,逆序,如果是小数:乘2取整,正序):0.000110011001100110...0110,用科学计数法:1.10011001100110...0110*2e-4,此时,符号位为0,指数位为2e-4,有效位为1.10011001100110...0110,但是有效位只能存52位,所以会舍去一部分精度,最后存储的就不是0.1了
3.2、number类型包括:整数、小数、NaN、无穷大
console.log(typeof Infinity); //正无穷大
console.log(typeof -Infinity); //负无穷大
3.3 Number()可以将任意类型的值转化成数值,而parseInt()和parseFloat()只应用于字符串向数字的转换
3.3.1 Number
// console.log(Number(true)); //1
// console.log(Number(null)); //0
// console.log(Number(undefined)); //NaN
// console.log(Number("0.2")); //0.2
// console.log(Number("")); //0
// console.log(Number("aa")); //NaN
3.3.2 parseInt() parseInt()专门用于把字符串转换成整数。在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果是,则继续解析,直到解析完成或者遇到非数字字符
// console.log(parseInt(" 123.8px")); //123
// console.log(parseInt(" 123.8 ")); //123
// console.log(parseInt(" -123.8px")); //-123
// console.log(parseInt("a123.8px")); //NaN
// console.log(parseInt("0 123.8px")); //0
3.3.3 parseFloat()专门用于字符串转换浮点数。同样地,解析时会忽略字符串前面的空格,直到找到第一个非空格字符,然后一直解析到字符串末尾或一个无效的浮点数字字符为止
// console.log(parseFloat(" 0123.px")); //123
// console.log(parseFloat(" 123.px")); //123
// console.log(parseFloat(" 123.1px")); //123.1
// console.log(parseFloat(" 123.1.2px ")); //123.1
// console.log(parseFloat(" -123.0px")); //-123
// console.log(parseFloat(".123.1px")); //0.123
// console.log(parseFloat("0 123px")); //0
3.3.4、Number里的方法
// console.log(0.0000112311232.toExponential()); //返回一个数字的指数形式的字符串 , 1.12311232e-5
// console.log(13.375.toFixed(2));//13.38 四舍五入
// console.log(Number.isInteger(123));//true 判断为整数
console.log(isNaN('aaa')) //false
console.log(Number.isNaN('aaa1'))