基本數(shù)據(jù)類型 String、Number、Bool、undefined和null
引用數(shù)據(jù)類型 Object(Array,Function,RegExp等)
typeof 123 //number
typeof 'abc' //string
typeof true //boolean
typeof undefined //bndefined
typeof null //object
typeof { } //object
typeof [ ] //object
typeof console.log //function
null類型進行typeof操作符后,結(jié)果是object,原因在于,null類型被當(dāng)做一個空對象引用。
Null類型只有一個值null
Undefined類型只有一個只undefined
數(shù)據(jù)類型檢測
- typeof a 檢測基本數(shù)據(jù)類型:String , Number , Bool, Undefined
注:null的意義是 空對象指針,采用typeof檢測會返回 object。
a Instanceof Array 檢測引用類型,但是僅能判斷是否是對象的實例,并不能準(zhǔn)確判斷究竟是哪種數(shù)據(jù)類型。
Object.prototype.toString.call(a) 準(zhǔn)備判斷傳入?yún)?shù)的數(shù)據(jù)類型
null 與 undefined 的區(qū)別
Null:空對象指針,定義一個將來 用于 保存對象 的變量,最好將該變量初始化為 null.
例如 var o = null; 說明o這個變量是要用來保存對象類型的數(shù)據(jù)的,執(zhí)行typeof o會返回’object’,那么只要檢查null的值就可以判斷出該變量是否已經(jīng)保存了一個對象的引用。在實際開發(fā)工作中,經(jīng)常用到
例如:if ( goods != null ) { // 對goods對象執(zhí)行相應(yīng)操作 }
Undefined : 使用var聲明一個變量但未初始化其值,該變量的值默認(rèn)取得undefined,使用typeof檢測聲明但未初始化的變量,返回undefined
例如 var a; console.log( typeof a ) // undefined
區(qū)別和聯(lián)系:
undefined值派生自null值,因此使用全等操作 undefined == null,返回true;
二者用途不同,不建議將一個變量顯式的設(shè)置為undefined,比如var a = undefined,聲明但未初始化默認(rèn)會賦值為undefined;但對于null,只要意在保存對象的變量還沒有真正保存為對象,就應(yīng)該明確的讓該變量保存為null值,這體現(xiàn)了null作為空對象指針的意義,且利于區(qū)分undefined和null。
執(zhí)行undefined === null 返回false,全等’===’操作符的判斷,基于typeof檢測到的數(shù)據(jù)類型,而typeof undefined返回undefined,typeof null返回object。
number 有int+float
1.記住 float 浮點的運算不是精確的
2.number 里面有一個特殊的值 NaN 表示一個不是數(shù)字的number類型
eg var m=parseInt("a");
因為NaN表示值不是數(shù)字類型 。所以兩個 NaN==NaN 的值為false
任何數(shù)字和NaN做運算的值都等于NaN, NaN的值不是數(shù)字,運算不了。
Numer的小數(shù)運算精度問題 參考 https://www.cnblogs.com/ranyonsue/p/11378200.html
eg 0.1+0.2===0.3 false
原因:因為計算值是進行二進制計算 ,通常小數(shù)轉(zhuǎn)成2進制形成無限循環(huán)的二進制小數(shù),計算機只能根據(jù)float 最大精度進去截取,所以算出來是有差別的(無限循環(huán)?? 整數(shù)部分轉(zhuǎn)二進制 除2 直到商為0逆向取余 小數(shù)部分轉(zhuǎn)二進制 乘以2 直到小數(shù)位為0 順向取整)
解決辦法:
1 .tofixed()指定精度
2.
var num1 = 0.1;
var num2 = 0.2;
var c=0.1+0.2;//0.30000000000000004
var m = Math.pow(10, 1); //10的1次冪
//原理 ,先轉(zhuǎn)成計算機可以計算的數(shù)字,比如整數(shù)。在進行元素,之后還原即可
//此例子是先*10 在 除以10
js Number 結(jié)果相關(guān)的類
Math.abs(-1);//Math 類
window.parseInt("1");
window.parseFloat(0.2222);
//上面兩個Numer上 也有這個方法 Number.parseInt
window.isNaN("xxxx");//true 里面 的值會轉(zhuǎn)成數(shù)字
Number.IsNaN(Number.NaN);//里面 的值不會進行數(shù)字轉(zhuǎn)換 用來修復(fù)NaN!=NaN 的問題,判斷一個數(shù)字是否是NaN值 個人認(rèn)為
js Nubmer 的一些技巧,提示
1.轉(zhuǎn)成成整數(shù) 1111.1111^0 這是一個位運算 具體是去掉小數(shù)位 和Math.floor一樣的效果 裝波利器,我也不知道是在哪里看到 的
其他數(shù)據(jù)類型是怎么轉(zhuǎn)為number的方法 )
數(shù)字類型轉(zhuǎn)換為number返回原值;
布爾類型true轉(zhuǎn)為1,false轉(zhuǎn)為0;
null轉(zhuǎn)為0;undefined轉(zhuǎn)為NaN;
如果只有數(shù)值的字符串則返回該數(shù)字,空返回0 ,除此之外返回NaN;
對象\數(shù)組調(diào)用toString()方法后得到的值進行轉(zhuǎn)換;
tip
當(dāng) 使用+運算的時候。另外一個值是字符串的時候,會把數(shù)字轉(zhuǎn)成字符串 進行 字符串相加
1+true; //2
1+"true";//"1true"
1+{a:1};//"1[object Object]"
var a={b:1,toString:function(){return this.b+2}}; 這相當(dāng)于覆蓋了Object對象的toString 的方法
var m=a+2;//5