Как я могу проверить, имеет ли тип переменной тип Boolean?
Я имею в виду, есть несколько альтернатив, таких как:
if(jQuery.type(new Boolean()) === jQuery.type(variable))
//Do something..
Но это не кажется мне симпатичным.
Есть ли более чистый способ добиться этого?
javascript
jquery
types
Матиас Цицерон
источник
источник
true
илиfalse
типа булева?!!( ... some expression ...)
и результат будет логическим.true
иfalse
являются примитивами типаboolean
. Булевый тип прописной буквы B - это тип обёртки объекта для булевых примитивов.if (new Boolean(false)) alert("hi");
- логический объект с заглавными буквами B всегда "правдив", независимо от базового логического значения little-b.Ответы:
Вот для чего
typeof
. Скобки необязательны, так как это оператор .источник
typeof
.typeof
это не функция. 2) Использование тройного оператора === сtypeof
не обязательно, так как он всегда будет возвращать строку (ага, но, насколько я помню, был другой случай для некоторых очень старых браузеров). 3)typeof
и сравнения строк медленные. Не используйте их. Проверьте напрямую с помощью(variable === true || variable === false)
(я предлагаю написать функцию).typeof(variable) === typeof(true)
будет более надежным?name
является глобальным свойством окна со специальным геттерным developer.mozilla.org/en-US/docs/Web/API/Window/nametypeof true
вместо"boolean"
. Новые версии ECMAScript никогда не будут иметь каких-либо серьезных изменений.Если вы просто хотите проверить примитивное значение
Если по какой-то странной причине у вас есть логические значения, созданные с помощью конструктора, это на самом деле не логические значения, а объекты, содержащие примитивное логическое значение, и один из способов проверить как примитивные логические значения, так и объекты, созданные с помощью
new Boolean
:Показать фрагмент кода
источник
new Boolean()
, которая технически не является булевой, но является объектом, но все еще содержит логическое значение.new Boolean()
возвращает объект (см. Комментарии к вопросу). Но что угодно :)typeof variable === typeof new Boolean()
и, вероятно, просто хочет регулярную проверку typeof, но каким-то образом попал в какой-то странный синтаксис jQuery.bool
пары проходили в были бы еще оценить и исключение будет брошено на вызов . Таким образом, я бы изменил эту последнюю строку на следующую: она будет оцениваться только тогда, когда она не равна нулю.null
typeof bool === 'object'
TypeError: Cannot read property 'valueOf' of null
typeof bool.valueOf()
(typeof bool === 'object' && bool && typeof bool.valueOf() === 'boolean');
bool
С чистым JavaScript , вы можете просто использовать
typeof
и делать что-то вродеtypeof false
или,typeof true
и он вернется"boolean"
...Но это не единственный способ сделать это, я создаю функции ниже, чтобы показать различные способы проверки логического значения в JavaScript, а также различные способы сделать это в некоторых новых средах, давайте начнем с этого:
Или однострочный способ ES6 ...
и назовите это как!
Также в исходном коде Underscore они проверяют это следующим образом (с _. В начале имени функции):
Также в jQuery вы можете проверить это так:
В React , если вы используете propTypes, вы можете проверить значение на логическое, например:
Если вы используете TypeScript , вы также можете использовать тип boolean :
Также еще один способ сделать это, например, преобразовать значение в логическое и посмотреть, точно ли оно все еще, что-то вроде:
или как:
и позвони!
Не рекомендуется использовать какой-либо фреймворк для этого, так как это действительно простая проверка в JavaScript.
источник
new Boolean(true) === new Boolean(true)
должен возвращать false (поскольку ссылки разные). Вот почемуisBoolean(new Boolean(true))
он скажет ложь, в то время как он должен быть правдой (new Boolean(true)
имеет тип boolean ).Есть три «ванильных» способа проверить это с или без jQuery.
Сначала нужно принудительно выполнить булеву оценку, а затем проверить, равно ли оно исходному значению:
Делаем простую
typeof
проверку:Выполнение полностью излишнего и ненужного создания экземпляра обертки класса в примитиве:
Третий вернется, только
true
если вы создадитеnew Boolean
класс и передадите его.Чтобы проработать приведение примитивов (как показано в # 1), все типы примитивов можно проверить следующим образом:
Boolean
:Number
:String
:источник
typeof
? Я очень сомневаюсь в этом.typeof
также 1 принуждение, ноtypeof
метод делает несколько сборщиков и сравнений внутри + 1 сравнения в самом конце. Вот ссылка на V8 дляtypeof
!!
быстрее, другой говоритBoolean
быстрее. Просто ссылка на то, насколько мала дельта между тестами. Булевы проверки бывают быстрыми. jsperf.com/bool-not-not jsperf.com/bool-vs-doublenottypeof val === "boolean"
является оптимальным.Вы можете использовать чистый Javascript для достижения этой цели:
источник
Если вы хотите, чтобы ваша функция также могла проверять логические объекты, самое эффективное решение должно быть:
источник
Самый надежный способ проверить тип переменной в JavaScript заключается в следующем :
Причина этого усложнения в том, что
typeof true
возвращается,"boolean"
аtypeof new Boolean(true)
возвращается"object"
.источник
"boolean"
если значение действительно является объектом? Это не кажется мне очень практичным. В любом случае с булевыми объектами нужно обращаться иначе, чем с булевыми примитивами.Я бы пошел с Lodash: isBoolean проверяет, является ли передаваемая переменная примитивным логическим или логическим объектом-оболочкой, и поэтому учитывает все случаи.
источник
Вы можете создать функцию, которая проверяет
typeof
аргумент.источник
Иногда нам нужен единственный способ проверить это. typeof не работает на дату и т. д. Так что я сделал это легко
Кроме того, для
Number
,String
, иBoolean
т.д. , мы часто должны проверить тип в одном пути ...источник
Создание таких функций, как
isBoolean
oneliner,typeof v === "boolean"
кажется очень неудобным в долгосрочной перспективе. Я удивлен, что почти все предлагают создать свою собственную функцию. Кажется, это тот же рак, что и расширение прототипов.просто запомни
typeof v === "boolean"
и все. Добавьте шаблон в вашу IDE, чтобы иметь возможность поместить его с помощью трехбуквенного ярлыка и быть счастливым.источник
v === true || v === false
, который делает 2 проверки в случаеfalse
. Ранжирование: (1 - оба практически одинаковы)typeof v === 'boolean
иtypeof v === typeof true
, (2)isBoolean(v)
, (3)v === true || v === false
.если у вас есть строка
источник
val === false || val === true
.typeof variable == typeof true
.Самый короткий, но не читаемый вообще
!!val === val
.Объяснение:
тесты:
источник
В nodejs с помощью node-boolify мы можем использовать isBoolean ();
источник
Еще одно решение с функцией стрелки es2015
источник