Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
avaScript 數(shù)字
JavaScript 只有一種數(shù)值類型。
書寫數(shù)值時(shí)帶不帶小數(shù)點(diǎn)均可。
書寫 JavaScript 數(shù)值既可以帶小數(shù)點(diǎn),也可以不帶:
var x = 3.14; // 帶小數(shù)點(diǎn)的數(shù)值
var y = 3; // 不帶小數(shù)點(diǎn)的數(shù)值
親自試一試
超大或超小的數(shù)可通過(guò)科學(xué)計(jì)數(shù)法來(lái)寫:
var x = 123e5; // 12300000
var y = 123e-5; // 0.00123
與許多其他編程語(yǔ)言不同,JavaScript 不會(huì)定義不同類型的數(shù),比如整數(shù)、短的、長(zhǎng)的、浮點(diǎn)的等等。
JavaScript 數(shù)值始終以雙精度浮點(diǎn)數(shù)來(lái)存儲(chǔ),根據(jù)國(guó)際 IEEE 754 標(biāo)準(zhǔn)。
此格式用 64 位存儲(chǔ)數(shù)值,其中 0 到 51 存儲(chǔ)數(shù)字(片段),52 到 62 存儲(chǔ)指數(shù),63 位存儲(chǔ)符號(hào):
值(aka Fraction/Mantissa)指數(shù)符號(hào)52 bits(0 - 51)11 bits (52 - 62)1 bit (63)
整數(shù)(不使用指數(shù)或科學(xué)計(jì)數(shù)法)會(huì)被精確到 15 位。
var x = 999999999999999; // x 將是 999999999999999
var y = 9999999999999999; // y 將是 10000000000000000
小數(shù)的最大數(shù)是 17 位,但是浮點(diǎn)的算數(shù)并不總是 100% 精準(zhǔn):
var x = 0.2 + 0.1; // x 將是 0.30000000000000004
使用乘除法有助于解決上面的問題:
var x = (0.2 * 10 + 0.1 * 10) / 10; // x 將是 0.3
親自試一試
JavaScript 的加法和級(jí)聯(lián)(concatenation)都使用 + 運(yùn)算符。
數(shù)字用加法。字符串用級(jí)聯(lián)。
如果您對(duì)兩個(gè)數(shù)相加,結(jié)果將是一個(gè)數(shù):
var x = 10;
var y = 20;
var z = x + y; // z 將是 30(一個(gè)數(shù))
如果對(duì)兩個(gè)字符串相加,結(jié)果將是一個(gè)字符串的級(jí)聯(lián):
var x = "10";
var y = "20";
var z = x + y; // z 將是 1020(字符串)
如果您對(duì)一個(gè)數(shù)和一個(gè)字符串相加,結(jié)果也是字符串級(jí)聯(lián):
var x = 10;
var y = "20";
var z = x + y; // z 將是 1020(一個(gè)字符串)
如果您對(duì)一個(gè)字符串和一個(gè)數(shù)字相加,結(jié)果也是字符串級(jí)聯(lián):
var x = "10";
var y = 20;
var z = x + y; // z 將是 1020(字符串)
常見的錯(cuò)誤是認(rèn)為結(jié)果應(yīng)該是 30:
var x = 10;
var y = 20;
var z = "The result is: " + x + y;
親自試一試
常見的錯(cuò)誤是認(rèn)為結(jié)果應(yīng)該是 102030:
var x = 10;
var y = 20;
var z = "30";
var result = x + y + z;
JavaScript 從左向右進(jìn)行編譯。
因?yàn)?x 和 y 都是數(shù),10 + 20 將被相加。
因?yàn)?z 是字符串,30 + "30" 被級(jí)聯(lián)。
JavaScript 字符串可以擁有數(shù)字內(nèi)容:
var x = 100; // x 是數(shù)字
var y = "100"; // y 是字符串
在所有數(shù)字運(yùn)算中,JavaScript 會(huì)嘗試將字符串轉(zhuǎn)換為數(shù)字:
該例如此運(yùn)行:
var x = "100";
var y = "10";
var z = x / y; // z 將是 10
該例也將如此運(yùn)行:
var x = "100";
var y = "10";
var z = x * y; // z 將是 1000
該例如此運(yùn)行:
var x = "100";
var y = "10";
var z = x - y; // z 將是 90
但是該例不會(huì)如上例般運(yùn)行:
var x = "100";
var y = "10";
var z = x + y; // z 不會(huì)是 110(而是 10010)
在最后一個(gè)例子中,JavaScript 用 + 運(yùn)算符對(duì)字符串進(jìn)行了級(jí)聯(lián)。
NaN 屬于 JavaScript 保留詞,指示某個(gè)數(shù)不是合法數(shù)。
嘗試用一個(gè)非數(shù)字字符串進(jìn)行除法會(huì)得到 NaN(Not a Number):
var x = 100 / "Apple"; // x 將是 NaN(Not a Number)
不過(guò),假如字符串包含數(shù)值,則結(jié)果將是數(shù):
var x = 100 / "10"; // x 將是 10
您可使用全局 JavaScript 函數(shù) isNaN() 來(lái)確定某個(gè)值是否是數(shù):
var x = 100 / "Apple";
isNaN(x); // 返回 true,因?yàn)?x 不是數(shù)
要小心 NaN。假如您在數(shù)學(xué)運(yùn)算中使用了 NaN,則結(jié)果也將是 NaN:
var x = NaN;
var y = 5;
var z = x + y; // z 將是 NaN
結(jié)果也許是串連接:
var x = NaN;
var y = "5";
var z = x + y; // z 將是 NaN5
NaN 是數(shù),typeof NaN 返回 number:
typeof NaN; // 返回 "number"
親自試一試
Infinity (或 -Infinity)是 JavaScript 在計(jì)算數(shù)時(shí)超出最大可能數(shù)范圍時(shí)返回的值。
var myNumber = 2;
while (myNumber != Infinity) { // 執(zhí)行直到 Infinity
myNumber = myNumber * myNumber;
}
除以 0(零)也會(huì)生成 Infinity:
var x = 2 / 0; // x 將是 Infinity
var y = -2 / 0; // y 將是 -Infinity
親自試一試
Infinity 是數(shù):typeOf Infinity 返回 number。
typeof Infinity; // 返回 "number"
JavaScript 會(huì)把前綴為 0x 的數(shù)值常量解釋為十六進(jìn)制。
var x = 0xFF; // x 將是 255
絕不要用前導(dǎo)零寫數(shù)字(比如 07)。
一些 JavaScript 版本會(huì)把帶有前導(dǎo)零的數(shù)解釋為八進(jìn)制。
默認(rèn)地,Javascript 把數(shù)顯示為十進(jìn)制小數(shù)。
但是您能夠使用 toString() 方法把數(shù)輸出為十六進(jìn)制、八進(jìn)制或二進(jìn)制。
var myNumber = 128;
myNumber.toString(16); // 返回 80
myNumber.toString(8); // 返回 200
myNumber.toString(2); // 返回 10000000
通常 JavaScript 數(shù)值是通過(guò)字面量創(chuàng)建的原始值:var x = 123
但是也可以通過(guò)關(guān)鍵詞 new 定義為對(duì)象:var y = new Number(123)
var x = 123;
var y = new Number(123);
// typeof x 返回 number
// typeof y 返回 object
請(qǐng)不要?jiǎng)?chuàng)建數(shù)值對(duì)象。這樣會(huì)拖慢執(zhí)行速度。
new 關(guān)鍵詞使代碼復(fù)雜化,并產(chǎn)生某些無(wú)法預(yù)料的結(jié)果:
當(dāng)使用 == 相等運(yùn)算符時(shí),相等的數(shù)看上去相等:
var x = 500;
var y = new Number(500);
// (x == y) 為 true,因?yàn)?x 和 y 有相等的值
親自試一試 當(dāng)使用 === 相等運(yùn)算符后,相等的數(shù)變?yōu)椴幌嗟龋驗(yàn)?=== 運(yùn)算符需要類型和值同時(shí)相等。
var x = 500;
var y = new Number(500);
// (x === y) 為 false,因?yàn)?x 和 y 的類型不同
甚至更糟。對(duì)象無(wú)法進(jìn)行對(duì)比:
var x = new Number(500);
var y = new Number(500);
// (x == y) 為 false,因?yàn)閷?duì)象無(wú)法比較
JavaScript 對(duì)象無(wú)法進(jìn)行比較。
日常開發(fā)中,我們有時(shí)候需要判斷用戶輸入的是數(shù)字還是字母。本文將介紹如何用JavaScript實(shí)現(xiàn)這一功能。
要判斷輸入值是數(shù)字還是字母,我們可以通過(guò)JavaScript獲取輸入框的值,然后使用isNaN函數(shù)來(lái)檢查輸入值是否為數(shù)字。
例如,假設(shè)我們有如下表單:
<form name="myForm">
年齡: <input type="text" name="age">
<input type="submit" value="提交">
</form>
我們可以通過(guò)以下JavaScript代碼來(lái)獲取表單,并檢查age字段中是否輸入了數(shù)字:
const { myForm } = document.forms;
myForm.addEventListener('submit', (e) => {
e.preventDefault();
const x = myForm.age.value;
if (isNaN(x)) {
alert("必須輸入數(shù)字");
}
});
const { myForm } = document.forms;
通過(guò)document.forms獲取表單,并使用解構(gòu)賦值的方式獲取我們需要的myForm表單。
myForm.addEventListener('submit', (e) => {
e.preventDefault();
})
使用addEventListener方法監(jiān)聽表單的submit事件,并在事件觸發(fā)時(shí)執(zhí)行回調(diào)函數(shù)。回調(diào)函數(shù)中,首先調(diào)用e.preventDefault()來(lái)阻止表單的默認(rèn)提交行為。
const x = myForm.age.value;
從表單中獲取age輸入框的值。
if (isNaN(x)) {
alert("必須輸入數(shù)字");
}
使用isNaN函數(shù)檢查輸入值是否為數(shù)字。如果isNaN返回true,說(shuō)明輸入的不是數(shù)字,此時(shí)彈出警告框提示用戶“必須輸入數(shù)字”。
通過(guò)以上步驟,我們可以輕松地用JavaScript判斷輸入值是數(shù)字還是字母。isNaN函數(shù)在這里起到了關(guān)鍵作用,它能夠有效地幫助我們識(shí)別非數(shù)字輸入。在實(shí)際開發(fā)中,這種驗(yàn)證方式能夠提高表單數(shù)據(jù)的準(zhǔn)確性,提升用戶體驗(yàn)。
希望這篇文章對(duì)你有所幫助,趕快試試在你的項(xiàng)目中實(shí)現(xiàn)這個(gè)功能吧!如果有任何問題或疑惑,歡迎在評(píng)論區(qū)留言討論。
寫前準(zhǔn)備
下面是編寫該方法需要用到的關(guān)鍵知識(shí)點(diǎn):
1. charAt(index):可返回指定位置的字符。
2. substr(start, length):返回從一個(gè)指定位置開始的指定長(zhǎng)度的字符串。
參數(shù):
3. substring(start, end): 返回指定字符串。
參數(shù):
特殊情況:
只包含一個(gè)參數(shù),則默認(rèn)將該參數(shù)設(shè)為起始位子,返回從該參數(shù)起到字符串末尾的字符;
start和end兩者之間以較小的作為起始,較大的作為結(jié)束,比如a.substring(1, 5)和a.substring(5, 1)返回的字符串相同;
如果start或end為NaN或者負(fù)數(shù),則將其置為0。
具體代碼
function ToString(n) { if (!/^(0|[1-9]\d*)(\.\d+)?$/.test(n)){ return "數(shù)據(jù)非法"; //判斷數(shù)據(jù)是否大于0 } var unit = "千百拾億千百拾萬(wàn)千百拾元角分", str = ""; n += "00"; var indexpoint = n.indexOf('.'); // 如果是小數(shù),截取小數(shù)點(diǎn)前面的位數(shù) if (indexpoint >= 0){ n = n.substring(0, indexpoint) + n.substr(indexpoint+1, 2); // 若為小數(shù),截取需要使用的unit單位 } unit = unit.substr(unit.length - n.length); // 若為整數(shù),截取需要使用的unit單位 for (var i=0; i < n.length; i++){ str += "零壹貳叁肆伍陸柒捌玖".charAt(n.charAt(i)) + unit.charAt(i); //遍歷轉(zhuǎn)化為大寫的數(shù)字 } return str.replace(/零(千|百|(zhì)拾|角)/g, "零").replace(/(零)+/g, "零").replace(/零(萬(wàn)|億|元)/g, "$1").replace(/(億)萬(wàn)|壹(拾)/g, "$1$2").replace(/^元零?|零分/g, "").replace(/元$/g, "元整"); // 替換掉數(shù)字里面的零字符,得到結(jié)果 }
在線測(cè)試
*請(qǐng)認(rèn)真填寫需求信息,我們會(huì)在24小時(shí)內(nèi)與您取得聯(lián)系。