2013-06-20 3 views
1

Я бы догадался только 2. True/False. Howerver от underscore.js проверки булевых типов, мы имеем:Сколько значений может иметь тип boolean?

_.isBoolean = function(obj) { 
    return obj === true || obj === false || toString.call(obj) == '[object Boolean]'; 
    }; 

Я бы подумал, проверка значения истинным или ложным, было бы достаточно, но B.C. 3-го операнда

toString.call(obj) == '[object Boolean]' 

должны быть другие значения?

+4

Есть 'Boolean' ** объекты **, которые не равны true или false – Ian

+0

Тогда в чем смысл их существования, если они не могут быть равны true/false? –

+0

См. Http://stackoverflow.com/questions/856324/what-is-the-purpose-of-new-boolean-in-javascript – user123444555621

ответ

1

Метод проверяет, является ли это значение либо логическим примитивом (true или false), либо если это экземпляр типа типа Boolean built-in. Другими словами, задействованы два типа, поэтому он проверяет оба.

1

Есть также Boolean Objects, которые не являются такими же, как примитивный (но все-таки Boolean):

new Boolean(false) == false // true 
new Boolean(false) === false // false 
1

Попробуйте это:

var bool = new Boolean(); 

Это создает новый Boolean object. Теперь, предположительно, логическое значение должно быть true или false, правильно?

bool === true; // returns false 
bool === false; // returns false 

Таким образом, это логическое, но ни true, ни false. Это то, что подчеркивает подчёркивание.

Причина в том, что это Booleanобъект. true и false являются примитивами Javascript. Ни один объект никогда не равен примитивному или даже любому другому объекту, кроме самого себя.

+0

@the_web_situation Я не могу себе представить, чтобы когда-либо использовать это в своем собственном коде. Однако подчеркивание - это библиотека, поэтому приходится иметь дело со странными вещами, которые делают программисты. * Пожала плечами * – lonesomeday