JS中的常量(基本資料型別)和內建物件
JS中的基本資料型別:
String 、number、null、boolean、undefined、object、symbol(ES6)
1、 利用typeof運算子時其中只有null是異常的,typeof(null)=object,所以在判斷變數型別是否為null時要注意。同時利用typeof時對於沒有宣告的變數是不會報錯的,返回值為undefined。全域性變數和函式變數在沒有宣告時使用是會報錯的,但是在物件中使用沒有定義的屬性是不會報錯同樣返回的是undefined。Function變數是具有length屬性的,其長度為傳入的引數的個數。
2、 變數時弱型別的,即其本身是沒有型別的,其值才是具有型別的。
3、 對於number型別,
(1)其中要注意的是NAN非數字的數字,用全域性的函式isNAN判斷時會有問題,即對於非數字型別的變數其也會返回true,所以在使用時可以用以下方式判斷NAN:
①a!=a
②利用ES6中的Number.isNAN;
③typeof(a)==’number’&&isNAN(a)
(2)還有一個要注意的是+0,-0這兩者在使用時是相等的但是在瀏覽器引擎上還是會有區別,區分二者可以利用:typeof(a)==typeof(b)&&1/a==1/b,+0、-0作為分母時會得到infinite和-infinite。在ES6中有Object.is方法可用於判斷兩個變數是否相等。可用於上述情況。但是前者的方法的執行效率更好。
(3)另外在JS中數字型別也是有最大和最小值的界定的安全範圍的
(4)判斷變數是否為整數的方法:
①Number.isInteger(a),ES6中的方法
②typeof(a)==’number’&&a%1==0
③或者使用Mah.ceil(a)==a等類似的方法
4、變數在複製和作為引數傳遞時會有引用傳遞和值傳遞之分:
(1)值傳遞即普通的變數型別
(2)引用傳遞,如物件和陣列等幅值或者作為引數傳遞傳遞的是複製的引用會相會影響:
Var a=[1,2,3];
Var b=a;
b.push(4);//a=[1,2,3,4];b=[1,2,3,4]
但是當b重新賦值時:
Var b=[4,5,6]//a=[1,2,3,4];b=[4,5,6]因為b的引用已經發生了改變不在是a陣列的引用的複製。
JS中的內建函式
String、Number、Boolean、RegExp、Date、Error、Array、
Function、Object、symbol;類似於物件的建構函式
1、這些內建函式構造的變數都是封裝了基本型別值的物件如:
Var a=new String(‘abb’); //typeof(a)=object
除了利用Function構造的變數通過typeof輸出為function外其他均為object
2、為了知道構造的變數的真實型別可以利用:
Object.prototype.toString.call([1,2,3]);//”[object,array]”,後面的一個值即為傳入引數的型別
3、如果有常量形式(即利用基本資料型別)賦值給變數就不要用該方式來定義變數
本文為頭條號作者釋出,不代表今日頭條立場。