是否有“0b”或类似的代表在JavaScript中的二进制数

我知道0x是Javascript中的hex数字的前缀。 例如, 0xFF代表数字255。

有没有类似的二进制数字? 我期望0b1111代表数字15 ,但这不适合我。

更新:

较新版本的JavaScript(特别是ECMAScript 6)增加了对二进制(前缀0b )和八进制(前缀0o )数字文字的支持:

 var foo = 0b1111; // foo will be set to 15 var bar = 0o17; // bar will be set to 15 

此function已经在Firefox和Chrome中可用。 它目前不支持IE,但显然将是当斯巴达到达。

(感谢Semicolon的评论和urish的回答 ,指出了这一点。)

原始答案:

不,没有二进制数字的等价物。 JavaScript仅支持十进制(无前缀),hex(前缀0x )和八进制(前缀0 )格式的数字文字。

一种可能的select是将二进制string与基数一起传递给parseInt方法:

 var foo = parseInt('1111', 2); // foo will be set to 15 

在ECMASCript 6中,这将作为语言的一部分被支持,即0b1111 === 15是正确的。 您也可以使用大写字母B(例如0B1111 )。

在ES6 Spec草稿中查找BinaryIntegerLiteral

我知道人们说扩大原型不是一个好主意,但是你的脚本是…

我这样做:

 Object.defineProperty(Number.prototype, 'b', {set:function(){return false;},get:function(){return parseInt(this, 2);}}); 100..b // returns 4 11111111..b // returns 511 10..b+1 // returns 3 // and so on 

如果您的主要担心是显示而不是编码,则可以使用内置的转换系统:

 var num = 255; document.writeln(num.toString(16)); // Outputs: "ff" document.writeln(num.toString(8)); // Outputs: "377" document.writeln(num.toString(2)); // Outputs: "11111111" 

参考: JavaScript数字参考

据我所知,在Javascript中不可能使用二元指针。 我有三个解决scheme,所有这些都有他们的问题。 我认为备选scheme3对于可读性来说是最“好看的”,并且可能比其他scheme快得多 – 除了它的初始运行时间成本。 问题是它只支持高达255的值。

备选1: "00001111".b()

 String.prototype.b = function() { return parseInt(this,2); } 

备选2: b("00001111")

 function b(i) { if(typeof i=='string') return parseInt(i,2); throw "Expects string"; } 

备选案文3: b00001111

此版本允许您input8位二进制b00000000b0000和可变数字b0 。 这是b01是非法的,你必须使用b0001b1

 String.prototype.lpad = function(padString, length) { var str = this; while (str.length < length) str = padString + str; return str; } for(var i = 0; i < 256; i++) window['b' + i.toString(2)] = window['b' + i.toString(2).lpad('0', 8)] = window['b' + i.toString(2).lpad('0', 4)] = i; 

可能会这样使用:

 var bin = 1111; var dec = parseInt(bin, 2); // 15 

将二进制string转换为数字,反之亦然。

 var b = function(n) { if(typeof n === 'string') return parseInt(n, 2); else if (typeof n === 'number') return n.toString(2); throw "unknown input"; }; 

不,但可以使用parseInt并可以select省略引号。

 parseInt(110, 2); // this is 6 parseInt("110", 2); // this is also 6 

省略引号的唯一缺点是,对于非常大的数字,您将会更快地溢出:

 parseInt(10000000000000000000000, 2); // this gives 1 parseInt("10000000000000000000000", 2); // this gives 4194304 

我知道这实际上并没有回答Q(已经回答了好几次),但是我build议你(或者对这个主题感兴趣的其他人)考虑一下事实:最可读性和反向/未来/跨浏览器兼容性方法是只使用hex表示。

从Q的语句看来,你似乎只是谈论在你的代码中使用二进制文字,而不是处理数字值的二进制表示(为此parstInt是要走的路)。

我怀疑有很多程序员需要处理不熟悉0-F到0000-1111映射的二进制数字。 所以基本上做四个一组,并使用hex符号。

所以不要写101000000010,而应该使用0xA02,它具有完全相同的含义,可读性更强,出错的可能性更小。

只要考虑可读性,试着比较哪些更大:
10001000000010010或1001000000010010

而如果我这样写:
0x11012或0x9012

 // Conversion function function bin(nb) { return parseInt(nb.toString(2)); } // Test var stop = false; while(!stop) { var n = parseInt(prompt("Type a decimal number : ")); alert(bin(n)); var str = prompt("Retry ? Y / N"); if(str === "N") { stop = true; } }