1,js數據類型
基本類型:null,undefined,String,Number,Boolean,Symbol
引用類型:Object,Function,Array
區別:基本類型存到棧裏,引用類型存到堆裏
注意:NaN屬於Number類型,且NaN==NaN爲false
typeof(null) //‘object’,原因:js原始版本是使用32位操作系統,000表示對象,而null全爲0,所以誤判爲object
若想得到一個變臉正確的類型,用object,prototype,toString.call(xxx) ,最後輸出結果爲[object Type]
2,類型轉換
分爲強制類型轉換和隱式類型轉換
哪些會發生隱式類型轉換:數字運算符(‘+’,‘-’),“==”,if條件判斷會轉換成Boolean等
轉Boolean時,undefined,null,0,-0,NaN均爲false
轉爲對象時,會先調用valueOf,然後調用toString方法,也可以重寫Symbol.toPrimitive方法,它的優先級高於前兩個
加法運算,只要一方是String,另一方一會轉成String,其他運算只要一方是數字,另一方也會轉換成數字
特殊值:Number(undefined) //NaN
Number(null) //0
parseInt(true) //NaN
eg:
1, 'a'++'b'==aNaN
//+'b'爲NaN,所以結果爲aNaN
2, [1,2]+[2,1]=1,22,1
//1,先調用toString方法,[1,2].toString() // '1,2'
// [2,1].toString() // '2,1'
//2,'1,2'+'2,1'='1,22,1'
js數組轉字符串
toString方法(注意undefined和null不能用toString方法)
eg:
var list=['a','b','c','d'];
list.toString() //"a,b,c,d"
join()方法
eg:
var list=['a','b','c','d'];
list.join('') //"abcd"
字符串轉數組split(' ')
eg:
var str='abc';
str.split() //['abc']
str.slpit('') //'a','b','c','d'
3,“==”
String類型進行比較時,需長度相等且相同字符在相同位置才返回true,否則返回false
若比較運算符一邊類型爲Object,另一邊爲Number或String,需用ToPrimitive來判斷object
若比較運算符一邊爲Boolean,返回ToNumber(xxx)的結果
特殊值:null==undefined //true
NaN==NaN //false
eg:
[]==![]
//[]==true,取反爲false,
//ToNumber(false)==0
//ToPrimitive([])==0
//所以,0==0爲true
4,提一下parseInt的使用
parseInt轉換成整數,但不會轉換成boolean等,且第二個參數是第一個參數的進制數
eg:
2------------10------------16
parseInt toString
var num=101010;
var test=num.parseInt(num,2);
test.toString(16)
5,常用Math方法
Math.abs() //絕對值
Math.ceil() //向上取整
Math.floor()//向下取整
Math.round() //把數四捨五入爲最接近的整數。
Math.max()
Math.min()
Math.random() //隨機數
注意js數是浮點型,所以會有精度問題
js最大值爲2的53次冪