avaScript 数字
JavaScript 只有一种数值类型。
书写数值时带不带小数点均可。
书写 JavaScript 数值既可以带小数点,也可以不带:
var x = 3.14; // 带小数点的数值
var y = 3; // 不带小数点的数值
亲自试一试
超大或超小的数可通过科学计数法来写:
var x = 123e5; // 12300000
var y = 123e-5; // 0.00123
与许多其他编程语言不同,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 属于 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)是 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("必须输入数字");
}
});
const { myForm } = document.forms;
通过document.forms获取表单,并使用解构赋值的方式获取我们需要的myForm表单。
myForm.addEventListener('submit', (e) => {
e.preventDefault();
})
使用addEventListener方法监听表单的submit事件,并在事件触发时执行回调函数。回调函数中,首先调用e.preventDefault()来阻止表单的默认提交行为。
const x = myForm.age.value;
从表单中获取age输入框的值。
if (isNaN(x)) {
alert("必须输入数字");
}
使用isNaN函数检查输入值是否为数字。如果isNaN返回true,说明输入的不是数字,此时弹出警告框提示用户“必须输入数字”。
通过以上步骤,我们可以轻松地用JavaScript判断输入值是数字还是字母。isNaN函数在这里起到了关键作用,它能够有效地帮助我们识别非数字输入。在实际开发中,这种验证方式能够提高表单数据的准确性,提升用户体验。
希望这篇文章对你有所帮助,赶快试试在你的项目中实现这个功能吧!如果有任何问题或疑惑,欢迎在评论区留言讨论。
写前准备
下面是编写该方法需要用到的关键知识点:
1. charAt(index):可返回指定位置的字符。
2. substr(start, length):返回从一个指定位置开始的指定长度的字符串。
参数:
3. substring(start, end): 返回指定字符串。
参数:
特殊情况:
只包含一个参数,则默认将该参数设为起始位子,返回从该参数起到字符串末尾的字符;
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, "元整"); // 替换掉数字里面的零字符,得到结果 }
在线测试
*请认真填写需求信息,我们会在24小时内与您取得联系。