1.在一个函数中定义一个变量我们通常是这样定义的 var message = ‘hi’,该变量使用var操作符定义会使得该变量的作用域属于局部变量,这个变量在函数退出后就会被销毁,例如:
function test(){
var message = 'hi';
}
test();
alert(message); //error!
这里的变量使用var定义,当离开函数后,该变量会被销毁,要想不被销毁,可以去掉var,那么该变量就会变成全局变量,函数调用完后,该变量还会存在,但是不建议这样做,会污染全局空间。
2.Number类型中的浮点数值
var floatNum1 = 1.; //小数点后面没有数字----解析为1
var floatNum2 = 10.0; //整数----解析为10
由于保存浮点数需要的内存是整数值的2倍,因此如果浮点数值本身表示的是一个整数(如1.0),那么该值就会被转换为整数。
我们知道浮点数的最高精度是17位小数,但是计算的时候其精确度远远不如整数,例如0.1+0.3不等于0.3,而是0.30000000000000004。如:
if(a + b == 0.3) {
alert('You got 0.3');
}
这是不对的,和不等以0.3,但是如果这两个数是0.05和0.25或者0.15和0.15都不会有问题,因此永远不要测试某个特定的浮点数值。
3.数值转换中的parseInt()函数
var num1 = parseInt('1234blue'); //1234
var num2 = parseInt(''); //NaN
var num3 = parseInt('0xA'); //10 (十六进制)
var num4 = parseInt(22.5); //22
var num5 = parseInt('070'); //56 (八进制)
var num6 = parseInt('70'); //70 (十进制)
var num7 = parseInt('0xf'); //15 (十六进制)
在使用parseInt()解析八进制字面量的字符串时,ECMAScript3和ECMAScript5存在分歧,例如:
例子中的var num5 = parseInt(‘070’); ECMAScript3认为是56(八进制),ECMAScript5认为是70(十进制)。
为了消除上面的误导,可以为这个函数添加第二个参数:转换时使用的基数(即多少进制)。例如:
var num = parseInt('AF', 16); //175
var num1 = parseInt('AF'); //NaN
转换成十六进制的数字,不加第二个参数的话,会出现NaN。