Javascript高级程序设计第三版-笔记
1、JS数值最大值最小值:
>Number.MIN_VALUE <5e-324 >Number.MAX_VALUE <1.7976931348623157e+308
判断数值是不是有穷的,可以用isFinite()来判断
坑:1、对浮点数进行高精度计算时,需要把小数变成整数再计算,因为JS中0.1+0.2=0.30000000000000004,可能会有误差。isFinite(0.1+0.2)//true。isFinite(0.1)//true。
2、NaN
任何涉及NaN的操作都会返回NaN,NaN与任何值都不相等,包括本身。isNaN()判断是否为NAN。isNaN(NaN)//true。isNaN("10")//false。isNaN("dusk")//false。0/0返回NaN。
3、数字转换
Number()// Number("") 0 Number("12a") NaN ParseInt()// ParseInt("") NaN ParseInt("12a") 12 ParseFloat()
4、toString()
null 和 undefined 没有toString放啊。 var a = 10;a.toString("2")//1010 10转成2进制1010
在不知道值是否为null or undefined的时候,可以用String()来转换为字符串。
5、位运算
~按位非 (数值取负后-1) 、& 按位与 、| 按位或 、<<左移 、 >>右移 、 >>>无符号右移 (可移动负数的符号位1)
6、!运算
!NaN //true !null //true !"" //true !undefined
7、 比较运算
NaN和任何数值比,都是false
8、switch
switch用的是全等操作符,不会发生类型转换(10不等于“10”)
9、块级作用域的坑 for循环结束后,i 没被销毁
for(var i = 0 ; i < 10 ; i++){ dosomething(i); } alert(i);// 10
10、作用域链上的变量查询
var a = 1; function foo(){ var a = 2; return a; } alert(foo());// 2 //优先使用局部变量,因查找作用域链是从本方法一致往上查找,直到查找到window的全局作用域。当找到后就会停止,所以在找到a=2时就停止了。如果想用a=1,必须window.a
11、数组
a = [1,2,3] b = a; a[0] = 2; alert()//a=>2,2,3 b=>2,2,3 Concat a = [1,2,3] b = a.concat() a[0] = 2; alert()//a=>2,2,3 b=>1,2,3