是否有“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位二进制b00000000
位b0000
和可变数字b0
。 这是b01
是非法的,你必须使用b0001
或b1
。
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; } }