1 Number 的特点
★ 为64位浮点,与许多其他编程语言不同,
JavaScript不会定义不同类型的数字,如整数,短,长,浮点等。
JavaScript号码始终作为双精度浮点数存储,遵循国际IEEE 754标准。
★ 整数(无周期或指数符号的数字)精确到15位数
var x = 999999999999999; // x will be 999999999999999
var y = 9999999999999999; // y will be 10000000000000000
★ 最小小数位数为17,但浮点运算并不总是100%准确:
var x = 0.2 + 0.1; // x will be 0.30000000000000004
解决方法 :
var x = (0.2 * 10 + 0.1 * 10) / 10; // x will be 0.3
1.1 数字的 + 计算
// 当其中一个值为字符串时,数字将会转化成字符串再进行字符串相加
★ eg :
var x = 10;
var y = 20;
var z = x + y; // 30 number
★ eg :
var x = "10";
var y = "20";
var z = x + y; // 1020 string
★ eg :
var x = 10;
var y = 20;
var z = "The result is: " + x + y; // The result is: 1020 string
★ eg :
var x = 10;
var y = 20;
var z = "30";
var result = x + y + z; // 3030 string
1.2 数字的 - , * , / 计算
// 两个值都为数字串(如 "150"),则先转换成number再进行计算,如果一个值为非数字串("你"),
则转化不了结果为NaN,NaN与任何值计算都为NaN
★ -
var x = "100";
var y = "10";
var z = x - y; // 90 number
★ *
var x = "100";
var y = 10;
var z = x * y; // 1000 number
★ /
var x = 100;
var y = "10";
var z = x / y; // 10 number
1.3 NaN - 不是数字 Not-a-Number
// NaN是一个JavaScript保留字,表示一个数字不是合法的号码。
★ eg :
var x = 100 / "Apple"; // NaN (Not a Number)
★ eg :
var x = NaN;
var y = "5";
var z = x + y; // "NaN5" string
★ eg :
typeof NaN; // returns "number"
★ isNaN()
var x = 100 / "Apple";
isNaN(x); // 返回true,因为x不是一个数字。
1.4 无穷 infinity
★ eg :
// 正无穷大(或-Infinity)是如果您计算最大可能数字之外的数字,JavaScript将返回值。
var myNumber = 2;
while (myNumber != Infinity) { // Execute until Infinity
myNumber = myNumber * myNumber;
}
// Infinity
★ eg :
// 除以0也产生无限大:
var x = 2 / 0; // Infinity 正无穷
var y = -2 / 0; // -Infinity 负无穷
★ eg :
// Infinity是一个数字:无穷大的typeof返回数字。
typeof Infinity; // returns "number"
1.5 十六进制
★ eg :
// 如果数字常量前面加上0x,则JavaScript将数字常量解释为十六进制。
var x = 0xFF; // 255
★ 默认情况下,JavaScript将显示数字作为十进制。
但是您可以使用toString()方法输出数字作为基数16(十六进制),基数8(八进制)或基数2(二进制)。
var a = 128;
a.toString(16); // returns 80 十六进制
a.toString(8); // returns 200 八进制
a.toString(2); // returns 10000000 二进制
2 Number 的方法
★ toString() // 数字转换为字符串
var a = 123;
var b = a.toString();
console.log(b);// 123
console.log(typeof b); // string
★ toExponential()// 返回一个字符串,数字用指数符号舍入并写入
var x = 9.656;
x.toExponential(2); // returns 9.66e+0
x.toExponential(4); // returns 9.6560e+0
★ toFixed() // 返回一个字符串 指定小数位数,并四舍五入 (修改小数位数)
var x = 9.656;
x.toFixed(0); // returns 10
x.toFixed(2); // returns 9.66
x.toFixed(4); // returns 9.6560
x.toFixed(6); // returns 9.656000
★ toPrecision()// 返回一个字符串,数字用指定的长度写 (修改总位数)
var x = 9.656;
x.toPrecision(); // returns 9.656
x.toPrecision(2); // returns 9.7
x.toPrecision(4); // returns 9.656
x.toPrecision(6); // returns 9.65600
★ valueOf()// 将Number对象转换为原始值 (typeof = number)
var x = 123;
x.valueOf(); // returns 123 from variable x
(123).valueOf(); // returns 123 from literal 123
(100 + 23).valueOf(); // returns 123 from expression 100 + 23
在JavaScript中,一个数字可以是一个原始值(typeof = number)或一个对象(typeof = object)。
valueOf()方法在JavaScript中用于将Number对象转换为原始值。
所有JavaScript数据类型都具有valueOf()和toString()方法。
3 String 转化为 Number
★ Number() // 可用于将JavaScript变量转换为数字
x = true;
Number(x); // returns 1
x = false;
Number(x); // returns 0
x = new Date();
Number(x); // returns 1404568027739, 在Date()中使用Number()方法返回自1.1.1970以来的毫秒数
x = "10"
Number(x); // returns 10
x = "10 20"
Number(x); // returns NaN 只能转换纯数字文本.
★ parseInt() // 解析一个字符串并返回一个整数, 允许空格, 只有第一个数字被返回
parseInt("10"); // returns 10
parseInt("10.33"); // returns 10
parseInt("10 20 30"); // returns 10
parseInt("10 years"); // returns 10
parseInt("years 10"); // returns NaN 如果数字无法转换,则返回NaN(不是数字)。
★ parseFloat()// 解析一个字符串并返回一个浮点型数值, 允许空格, 只有第一个数字被返回
parseFloat("10"); // returns 10
parseFloat("10.33"); // returns 10.33
parseFloat("10 20 30"); // returns 10
parseFloat("10 years"); // returns 10
parseFloat("years 10"); // returns NaN
4 Number 属性(常数)
★ MAX_VALUE // 返回Number的最大值
var x = Number.MAX_VALUE;
console.log(x); // 1.7976931348623157e+308
★ MIN_VALUE // 返回Number的最小值
var x = Number.MIN_VALUE;
console.log(x); // 5e-324
★ NEGATIVE_INFINITY // 返回-Infinity 负无穷大 (返回溢出)
★ POSITIVE_INFINITY // 返回Infinity 正无穷大 (返回溢出)
★ NaN 表示一个 "Not-a-Number" (非数字)
var x = "50p";
console.log(isNaN(x)); // true
5 Math 对象
5.1 Math 方法
★ Math.PI; // returns 3.141592653589793
★ Math.round(x) // 返回x四舍五入之后的整数 (无小数位)
Math.round(4.7); // returns 5
Math.round(4.4); // returns 4
★ Math.pow(x,y)// 将x的值返回给y的幂
Math.pow(8, 2); // returns 64
★ Math.sqrt(x) // 返回x的平方根
Math.sqrt(64); // returns 8
★ Math.abs(x) // 返回x的绝对(正)值:
Math.abs(-4.7); // returns 4.7
★ Math.ceil(x) // 返回x的值四舍五入向上到其最接近的整数
Math.ceil(4.4); // returns 5
★ Math.floor(x) // 返回x的值四舍五入向下到其最接近的整数:
Math.floor(4.7); // returns 4
★ Math.sin(x) // 返回角度x的正弦(-1和1之间的值)(以弧度表示)
如果要使用度数而不是弧度,则必须将度数转换为弧度:
角度弧度=角度(度)x PI / 180
Math.sin(90 * Math.PI / 180); // returns 1 (the sine of 90 degrees)
★ Math.cos(x) // 返回角度x(以弧度表示)的余弦(-1和1之间的值)
如果要使用度数而不是弧度,则必须将度数转换为弧度:
角度弧度=角度(度)x PI / 180。
Math.cos(0 * Math.PI / 180); // returns 1 (the cos of 0 degrees)
★ Math.min()和 Math.max()// 可用于查找参数列表中的最低或最高值
Math.min(0, 150, 30, 20, -8, -200); // returns -200
Math.max(0, 150, 30, 20, -8, -200); // returns 150
★ Math.random() // 返回0(含)和1(排除)之间的随机数
console.log(Math.round(Math.random()*10)); // 返回0~10之间的随机整数
5.2 Math 属性 (常数)
JavaScript提供了可以使用Math对象访问的8个数学常数:
Math.E // 返回自然对数 2.718281828459045
Math.PI //返回圆周率 3.141592653589793
Math.SQRT2 //返回2的平方根 1.4142135623730951
Math.SQRT1_2 //返回1 / 2的平方根 0.7071067811865476
Math.LN2 //返回2的自然对数 0.6931471805599453
Math.LN10 //返回10的自然对数 2.302585092994046
Math.LOG2E //返回以2为底的对数E 1.4426950408889634
Math.LOG10E //返回以10为底的对数E 0.4342944819032518
5.3 Math 构造函数
与其他全局对象不同,Math对象没有构造函数。方法和属性是静态的。
可以使用所有方法和属性(常量),而不必首先创建Math对象。
5.4 Math 方法汇总
abs(x) 返回x的绝对值
acos(x) 返回x的余弦,弧度
asin(x) 返回x的反正弦,弧度
atan(x) 返回x的反正切值之间-π/ 2和π/ 2弧度
atan2(y, x) 返回参数的反正切的商
ceil(x) 返回x的值四舍五入向上到其最接近的整数
floor(x) 返回x的值四舍五入向下到其最接近的整数
cos(x) 返回x的余弦(x为弧度)
exp(x) 返回前值 Ex
log(x) 返回的自然对数(底数)x
max(x, y, z, ..., n) 返回数的最高值
min(x, y, z, ..., n) 返回数字的最低值
pow(x, y) 将x的值返回给y的幂
sqrt(x) 返回x的平方根
random() 返回一个0到1之间的随机数
round(x) 返回x的值舍入到最接近的整数
sin(x) 返回x的正弦(x为弧度)
sqrt(x) 返回x的平方根
tan(x) 返回一个角的切线