js数字
- JavaScript不区分整数值和浮点数值,JavaScript中的所有数字均用浮点数值表示。
- JavaScript中的算术运算在溢出(overflow)、下溢(underflow)或被零整除时不会报错。
- overflow === infinity
- Underflow === 0
- 被零整除在JavaScript并不报错:它只是简单的返回无穷大(Infinity)或负无穷大(-Infinity)。
- 零除以零是没有意义的===NaN
二进制浮点数的编程语言中
1 var x = .3 - .2; 2 var y = .2 - .1; 3 4 x == y; // ==> false: 两值不相等! 5 x == .1; // ==> false; 6 y == .1; // ==> true;
- 由于舍入误差,0.3和0.2之间的近似差值实际上并不等于0.2和0.1之间的近似差值。这个问题并不只在JavaScript中才会出现,理解这一点非常重要:在任何使用二进制浮点数的编程语言中都会有这个问题。
下面这些值会被转换成false,所有其他值,包括所有对象(数组)都会转换成true
- undefined
- null
- 0
- -0
- NaN
- ""
typeof可以检测给定变量的数据类型,可能的返回值有:
1 var s = "test"; 2 var S = new String(s); 3 typeof(s); // ==> "string" 4 typeof(S); // ==> "object"
1. 'undefined' --- 这个值未定义;
2. 'boolean' --- 这个值是布尔值;
3. 'string' --- 这个值是字符串;
4. 'number' --- 这个值是数值;
6. 'function' --- 这个值是函数;
5. 'object' --- 这个值是对象或null;(单独判断)
数据类型转换
var n = 1 - "x"; // ==> NaN:字符串"x"无法转换为数字 n + " objects" // ==> "NaN objects":NaN转换为字符串"NaN" var n = 17; binary_string = n.toString(2); // 转换为 “10001” octal_string = "0" + n.toString(8); // 转换为 “021” hex_string = "0x" + n.toString(16); // 转换为 “0x11” // parseInt()可以接收第二个可选参数,这个参数指定数字转换的基数,合法的取值范围是2~36: parseInt("3 blind mice"); // ==> 3 parseInt("0xFF"); // ==> 255 parseIntFloat(".1"); // ==> NaN:整数不能以"."开始 parseInt("11", 2); // ==> 3 parseInt("077", 10); // ==> 77
- "=="等于运算符在判断两个值是否相等时会做类型转换,"==="恒等运算符在判断相等时并未做任何类型转换。
Number类为数字到字符串的类型转换场景定义了三个方法:
- toFixed()根据小数点后的指定位数将数字转换为字符串,它从不使用指数计数法;
- toExponential()使用指数计数法将数字转换为指数形式的字符串;
- toPrecision()根据指定的有效数字位数将数字转换为字符串。如果有效数字的位数少于数字整数部分的位数,则转换成指数形式。