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'))

浙公網安備 33010602011771號