Есть ли универсальная функция JavaScript, которая проверяет, что переменная имеет значение и гарантирует, что это не так undefined
или нет null
? У меня есть этот код, но я не уверен, что он охватывает все случаи:
function isEmpty(val){
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
(truthy statement) ? true : false;
. Просто делай(truthy statement);
.if (hungry) …
вместоif (hungry === true) …
. Как и все вещи, написанные таким образом, это просто вопрос вкуса. Более конкретно к примеру, предоставленному ОП, он еще более многословно говорит: «Если это правда, то правда, если нет, то ложь». Но если это правда, то это уже правда. И, если это ложно, это уже ложно. Это все равно что сказать: «Если ты голоден, значит, есть, а если нет, то нет».Ответы:
Вы можете просто проверить , если переменная имеет
truthy
значение или нет. Это значитбудет вычисляться ,
true
еслиvalue
это не :Приведенный выше список представляет все возможные
falsy
значения в ECMA- / Javascript. Найдите это в спецификации вToBoolean
разделе.Кроме того, если вы не знаете , существует ли переменная (то есть, если она была объявлена ), вам следует проверить с
typeof
оператором. НапримерЕсли вы можете быть уверены, что переменная объявлена как минимум, вам следует непосредственно проверить, имеет ли она
truthy
значение, как показано выше.Далее читайте: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html
источник
if( value || value === false )
. То же самое относится ко всем ложным значениям , мы должны проверить их явно.truthy
может вводить в заблуждение. В этом случае мы должны проверятьvalue.length != 0
непустой массив.if
конструкция является синтаксический слишком тяжелой, вы можете использовать тройной оператор, например , так:var result = undefined ? "truthy" : "falsy"
. Или если вы просто хотите , чтобы принуждать к логическому значению, используйте!!
оператор, например!!1 // true
,!!null // false
.Подробный метод, чтобы проверить, является ли значение неопределенным или нулевым:
Вы также можете использовать
==
оператор, но это предполагает, что он знает все правила :источник
null
илиundefined
может быть сделано следующим образом:if (value == null)
. Имейте в виду==
оператора, который принуждает. Если вы проверите, как этоif (value === null || value === undefined)
, вы забыли / не знаете, как принуждает Javascript. webreflection.blogspot.nl/2010/10/…arg == null
дает те же результаты, что иarg === undefined || arg === null
. Однако я считаю последний пример более читабельным.arg == null
довольно часто встречается в моем опыте.return value === (void 0)
Кundefined
сожалению, безопаснее, чем тестирование, которое вполне может быть допустимой переменной в области видимости.Это вернет истину для
и функции с нулевым аргументом, поскольку функция
length
- это число объявленных параметров, которые она принимает.Чтобы запретить последнюю категорию, вы можете просто проверить наличие пустых строк
источник
undefined == null
ноundefined !== null
Это самая безопасная проверка, и я не видел, чтобы она была опубликована здесь в точности так:
Он будет охватывать случаи, когда значение никогда не определялось, а также любой из них:
Отредактировано: изменено на строгое равенство (! ==), потому что сейчас это норма;)
источник
typeof
оператор вернет строку, поэтому использование строгой проверки на равенство технически более точно, более конкретно и быстрее. Так что на самом деле, нет никаких оснований для использования свободного сравнения, а не наоборот. Такжеval !== null
отлично действует во многих случаях - я делаю это все время. Я согласен с вашим аргументом о несоответствии, но я думаю, что это плохой пример, чтобы сделать это. Не пытаюсь тебя троллить.Вам может пригодиться следующая функция:
Или в ES7 (прокомментируйте, если дальнейшие улучшения)
Результаты:
«Обратите внимание, что оператор связывания (: :) не является ни частью ES2016 (ES7), ни какой-либо более поздней редакцией стандарта ECMAScript вообще. В настоящее время он является предложением стадии 0 (strawman) для введения в язык». - Саймон Кьельберг. Автор хотел бы добавить свою поддержку этого прекрасного предложения получить королевское вознесение.
источник
::
) не является частью ES2016 (ES7) или какой-либо более поздней редакции стандарта ECMAScript. В настоящее время это предложение стадии 0 (соломенный) для ознакомления с языком.Первый ответ с лучшим рейтингом неверен. Если значение не определено, оно выдаст исключение в современных браузерах. Вы должны использовать:
или
источник
undefined
значением.if(value === 0) gameOver();
;)value
равен нулю, а это не то, что ищет опера.Это условие проверки
это все, что тебе нужно.
источник
if
уже делает ложную проверку, которая просто конвертируется в логическое значение. Ловит ли он какие-либо случаи, которые нормальнаяif(foo)
не ловит?active={!!foo}
! проверьте наличие пустых строк (""), нулевых, неопределенных, ложных и числа 0 и NaN. Скажем, если строка пуста,
var name = ""
тоconsole.log(!name)
возвращаетсяtrue
.эта функция возвращает истину , если вал является пустым, пустым, не определено, ложь, число 0 или NaN .
ИЛИ
В зависимости от вашей проблемной области вы можете просто использовать как
!val
или!!val
.источник
isEmpty(val)
если вы могли бы просто сделать!val
?!val
или в!!val
зависимости от вашей проблемной области.Решение мне очень нравится:
Давайте определим, что пустая переменная равна
null
илиundefined
, или если она имеет длину, равна нулю, или, если это объект, у нее нет ключей:Возвращает:
undefined
,null
,""
,[]
,{}
true
,false
,1
,0
,-1
,"foo"
,[1, 2, 3]
,{ foo: 1 }
источник
Вы немного переусердствовали. Чтобы проверить, что переменной не присвоено значение, вам нужно будет проверить только undefined и null.
Это предполагает
0
,""
и объекты (даже пустой объект и массив) являются допустимыми «значениями».источник
Если вы предпочитаете простой javascript, попробуйте это:
В противном случае, если вы уже используете подчеркивание или lodash, попробуйте:
источник
_.isNil
- это та функция, которую вы ищете, а не_.isEmpty
. isNil документация , IsEmpty документацияisArray
или неisString
работает наwindow
.Вот мое - возвращает true, если значение равно null, undefined и т. Д. Или пусто (т.е. содержит только пробелы):
источник
это действительно хороший и чистый способ справиться с этим во многих местах, также может быть использован для назначения переменных
источник
true
и вы пытаетесь поставить или возвращатьval
изfalse
.const res = falsyValue ? true : falsyValue
Если переменная не была объявлена, вы не сможете проверить неопределенность с помощью функции, потому что получите ошибку.
Оба сгенерируют ошибку, если foo не был объявлен.
Если вы хотите проверить, была ли объявлена переменная, вы можете использовать
если вы хотите проверить, объявлен ли foo и имеет ли оно значение, которое вы можете использовать
источник
Чтобы проверить значение по умолчанию
Результат проверки:
Я использовал функцию @Vix () для проверки объекта какого типа.
используя instansof «
источник
// Number Type [int, float literals ] var int = 77; var float = 77.7; console.log( int.toFixed(10) + '\t' + float.toFixed(10) ); // Object Type var number = new Number( 77 ); if( int != float ) console.log('Data Not Equal'); if( int == number && int !== number ) console.log('Data is Equal & Types vary');
В ES6 с отделкой для обработки пустых строк:
источник
Это может быть полезно.
Все значения в массиве представляют собой то, кем вы хотите быть (ноль, неопределенное или другое), и вы ищете в нем то, что хотите.
источник
Если вы используете
TypeScript
и не хотите учитывать «ценности, которые естьfalse
», то это решение для вас:Первый:
import { isNullOrUndefined } from 'util';
Затем:
isNullOrUndefined(this.yourVariableName)
Обратите внимание: как уже упоминалось ниже, это устарело, используйте
value === undefined || value === null
вместо этого. исх .источник
/** @deprecated since v4.0.0 - use "value === null || value === undefined" instead. */
typescript
вещь. Можете ли вы предоставить ссылку на его документацию?вырожденность
Я не рекомендую пытаться определить или использовать функцию, которая вычисляет, является ли какое-либо значение во всем мире пустым. Что на самом деле означает быть «пустым»? Если у меня есть
let human = { name: 'bob', stomach: 'empty' }
, долженisEmpty(human)
вернутьсяtrue
? Если у меня естьlet reg = new RegExp('');
, долженisEmpty(reg)
вернутьсяtrue
? Как насчетisEmpty([ null, null, null, null ])
- этот список содержит только пустоту, поэтому сам список пуст? Я хочу выдвинуть здесь некоторые примечания о «пустотности» (намеренно неясное слово, чтобы избежать ранее существовавших ассоциаций) в javascript - и я хочу доказать, что «пустотность» в значениях javascript никогда не должна рассматриваться вообще.Truthiness / Falsiness
Чтобы решить, как определить «пустоту» значений, нам нужно учесть встроенный в javascript внутренний смысл того, являются ли значения «правдивыми» или «ложными». Естественно
null
и тоundefined
и другое "фальшиво". Менее естественно, число0
(и никакое другое число кромеNaN
) также не соответствует действительности. Наименее естественно:''
это ложь, но[]
и{}
(иnew Set()
, иnew Map()
) правдивы - хотя все они кажутся одинаково пустыми!Нулевой и неопределенный
Существует также некоторая дискуссия относительно
null
vsundefined
- действительно ли нам нужно и то, и другое, чтобы выразить пустоту в наших программах? Лично я избегаю, чтобы буквы u, n, d, e, f, i, n, e, d появлялись в моем коде в таком порядке. Я всегда используюnull
для обозначения "пустотности". Опять же, тем не менее, мы должны учесть присущие JavaScript особенности того, какnull
и чемundefined
отличаются:undefined
undefined
:undefined
, когда они заданы , а неnull
:Неуниверсальная бессмысленность
Я считаю, что пустотность никогда не должна рассматриваться в общем виде. Вместо этого мы должны всегда иметь возможность получить больше информации о наших данных, прежде чем определять, являются ли они пустыми - я в основном делаю это, проверяя, с каким типом данных я имею дело:
Обратите внимание, что эта функция игнорирует полиморфизм - она
value
должна быть прямым экземпляромCls
, а не экземпляром подклассаCls
. Я избегаюinstanceof
по двум основным причинам:([] instanceof Object) === true
(«Массив - это объект»)('' instanceof String) === false
(«Строка не Строка»)Обратите внимание , что
Object.getPrototypeOf
используется , чтобы избежать случая , как функция по- прежнему возвращает правильно для (ложь), и (истина).let v = { constructor: String };
isType
isType(v, String)
isType(v, Object)
В целом, я рекомендую использовать эту
isType
функцию вместе с этими советами:let v = JSON.parse(someRawValue);
нашаv
переменная теперь неизвестного типа. Как можно раньше, мы должны ограничить наши возможности. Лучшим способом сделать это может быть требование определенного типа: например,if (!isType(v, Array)) throw new Error('Expected Array');
это действительно быстрый и выразительный способ удалить общий характерv
и убедиться, что он всегда естьArray
. Однако иногда нам нужно разрешитьv
быть нескольких типов. В этих случаях мы должны создавать блоки кода, гдеv
больше не являются общими, как можно раньше:if (v === null) throw new Error('Null value rejected');
- это отлично подходит для того, чтобыnull
значения не проходили, но если значение таки проходит, мы все равно вряд ли узнаем что-нибудь об этом. Значение,v
которое проходит эту нулевую проверку, все еще ОЧЕНЬ универсально - это совсем не такnull
! Черные списки вряд ли рассеивают родственность.Если значение не является
null
, никогда не считайте «пустым значением». Вместо этого рассмотрим «X, который является пустым». По сути, никогдаif (isEmpty(val)) { /* ... */ }
не думайте о том, чтобы делать что-то подобное - независимо от того,isEmpty
как реализована эта функция (я не хочу знать ...), это не имеет смысла! И это слишком общий характер! Неопределенность следует рассчитывать только со знаниемval
типа России. Проверки пустотности должны выглядеть так:if (isType(val, String) && val.length === 0) ...
if (isType(val, Object) && Object.entries(val).length === 0) ...
if (isType(val, Number) && val <= 0) ...
«Массив без элементов»:
if (isType(val, Array) && val.length === 0) ...
Единственное исключение - когда
null
используется для обозначения определенных функций. В этом случае имеет смысл сказать: «пустое значение»:if (val === null) ...
источник
Попробуйте с другой логикой . Вы можете использовать приведенный ниже код для проверки всех четырех (4) условий для проверки, например, не ноль, не пустой, не неопределенный и не ноль, используйте только этот код (! (! (Variable))) только в javascript и jquery.
источник
Вы можете думать об этой функции -
??
операторе - как о способе «возврата» к значению по умолчанию при работе сnull
илиundefined
.Опять же, приведенный выше код эквивалентен следующему.
источник
но это решение перегружено, если вы не хотите позже модифицировать функцию для нужд бизнес-модели, то лучше использовать ее непосредственно в коде:
источник
Это никогда не выдаст ошибку. Если myObject , child или myValue равно нулю, то myNewValue будет равно нулю. Ошибки не будут выброшены
источник
Для всех, кто приезжает сюда для того, чтобы иметь подобный вопрос, следующие прекрасно работают, и у меня есть это в моей библиотеке в последние годы:
источник
Если вы хотите избежать получения значения true, если значением является любое из следующего, согласно ответу jAndy :
Одним из возможных решений, которое могло бы избежать получения истинных значений, является следующее:
Это будет использоваться следующим образом:
В дополнение к этим сценариям вы можете вернуть false, если объект или массив пуст:
Вы бы поступили так:
Если вы хотите проверить все строки пробелов (""), вы можете сделать следующее:
Примечание:
hasOwnProperty
возвращает true для пустых строк, 0, false, NaN, null и undefined, если переменная была объявлена как любая из них, поэтому ее использование может быть не лучшим. Функция может быть изменена, чтобы использовать ее, чтобы показать, что она была объявлена, но ее нельзя использовать.источник
Код на GitHub
Бедный мужской тест 😁
Результаты теста:
источник
value.constructor === Object
? Проверьте это .value.constructor === Object
что все в порядке, в javascript IF операторы OR имеют порядок выполнения, поэтому оператор OR будет выполняться только в том случае, если предыдущий не вернул TRUE и мы уже проверилиNull
. Фактически единственная цель этого последнего оператора OR - обнаружить{}
и убедиться, что он не возвращает TRUE для вещей, которые он не должен.Это проверит, является ли переменная неопределенного вложения неопределенной
Выше проверяет, существует ли функция Google Translate для TranslateElement. Это эквивалентно:
источник
Необязательный оператор связывания обеспечивает способ упрощения доступа к значениям через связанные объекты, когда возможно, что ссылка или функция может быть неопределенной или иметь значение null.
Нулевой оператор объединения может использоваться после необязательной цепочки для создания значения по умолчанию, когда ничего не найдено:
источник
он также проверит пробелы ('') вместе со следующим:
источник
Я думаю, используя? Оператор немного чище.
источник