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次幂