使用Number()转换时:javascript
+
,-
,.
)外都会转为NaN,十六进制时,字符串包含任何非数字字符都返回NaN使用parseInt()转换时:java
var num1 = parseInt("10",2); //2 按二进制解析 var num2 = parseInt("10",8); //8 按八进制解析 var num3 = parseInt("10",10); //10 按十进制解析 var num4 = parseInt("10",16); //16 按十六进制解析
使用parseFloat()转换时:浏览器
.
var num = parseFloat("0xA"); //0 var num = parseInt("0xA"); //10
var num = parseFloat("2.125e7"); //31250000
此条适用于整数,咱们能够用toString()返回任意进制的整数。函数
var num = 10; alert(num.toString()); //"10" alert(num.toString(9)); //"11" alert(num.toString(16)); //"a"
在对NaN和Infinity使用位操做符时,这两个数值都会被当成0来处理。 若是对于非数值应用位操做符,会先使用Number()函数将该值转换为一个数值。编码
还有一点要注意的就是负数的无符号右移,无符号右移是以0来填充空位,而不像有符号右移以符号位填充空位,因此对正数的无符号右移和有符号右移结果相同,但对负数就不一样了。无符号右移操做会把负数的二进制码当成正数的二进制码,并且负数是以补码形式表示,所以会致使无符号右移后的结果相差很是大。code
var oldValue = -64; var newValue = oldValue >>> 5
var s1 = "01", s2 = "1.1", s3 = "z", b = false, o = { valueOf: function(){ return -1; } }; s1 = +s1; //1 +改成-: -1 s2 = +s2; //1.1 -1.1 s3 = +s3; //NaN NaN b = +b; //0 0 o = -o; //-1 1
var num1 =Infinity, num2 = 0, num3 = -2 ,num4 = -Infinity; alert(num1 * num2); //NaN alert(num1 * num3); //-Infinity alert(num1 * num4); //-Infinity
Infinity%2=NaN; 2%-Infinity=2; 0%Infinity=0; //只要被除数为0,除数不为NaN,结果都为0 Infinity%0=NaN; //被除数能够为任意数,除数只要为0,结果都为NaN Infinity%Infinity=NaN
Infinity + -Infinity = NaN; var p = { valueOf: function () { return -1; } }; var num =1; var result = num +p; alert(result); // 0 相加 var p = { valueOf: function () { return "not a num"; } }; var num =1; var result = num +p; alert(result); //1not a num 字符串链接
Infinity - Infinity = NaN; -Infinity - -Infinity = NaN;
关系操做符就是小于(<)、大于(>)、小于等于(<=)和大于等于(>=)对象
var result = "a" < 3; //false a转换为NaN var result = "a" >= 3; //false 任何数和NaN进行相比都为false