7

Как проверить на наличие и `null`, и `undefined`?

26

Поскольку TypeScript является строго типизированным языком, использование конструкции if () {} для проверки на null и undefined выглядит неправильно.

Существует ли в TypeScript какая-либо специализированная функция или синтаксический сахар для этой проверки?

5 ответ(ов)

6

Вы можете использовать "джагглинг-проверку" для того, чтобы одновременно протестировать на null и undefined:

if (x == null) {

Если вы используете строгую проверку, это будет истинно только для значений, установленных в null, и не сработает для переменных, не имеющих значения (undefined):

if (x === null) {

Вы можете протестировать это с различными значениями, используя следующий пример:

var a: number;
var b: number = null;

function check(x, name) {
    if (x == null) {
        console.log(name + ' == null');
    }

    if (x === null) {
        console.log(name + ' === null');
    }

    if (typeof x === 'undefined') {
        console.log(name + ' is undefined');
    }
}

check(a, 'a');
check(b, 'b');

Вывод будет таким:

"a == null"
"a is undefined"
"b == null"
"b === null"

Таким образом, вы можете видеть, как check(a, 'a') сработает только для undefined и null, тогда как check(b, 'b') сработает для обеих проверок, а также покажет, что b строго равно null.

4

В TypeScript условие if( value ) { } будет оцениваться как true, если value не равен:

  • null
  • undefined
  • NaN
  • пустой строке ''
  • 0
  • false

Важно отметить, что TypeScript включает правила JavaScript, поэтому поведение этих проверок будет одинаковым в обоих языках.

0

TypeScript полностью поддерживает JavaScript-выражение something == null. Это выражение корректно исключает как null, так и undefined при проверке.

Дополнительная информация

Ссылка на источник

0

ПРОСТОЙ ОТВЕТ

Хотя TypeScript — это строго типизированный язык, он унаследовал те же проблемы с указателями и инициализацией переменных от JavaScript.

JavaScript не проверяет, существует ли переменная в контексте, что приводит к распространенному состоянию undefined.

Чтобы проверить, что значение НЕ является null, undefined, 0, false, "" или NaN:

if (value)
или
if ( !!value )

Для отрицательного условия проверьте, является ли значение null, undefined, 0, false, "" или NaN:

if ( !value )

Чтобы проверить, является ли значение null или undefined:

if ( value == null )

Чтобы проверить только на null:

if ( value === null )

Чтобы проверить только на undefined:

if ( value === undefined )

ПОДРОБНЫЙ ОТВЕТ

1- Это выражение будет оцениваться как true, если значение не равно: null, undefined, NaN, пустая строка '', 0, false.

Если значение равно null, undefined, NaN, пустой строке, 0 или false, то управление перейдет к условию else.

if ( value ) {
  console.log('значение отличается от 0, "", false, NaN, null, undefined');
} else {
  console.log('значение равно 0, "", false, NaN, null или undefined');
}
if ( !!value ) {
  console.log('значение отличается от 0, "", false, NaN, null, undefined');
} else {
  console.log('значение равно 0, "", false, NaN, null или undefined');
}

2- Если вам нужно отрицательное условие, вам нужно использовать:

if ( !value ) {
  console.log('значение равно 0, "", false, NaN, null или undefined');
} else {
  console.log('значение отличается от 0, "", false, NaN, null, undefined');
}

3- Это выражение будет проверять, является ли значение null или undefined:

if ( value == null ) {
  console.log('это null или undefined');
} else {
  console.log('это не null и не undefined');
}

4- Использовать тест с логическими значениями не сработает.

Выражение НЕ будет оцениваться как true, так и false, если значение равно null, undefined, 0, пустой строке, или NaN.

Обе проверки всегда перейдут в условие else.

За исключением случая, если значение является логической переменной.

if ( value==true ) {
} else { 
}
if ( value==false ) {
} else { 
}
0

Давайте разберем ваш код и результат его выполнения.

Вы провели тесты в playground TypeScript, где объявили переменные a, b и c. Сначала у вас переменная a не инициализирована, переменная b равна null, а переменная c — пустая строка.

Вот что вы получили в выводе:

a is null or undefined
b is null or undefined
c is defined

На основании этого результата можно сделать несколько выводов:

  1. Проверка if (a == null) — это правильный способ узнать, является ли a равным null или undefined. В данном случае a не инициализирована, и проверка возвращает true.

  2. Проверка if (b == null) — это также верный способ определить, является ли b равным null или undefined. Поскольку b инициализирована как null, условие также выполнится.

  3. Проверка if (c == null) — это ложное срабатывание, так как c — это пустая строка, она не равна ни null, ни undefined.

  4. Проверка if (a != null) — корректный метод для проверки, определена ли переменная a. Результат проверки будет false, так как a не инициализирована.

  5. Проверка if (b != null) — возвращает false, потому что b равно null.

  6. Проверка if (c != null) — возвращает true, поскольку c инициализирована как пустая строка.

  7. Проверка if (a) — это неверный способ проверки, существует ли переменная a. Поскольку a не инициализирована, условие не выполнится и будет проигнорировано.

  8. Проверка if (b) — также вернет false, так как b равна null.

  9. Проверка if (c) — вернет true, как и ожидалось, потому что пустая строка считается "правдой" в контексте либо проверки на истинность, либо проверок в логических условиях.

В итоге ваши выводы можно резюмировать следующим образом:

  • Для определения, является ли переменная null или undefined, можно использовать == null.
  • Для определения, что переменная определена, правильнее использовать != null.
  • Проверка if (a) не подходит для этой цели, если переменная не инициализирована, поскольку возвращает false для undefined и null, но может дать неожиданные результаты для других "ложных" значений, таких как пустая строка или 0.

Это важно учитывать, когда вы разрабатываете код.

Чтобы ответить на вопрос, пожалуйста, войдите или зарегистрируйтесь