整合营销服务商

电脑端+手机端+微信端=数据同步管理

免费咨询热线:

JavaScript 数字

avaScript 数字

  • JS 字符串方法
  • JS 数字方法

JavaScript 只有一种数值类型。

书写数值时带不带小数点均可。

JavaScript 数值

书写 JavaScript 数值既可以带小数点,也可以不带:

实例

var x = 3.14;    // 带小数点的数值
var y = 3;       // 不带小数点的数值

亲自试一试

超大或超小的数可通过科学计数法来写:

实例

var x = 123e5;    // 12300000
var y = 123e-5;   // 0.00123

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 位。

实例

var x = 999999999999999;   // x 将是 999999999999999
var y = 9999999999999999;  // y 将是 10000000000000000

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

实例

var x = 0.2 + 0.1;         // x 将是 0.30000000000000004

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

实例

var x = (0.2 * 10 + 0.1 * 10) / 10;       // x 将是 0.3

亲自试一试

数字和字符串相加

警告!!

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(一个字符串)

如果您对一个字符串和一个数字相加,结果也是字符串级联:

实例

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

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

实例

var x = 10;
var y = 20;
var z = "The result is: " + x + y;

亲自试一试

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

实例

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;

JavaScript 从左向右进行编译。

因为 x 和 y 都是数,10 + 20 将被相加。

因为 z 是字符串,30 + "30" 被级联。

数字字符串

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

var x = 100;         // x 是数字

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

在所有数字运算中,JavaScript 会尝试将字符串转换为数字:

该例如此运行:

var x = "100";
var y = "10";
var z = x / y;       // z 将是 10

该例也将如此运行:

var x = "100";
var y = "10";
var z = x * y;       // z 将是 1000

该例如此运行:

var x = "100";
var y = "10";
var z = x - y;       // z 将是 90

但是该例不会如上例般运行:

var x = "100";
var y = "10";
var z = x + y;       // z 不会是 110(而是 10010)

在最后一个例子中,JavaScript 用 + 运算符对字符串进行了级联。

NaN - 非数值

NaN 属于 JavaScript 保留词,指示某个数不是合法数。

尝试用一个非数字字符串进行除法会得到 NaN(Not a Number):

实例

var x = 100 / "Apple";  // x 将是 NaN(Not a Number)

不过,假如字符串包含数值,则结果将是数:

实例

var x = 100 / "10";     // x 将是 10

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

实例

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

要小心 NaN。假如您在数学运算中使用了 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:

实例

typeof NaN;             // 返回 "number"

亲自试一试

Infinity

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

实例

var myNumber = 2;

while (myNumber != Infinity) {          // 执行直到 Infinity
    myNumber = myNumber * myNumber;
}

除以 0(零)也会生成 Infinity:

实例

var x =  2 / 0;          // x 将是 Infinity
var y = -2 / 0;          // y 将是 -Infinity

亲自试一试

Infinity 是数:typeOf Infinity 返回 number。

实例

typeof Infinity;        // 返回 "number"

十六进制

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

实例

var x = 0xFF;             // x 将是 255

绝不要用前导零写数字(比如 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;             
var y = new Number(500);

// (x == y) 为 true,因为 x 和 y 有相等的值

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

实例

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

// (x === y) 为 false,因为 x 和 y 的类型不同

甚至更糟。对象无法进行对比:

实例

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

// (x == y) 为 false,因为对象无法比较

JavaScript 对象无法进行比较。

日常开发中,我们有时候需要判断用户输入的是数字还是字母。本文将介绍如何用JavaScript实现这一功能。

检查输入值是否是数字或字母

要判断输入值是数字还是字母,我们可以通过JavaScript获取输入框的值,然后使用isNaN函数来检查输入值是否为数字。

例如,假设我们有如下表单:

<form name="myForm">
  年龄: <input type="text" name="age">
  <input type="submit" value="提交">
</form>

我们可以通过以下JavaScript代码来获取表单,并检查age字段中是否输入了数字:

const { myForm } = document.forms;
myForm.addEventListener('submit', (e) => {
  e.preventDefault();
  const x = myForm.age.value;
  if (isNaN(x)) {
    alert("必须输入数字");
  }
});

代码详解

  1. 获取表单元素
const { myForm } = document.forms;

通过document.forms获取表单,并使用解构赋值的方式获取我们需要的myForm表单。

  1. 添加提交事件监听器
myForm.addEventListener('submit', (e) => {
    e.preventDefault();
})

使用addEventListener方法监听表单的submit事件,并在事件触发时执行回调函数。回调函数中,首先调用e.preventDefault()来阻止表单的默认提交行为。

  1. 获取输入框的值
const x = myForm.age.value;

从表单中获取age输入框的值。

  1. 检查输入值是否为数字
if (isNaN(x)) {
  alert("必须输入数字");
}

使用isNaN函数检查输入值是否为数字。如果isNaN返回true,说明输入的不是数字,此时弹出警告框提示用户“必须输入数字”。

结束

通过以上步骤,我们可以轻松地用JavaScript判断输入值是数字还是字母。isNaN函数在这里起到了关键作用,它能够有效地帮助我们识别非数字输入。在实际开发中,这种验证方式能够提高表单数据的准确性,提升用户体验。

希望这篇文章对你有所帮助,赶快试试在你的项目中实现这个功能吧!如果有任何问题或疑惑,欢迎在评论区留言讨论。

写前准备

下面是编写该方法需要用到的关键知识点:

1. charAt(index):可返回指定位置的字符。

2. substr(start, length):返回从一个指定位置开始的指定长度的字符串。

参数:

  • start: 必选项,所需截取字符串的起始位置;
  • length: 可选项,返回字符串包含的字符个数,当length<=0的时候,表示返回一个空的字符串;当length没有指定的时候,表示截取的字符串从start延续到字符串的最后。

3. substring(start, end): 返回指定字符串。

参数:

  • start: 指明子字符串的起始位置,该索引从 0 开始起算;
  • end: 指明子字符串的结束位置,该索引从 0 开始起算。

特殊情况:

只包含一个参数,则默认将该参数设为起始位子,返回从该参数起到字符串末尾的字符;

start和end两者之间以较小的作为起始,较大的作为结束,比如a.substring(1, 5)和a.substring(5, 1)返回的字符串相同;

如果start或end为NaN或者负数,则将其置为0。

具体代码

function ToString(n) {
 if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)){
 return "数据非法"; //判断数据是否大于0
 }
 var unit = "千百拾亿千百拾万千百拾元角分", str = "";
 n += "00"; 
 var indexpoint = n.indexOf('.'); // 如果是小数,截取小数点前面的位数
 if (indexpoint >= 0){
 n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2); // 若为小数,截取需要使用的unit单位
 }
 unit = unit.substr(unit.length - n.length); // 若为整数,截取需要使用的unit单位
 for (var i=0; i < n.length; i++){
 str += "零壹贰叁肆伍陆柒捌玖".charAt(n.charAt(i)) + unit.charAt(i); //遍历转化为大写的数字
 }
 return str.replace(/零(千|百|拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(万|亿|元)/g, "$1").replace(/(亿)万|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整"); // 替换掉数字里面的零字符,得到结果
}

在线测试