Я работал с JQuery на протяжении многих лет. Однако в последнее время я все глубже изучаю язык JavaScript. Недавно я услышал о «истинных» и ложных ценностях. Однако я не до конца их понимаю. В настоящее время у меня есть код, который выглядит следующим образом:
var fields = options.fields || ['id', 'query'];
Мне нужно определить, является ли поле пустым, неопределенным или имеет длину 0. Я знаю, что долгий путь это сделать:
if ((fields === null) || (fields === undefined) || (fields.length === 0)) {
...
}
Мой вопрос заключается в следующем:
if (!fields) {
...
}
javascript
user687554
источник
источник
Ответы:
В программировании правдивость или ложность - это то качество тех логических выражений, которые не преобразуются в фактическое логическое значение, но которые, тем не менее, интерпретируются как логический результат.
В случае C любое выражение с нулевым значением интерпретируется как ложное. В Javascript выражение
value
вбудет оцениваться как true, если
value
нет:См. Также
Существует ли стандартная функция для проверки нулевых, неопределенных или пустых переменных в JavaScript?
источник
Набор значений "truey" и "falsey" в JavaScript происходит от
ToBoolean
абстрактной операции, определенной в спецификации ECMAScript , которая используется при приведении значения к логическому:Из этой таблицы мы можем видеть это
null
иundefined
оба приводятсяfalse
в логическом контексте. Темfields.length === 0
не менее, ваш обычно не отображается на ложное значение. Еслиfields.length
это строка, то она будет обрабатываться какfalse
(потому что строка нулевой длиныfalse
), но если это объект (включая массив), он будет приведен кtrue
.Если
fields
должна быть строка, то!fields
достаточно предиката. Еслиfields
это массив, ваша лучшая проверка может быть:источник
Короткий ответ:
Нет , они не одинаковы.
Но это:
if (!fields) { ... }
Это так же, как это:
if ((fields === null) || (fields === undefined) || (fields === 0) || (fields === '') || (fields === NaN) || (fields === flase)) { ...
}
Длинный (и лучший) ответ:
Давайте сначала поговорим о правдивых и ложных ценностях.
Это все о том, что происходит, когда вы оцениваете что-то как логическое значение. В JavaScript это происходит, когда вы используете такие вещи, как
if
операторы; Логические операторы любят||
,!
или&&
; илиBoolean()
функция.Boolean()
Функция принимает значение и возвращает либоtrue
илиfalse
.Например:
var age = 1; // Let's evaluate age as a boolean Boolean(age); // true
Попробуйте и попробуйте это в узле repl.
Логическое значение может быть только
true
илиfalse
, поэтому возвращаемое значениеBoolean()
должно быть либо либо,true
либоfalse
. В этом случае мы передали значение1
, и при оценке как логическое значение1
равноtrue
.Важное замечание: При оценке как логического значения значение должно быть либо истинным, либо ложным. Это только два варианта.
В JavaScript есть только 6 ложных значений. Значения, которые будут
false
при оценке как логические. Они являются:false
,0
,""
,null
,undefined
, иNaN
. Поэтому, если любое из этих значений будет оценено как логическое, они будут ложными:Boolean(false) // false Boolean(0) // false Boolean("") // false Boolean(null) // false Boolean(undefined) // false Boolean(NaN) // false
Это означает, что любое другое значение в JavaScript будет
true
оцениваться как логическое значение. Таким образом, все остальные значения в JavaScript правдивы.Другой простой способ оценить что-либо как
boolean
есть с помощью!
оператора. Как иBoolean
функция, она оценивает значение как логическое значение. Но истинные ценности становятсяfalse
и ложные становятсяtrue
.!false // true !0 // true !"" / true !null // true !undefined // true !NaN // true
Опять же, попробуйте это в узле repl или что-то, чтобы убедиться, что вы понимаете.
Итак, это утверждение:
if (!fields) { ... }
Говорит следующее: «если
fields
, когда вычисляется как логическое значение, ложно, тогда запустите код внутри этого оператора if».Что касается вашего первого заявления:
var fields = options.fields || ['id', 'query'];
Вы работаете с логическим оператором ИЛИ, о котором стоит прочитать, чтобы убедиться, что вы понимаете. https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Logical_Operators
источник
Ваш код означает:
Теперь
options.fields
преобразуется в логическое значение. По определениюnull
,undefined
,0
,""
преобразуется вfalse
, ( в основном) все остальное превращается вtrue
(но я не хочу быть настолько точным).Это не значит то же самое, потому что
fields.length === 0
линия. Пустые массивы и другие объекты преобразуются вtrue
.примечание: Javascript иногда является большим беспорядком ... Например, нет необходимости в двух операторах проверки типов (typeof и instanceof). Это просто сбивает с толку ppl, когда
true instanceof Boolean
не работает, и использованиеtypeof(true) == "boolean"
склонно к ошибкам из-за ввода строки без автозаполнения. Возможно, в некоторых новых версиях эти проблемы будут решены.источник
Вы можете попробовать (!! fields), если элемент fields имеет значение null, undefined или имеет длину 0, он вернул бы true. Или (!!! поля), тогда это вернет true.
двойной! или !! заставит истину или ложь. Хотел бы я найти хорошее определение для этого, но я не могу найти его снова.
источник