JavaScript 数字

JavaScript 只有一种数值类型。书写数值时既可以带小数点,也可以不带。超大或超小的数可通过科学计数法来写

<!DOCTYPE html>
<html>
<body>

<p id="demo"></p>

<script>
var a = 3.14;
var b = 3;
var c = 123e5;    // 12300000
var d = 123e-5;   // 0.00123
document.getElementById("demo").innerHTML = a + "<br>" + b+ "<br>"+c+ "<br>"+d;
</script>

</body>
</html>

JavaScript 数值始终是 64 位的浮点数

与许多其他编程语言不同,JavaScript 不会定义不同类型的数,比如整数、短的、长的、浮点的等等。

JavaScript 数值始终以双精度浮点数来存储,根据国际 IEEE 754 标准。

此格式用 64 位存储数值,其中 0 到 51 存储数字(片段),52 到 62 存储指数,63 位存储符号:

值(aka Fraction/Mantissa)

指数

符号

52 bits(0 - 51)

11 bits (52 - 62)

1 bit (63)

精度

整数(不使用指数或科学计数法)会被精确到 15 位。

小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准

使用乘除法有助于解决上面的问题

<!DOCTYPE html>
<html>
<body>


<p id="demo1"></p>
<p id="demo2"></p>
<p id="demo3"></p>
<script>
//整数(不使用指数或科学计数法)会被精确到 15 位
var x=147258369360897;
var y=4536969353485859;
document.getElementById("demo1").innerHTML=x+"<br>"+y;

//小数的最大数是 17 位,但是浮点的算数并不总是 100% 精准
var ay = 0.12 + 0.11;
document.getElementById("demo2").innerHTML=" 0.12 + 0.11="+ ay;

//使用乘除法有助于解决上面的问题
var ax=(0.12*100+0.11*100)/100;
document.getElementById("demo3").innerHTML=" 0.12 + 0.11="+ ax;

  </script>

</body>
</html>

数字和字符串相加

JavaScript 的加法和级联(concatenation)都使用 + 运算符。

数字用加法。字符串用级联。

两个数相加,结果将是一个数

var x = 10;
var y = 20;
var z = x + y;           // z 将是 30(一个数)

两个字符串相加,结果将是一个字符串的级联

var x = "10";
var y = "20";
var z = x + y;           // z 将是 1020(字符串)

一个数和一个字符串相加或者一个字符串和一个数字相加,结果也是字符串级联


var x = 10;
var y = "20";
var z = x + y;           // z 将是 1020(一个字符串)

常见的错误是认为结果应该是 30:

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript 数字</h1>

<p>一个常见的错误是期望这个结果为 30:</p>

<p id="demo"></p>

<script>
var x = 10;
var y = 20;
document.getElementById("demo").innerHTML = "结果是:" + x + y;
</script>

</body>
</html>   //结果是:1020

常见的错误是认为结果应该是 102030:

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;   //返回3030

js 从左向右进行编译。

数字字符串

JavaScript 字符串可以拥有数字内容:

var x = 100;         // x 是数字

var y = "100";       // y 是字符串

如何将字符串转换为数字

可以通过 " * " ," / ", " * "

var x = "100";
var y = "10";
var z = x / y;       // z 将是 10
var z = x * y;       // z 将是 1000
var z = x - y;      // z 将是 90
注:var z = x + y;       // z 不会是 110(而是 10010)

NaN - 非数值

NaN 属于 JavaScript 保留词,指示某个数不是合法数。尝试用一个非数字字符串进行除法会得到 NaN

var x = 100 / "Apple"; // x 将是 NaN

字符串包含数值,则结果将是数:var x = 100 / "10"; // x 将是 10

可使用全局 JavaScript 函数 isNaN() 来确定某个值是否是数

var x = 100 / "Apple";
isNaN(x);               // 返回 true,因为 x 不是数

运算中使用了 NaN,则结果也将是 NaN

var x = NaN;
var y = 5;
var z = x + y;         // z 将是 NaN

结果也许是串连接:

var x = NaN;
var y = "5";
var z = x + y;         // z 将是 NaN5

NaN 是数,typeof NaN 返回 number

var x = NaN;

document.getElementById("demo").innerHTML = typeof x; // 返回 "number"

Infinity

Infinity (或 -Infinity)是 JavaScript 在计算数时超出最大可能数范围时返回的值

<!DOCTYPE html>
<html>
<body>

<h1>JavaScript 数字</h1>

<p>Infinity (或 -Infinity)是 JavaScript 在计算数时超出最大可能数范围时返回的值:</p>

<p id="demo"></p>

<script>
var myNumber = 2; 
var txt = "";
while (myNumber != Infinity) {
   myNumber = myNumber * myNumber;
   txt = txt + myNumber + "<br>";
}
document.getElementById("demo").innerHTML = txt;
</script>

</body>
</html>

除以 0(零)也会生成 Infinity

//除以 0(零)也会生成 Infinity:
var x = 6/0;
var y = -6/0;
document.getElementById("demo4").innerHTML = x + "<br>" + y;

Infinity 是数:typeOf Infinity 返回 number

typeof Infinity; // 返回 "number"

十六进制

JavaScript 会把前缀为 0x 的数值常量解释为十六进制。

实例

var x =0xDD; // x 将是221。

绝不要用前导零写数字(比如 07)。一些 JavaScript 版本会把带有前导零的数解释为八进制。默认地,Javascript 把数显示为十进制小数。

但是您能够使用 toString() 方法把数输出为十六进制、八进制或二进制。

var myNumber = 128;
myNumber.toString(16);     // 返回 80
myNumber.toString(8);      // 返回 200
myNumber.toString(2);      // 返回 10000000

数值可以是对象

通常 JavaScript 数值是通过字面量创建的原始值:var x = 123

但是也可以通过关键词 new 定义为对象:var y = new Number(123)

实例

var x = 123;
var y = new Number(123);

// typeof x 返回 number
// typeof y 返回 object

请不要创建数值对象。这样会拖慢执行速度。

new 关键词使代码复杂化,并产生某些无法预料的结果:

当使用 == 相等运算符时,相等的数看上去相等

var x = 500; // x 是数字

var y = new Number(500); // y 是对象

document.getElementById("demo").innerHTML = (x==y);

当使用 === 相等运算符后,相等的数变为不相等,因为 === 运算符需要类型和值同时相等。

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>

<script>
var x = 500;        // x 是数字
var y = new Number(500);  // y 是对象
document.getElementById("demo").innerHTML = (x===y);
</script>

</body>
</html>

JavaScript 对象无法进行比较

<!DOCTYPE html>
<html>
<body>
<p id="demo"></p>

<script>
var x = new Number(500);  // x 是对象
var y = new Number(500);  // y 是对象
document.getElementById("demo").innerHTML = (x==y);
</script>

</body>
</html>
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值