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小時內與您取得聯系。