原文:
幾年前,當spidermonkey實現了嚴格模式的時候.我了解到,嚴格模式禁用了八進位制整數字面量的寫法.因為有證據表明,一些新手會利用前導0來對齊多行中的數字,從而導致意想不到的結果:
var sum = 015 + //相當於十進位制的13,而不是15
197 +
001; //
反正是1
console.log(sum) //
相加得到的和是211,而不是新手認為的213
但是仍有一些開發者們需要八進位制整數(尤其是那些mozilla擴充套件開發者和node.js開發者),最常見的就是用在處理檔案許可權(755,644這些)的時候.因此,es6又增加了一種新的八進位制整數字面量寫法.和十六進製制的0x
或0x類似,新的八進位制整數使用
0o或
0o作為前導標識,後面跟若干個八進位制的數字字元(0到7)
,這種寫法就不會再困擾新手了:
var default_perms = 0o644; //嚴格模式下也可用
值得注意的一點是,0o字首
的可讀性太差了(0和大寫的o長的太像了,很難區分),我在esdiscuss上提出了這個問題,希望能禁用掉大寫的0o字首,不過tc39目前的決定還是認為一致性應該大於可讀性(一致性指的是要和0x以及0b等一致).我認為這個決定是值得商榷的,我推薦你永遠不要使用大寫的0o.
另外,一些開發者們還需要二進位制的整數字面量寫法,這種寫法ecmascript從來沒有支援過.es6支援了這種寫法,和八進位制以及十六進製制類似,使用0b或0b字首:
var flt_signbit = 0b10000000000000000000000000000000;var flt_exponent = 0b01111111100000000000000000000000;
var flt_mantissa = 0b00000000011111111111111111111111;
目前firefox aurora已經實現了這兩個語法,如果你更富有冒險精神,還可以使用更新的firefox nightly.
八進位制轉二進位制
位 bit 一位二進位制數,又稱位元 位元組 byte 1b 8b 記憶體儲存的最小單元 字長 同一時間內,計算機能處理的二進位制位數 字長決定了計算機的運算精度,字長越長,計算機的運算精度就越高。因此,高效能的計算機,其字長較長,而效能較差的計算機,其字長相對要短一些。其次,字長決定了指令直接定址...
ES6 數值的擴充套件 二進位制和八進位制表示法
es6 提供了二進位制和八進位制數值的最新的寫法,分別用字首 0b 0b 和 0o 0o 表示。0b111110111 503 true 0o767 503 true其實從 es5 開始,在嚴格模式中,八進位制就不再允許使用字首 0 表示,es6 進一步明確要使用字首 0o 表示。非嚴格模式 fun...
二進位制 八進位制和十六進製制
我們平時使用的數字都是由 0 9 共十個數字組成的,例如 1 9 10 297 952 等,乙個數字最多能表示九,如果要表示 十 十一 二十 九 一百等,就需要多個數字組合起來。例如表示 5 8 的結果,乙個數字不夠,只能 進製 用 13 來表示 這時 進一位 相當於十,進兩位 相當於二十。因為逢十...