Я имел дело с этой проблемой в каком-то коде, который писал.Мое решение состояло в том, чтобы использовать побитовое и.
var j = bool & 1;
Более быстрый способ справиться с постоянной проблемой - создать функцию.Это более читабельно для других людей, лучше для понимания на этапе обслуживания и избавляет от возможности написать что-то неправильно.
function toInt( val ) {
return val & 1;
}
var j = toInt(bool);
Редактировать - 10 сентября 2014 г.
По какой-то причине в Chrome не выполняется преобразование с использованием троичного оператора с идентичным оператору.Не имеет смысла объяснять, почему это быстрее, но я полагаю, что это своего рода оптимизация низкого уровня, которая имеет смысл где-то по пути.
var j = boolValue === true ? 1 : 0;
Проверьте себя: http://jsperf.com/boolean-int-conversion/2
ВFireFox и Internet Explorer, используя версию, которую я выложил, обычно быстрее.
Редактировать - 14 июля 2017 г.
Хорошо, я не собираюсь говорить вам, какая из нихВы должны или не должны использовать.Каждый взбешенный браузер все время показывал, насколько быстро они могут выполнять операции с каждым методом.В какой-то момент у Chrome битовая версия работала лучше, чем у других, но вдруг все стало намного хуже.Я не знаю, что они делают, поэтому я просто оставлю это тем, кого это волнует.Редко есть причина беспокоиться о том, как быстро выполняется такая операция.Даже на мобильных устройствах это пустая операция.
Кроме того, есть более новый метод добавления прототипа toInt, который нельзя перезаписать.
Object.defineProperty(Boolean.prototype, "toInt", { value: function()
{
return this & 1;
}});