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'))
原文地址:https://www.cnblogs.com/songjiali/p/14178138.html