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); // အားမှန်သည် ဟု ပြန်ဖုန်သည်၊ ကိုယ့် 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
)သည် ဂျူနိုက်စတာ ကျော်ကြီး အချက်အရာ ကို အစိတ်အခဲ့ အပိုဆုံး အကြား ကျော်ကြီး အစိတ်အခဲ့ အဖြစ် ကြိုတင် ပြန်လည် ပြောင်းလဲ ပြီး အစိတ်အခဲ့ အပိုဆုံး အကြား အစိတ်အခဲ့ ဖြစ်သည်
实例
var myNumber = 2; while (myNumber != 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"
အသံထွက် ၁၆
ဂျူနိုက်စတာ ကို အသံထွက် ၁၆ အပြားတိုက် ဖြင့် 0x
အစိတ်အခဲ့ အကြိမ်အချက်အရာ ကို အသံထွက် ၁၆ အပြားတိုက် အစိတ်အခဲ့ အဖြစ် အစိတ်အခဲ့ဖြစ်သည်
实例
var x = 0xFF; // x သည် 255 ဖြစ်လိမ့်မည်
အစွဲဖြင့် အစိတ်အခဲ့ ကို မသုံးပြုချေ (နောက်ဆုံး 07)
အချို့ 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 对象无法进行比较。