JavaScript只有一种数字类型。 可以带小数,也可以不带小数。
声明创建十进制数字
创建整数与小数
var x=3;
var y=3.14;
alert(x);
alert(y);
可以使用科学表示法创建特大或特小数字
e5表示10的5次方:1010101010:100000
var x=123e5;
var y=123e-5;
alert(x);
alert(y);
声明创建不同进制的数字
如果数字常量以0x开头,则JavaScript会将其解释为十六进制。
var x = 0xFF;
document.write(x);
result:255
切勿写一个以零开头的数字(例如07)。
如果某些JavaScript版本以数字开头,则将数字解释为八进制。
默认情况下,JavaScript将数字显示为以10为基数的小数。
不过使用toString()方法输出数字可以设定输出的进制
十六进制为基数16。十进制为基数10。八进制为基数8。二进制为基数2。
JavaScript数字始终是64位浮点
与许多其他编程语言不同,JavaScript不会定义不同类型的数字的数据类型,例如整数int,短整数short,长整数long,浮点数float等。
在所有情况下,您都将获得“数字Number”这个数据类型。 不论您的值是整数(小还是大)还是十进制数(又是大还是小,需要科学记数法),JavaScript语言仅公开一种类型Number来表示所有这些值。
typeof 1234;
"number"
typeof 2e32;
"number"
typeof 12.34;
"number"
typeof 12.34e56;
"number"
精度
整数(不带句点或指数表示法的数字)的精度最高为15位数字。
var x = 999999999999999; // x will be 999999999999999(精确到15位)
var y = 9999999999999999; // y will be 10000000000000000(不精确)
小数位数的最大值是17,但是浮点算术并不总是100%准确的:
To solve the problem above, it helps to multiply and divide:
var x = 0.2,y=0.1;
alert(x+y);
alert(x*10+y*10)/10;
Number操作
WARNING !!
JavaScript uses the + operator for both addition(加法) and concatenation(串联).
Numbers are added(数字相加). Strings are concatenated.(字符串串联)
如果将两个数字相加,则结果将是一个数字:
如果添加两个字符串,结果将是字符串串联:
如果添加数字和字符串,结果将是字符串串联:
如果添加字符串和数字,结果将是字符串串联:
JavaScript解释器从左到右起作用(运算顺序从左到右)。
数字值是否相等的比较
== and ===
两个数字的值如果相等如果双等号比较返回true,全等号比较也返回true,
var mynum=255;
var y=new Number(255);
alert(mynum==y);//true
alert(mynum===y);//false
特殊Number:值为数字的字符串
JavaScript字符串可以包含数字内容:
var x = 100; // x is a number
var y = "100"; // y is a string
JavaScript将尝试在所有数字运算中将字符串转换为数字:
数字字符串如果使用数字运算则会自动转换为数字
var x = "100";
var y = "10";
var z = x / y; // z will be 10
alert(z);
alert(typeof z);//z is number here
两个包含数字的字符串相加仍然是字符串串联(乘,除,减的情况下,数字字符串都是作为数字参加操作)
var x = "100";
var y = "10";
var z = x + y; //10010
alert(z);
alert(typeof z);//z is string here
特殊Number:NaN(非数字)
NaN是JavaScript保留字,表示数字不是合法数字。
NaN is a number: typeof NaN returns number:
NaN与数字进行算术运算将导致NaN(非数字):
NaN与字符串相加返回字符串
您可以使用全局JavaScript函数isNaN()来确定值是否为数字:
提防NaN。 如果在数学运算中使用NaN,则结果也将为NaN:
特殊Number:Infinity(最大最小值)
Infinity(或-Infinity)是如果您计算的数字超出最大可能数,JavaScript将返回的值。
var myNum=2;
txt="";
while(myNum!=Infinity){
myNum=myNum*myNum;
txt+=myNum+"<br>";
};
document.write(txt);
result:
4
16
256
65536
4294967296
18446744073709552000
3.402823669209385e+38
1.157920892373162e+77
1.3407807929942597e+154
Infinity
除以0(零)也会生成无穷大:
var x=2/0;
var y=-2/0;
document.write(x);
document.write("<br>");
document.write(y);
result:
Infinity
-Infinity
Infinity的数据类型是Number
document.write(2/0);
document.write("<br>");
document.write(typeof (3/0));
result:
Infinity
number
数字可以是对象
通常,JavaScript数字是根据文字创建的原始值:
但是数字也可以使用关键字new定义为对象:
document.write(typeof mynum+"<br>");
document.write(typeof y+"<br>");
result:
number
object
Number方法
原始值(例如3.14或2014)不能具有属性和方法(因为它们不是对象)。
但是对于JavaScript,方法和属性也可用于原始值,因为JavaScript在执行方法和属性时会将原始值视为对象。
toString()方法:将数字转换为字符串
var x=123;
var xx=x.toString();
alert(typeof xx);
所有数字Number方法均可用于任何类型的数字(文字,变量或表达式):
toExponential() 转换成指数表示法
var x=9.786;
alert(x.toExponential(2));
var y=9786.83;
alert(y.toExponential(3));
toExponential的参数是可选的。 如果未指定,JavaScript将不会舍入该数字。
toFixed()方法
toFixed()返回一个字符串,该数字用指定的小数位数书写:
toPrecision()方法
toPrecision()返回一个字符串,该字符串具有指定长度的数字:(用于精确数字的总长度)
valueOf方法
数字可以是原始值,也可以是对象,所以valueOf可以获取数字对象的值
The valueOf() method is used internally in JavaScript to convert Number objects to primitive values.
There is no reason to use it in your code.
所有的数据类型都有valueOf方法和toString()方法
var x=new Number("200");
alert(x);
alert(x.valueOf());//这个方法似乎有点多此一举
将变量转换为数字
有3种JavaScript方法可用于将变量转换为数字:
- Number()方法
- parseInt()方法
- parseFloat()方法
这些方法不是数字方法,而是全局JavaScript方法。
Number()可用于将JavaScript变量转换为数字(If the number cannot be converted, NaN (Not a Number) is returned.):
Number()也可以将日期转换为数字:
parseInt()解析字符串并返回整数。 允许有空格。 仅返回第一个数字:
parseFloat()解析字符串并返回数字。 允许有空格。 仅返回第一个数字:
Number属性
- 非数字 NaN
- 无穷大 MAX_VALUE
- 无穷小 MIN_VALUE
- 无穷大溢出 Infinity
- 无穷小溢出 -Infinity
var min=Number.MIN_VALUE;
document.write(min+"<br>");
var x=Number.MAX_VALUE;
document.write(x+"<br>");
var y=1/0;
document.write(y+"<br>");
var z=-1/0;
document.write(z+"<br>");
/*
result:
5e-324
1.7976931348623157e+308
Infinity
-Infinity
*/
Number属性不能用于变量
Number属性属于JavaScript的Number对象包装器,称为Number。
这些属性只能作为Number.MAX_VALUE访问。
使用myNumber.MAX_VALUE(其中myNumber是变量,表达式或值)将返回未定义undefined:
var x=123;
alert(x.MAX_VALUE);//undefined