2015-05-01 2 views
1

Каков наилучший способ получить логическое значение выражения?Каков наилучший способ получить логическое значение выражения?

Обычно я использую !!, если у вас есть какие-либо причины использовать его над булевым или если это нормально использовать любой из них.

someFunction: function(param){ 
    var myBoolean = !!param; 
} 

Но я также могу сделать:

someFunction: function(param){ 
    var myBoolean = Boolean(expression); 
} 

https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Boolean

+1

Я думаю, что это как 'Number (value)' vs '+ value'. Один считается более легким для чтения, а другой быстрее. – Lewis

ответ

2

Оба делают то же самое правило. Они различаются по следующим пунктам:

  • !! только два символа, чтобы ввести
  • Boolean явно и может быть понята даже люди, которые не знают, что «!! operator»
  • Boolean могут быть перезаписаны, в то время как !! всегда безопасно
  • !! кажется, better optimised

Так что используйте то, что вам больше нравится.

1

Я попытался следующие фрагменты в консолях Safari (8.0.5), Chrome (42.0.2311.90), Firefox (34.0.5) и Opera (29.0.1795.47):

С !!:

var time = new Date().getTime(); 
for(var i = 0; i < 1000000; i++) 
{ 
    var a = true; 
    a = !!a; 
} 
time = new Date().getTime() - time; 
console.log(time); 

с Boolean():

var time = new Date().getTime(); 
for(var i = 0; i < 1000000; i++) 
{ 
    var a = true; 
    a = Boolean(a); 
} 
time = new Date().getTime() - time; 
console.log(time); 

Независимо от того, что я поставил a на перед использованием !! или Boolean, в аль l браузеры !! были быстрее.

В дополнение к этому (как Берги уже сказал в своем ответе), Boolean это просто переменная, которая должна быть решена, и могут быть перезаписаны, а !! быть не может.

Boolean() более читабельнее, хотя.

Так что на самом деле лучше вопрос мнения, но я бы сказал, производительность и безопасности вместе перевешивают читаемость, поэтому я предпочитаю !!.

Смежные вопросы