[譯]ES6新特性:八進位制和二進位制整數字面量

紫雲飛發表於2013-08-14

原文:http://whereswalden.com/2013/08/12/micro-feature-from-es6-now-in-firefox-aurora-and-nightly-binary-and-octal-numbers/


幾年前,當SpiderMonkey實現了嚴格模式的時候.我瞭解到,嚴格模式禁用了八進位制整數字面量的寫法.因為有證據表明,一些新手會利用前導0來對齊多行中的數字,從而導致意想不到的結果:

var sum = 015 +  // 相當於十進位制的13,而不是15
          197 +
          001;   // 反正是1
console.log(sum) // 相加得到的和是211,而不是新手認為的213

但是仍有一些開發者們需要八進位制整數(尤其是那些Mozilla擴充套件開發者和node.js開發者),最常見的就是用在處理檔案許可權(755,644這些)的時候.因此,ES6又增加了一種新的八進位制整數字面量寫法.和十六進位制的0x0X類似,新的八進位制整數使用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.

相關文章