Существует ли стандартная функция для проверки переменных на null, undefined или пустые значения в JavaScript?
Описание проблемы: Проверка значения переменной в JavaScript
Я столкнулся с задачей проверки переменной на наличие значения в JavaScript. Мне нужно убедиться, что переменная не является undefined
, null
или пустой строкой. Я разработал следующую функцию, но не уверен, охватывает ли она все возможные случаи:
function isEmpty(val) {
return (val === undefined || val == null || val.length <= 0) ? true : false;
}
Хотелось бы получить универсальный подход к этой проблеме. Учитывает ли моя функция все возможные сценарии? И есть ли более эффективный способ реализации подобной проверки?
5 ответ(ов)
Функция isEmpty
проверяет, является ли переданное значение "пустым". Исходная реализация выглядит так:
function isEmpty(value){
return (value == null || value.length === 0);
}
Она вернёт true
для следующих значений:
undefined // Поскольку undefined == null
null
[]
""
Также это будет применимо и для функций без аргументов, так как length
функции соответствует количеству объявленных параметров.
Если вы хотите исключить последний случай (функции), можно просто проверить на пустые строки:
function isEmpty(value){
return (value == null || value === '');
}
Для обработки случая, когда значения являются null
или содержат только пробелы, можно использовать метод trim()
:
function isEmpty(value){
return (value == null || value.trim().length === 0);
}
Таким образом, вы сможете корректно обрабатывать различные случаи "пустоты" значения.
Это самый надежный способ проверки, который, насколько я вижу, не был представлен здесь именно так:
if (typeof value !== 'undefined' && value) {
// работаем со значением
}
Этот код охватывает случаи, когда value никогда не была определена, а также эти значения:
- null
- undefined (значение undefined не равно параметру, который никогда не был определён)
- 0
- "" (пустая строка)
- false
- NaN
Таким образом, таким образом вы можете безопасно работать с переменной, даже если она не была инициализирована.
Вот одно из решений, которое мне очень нравится:
Давайте определим, что пустая переменная — это null
, undefined
, или если у неё есть длина, то она равна нулю, или если это объект, то у него нет ключей:
function isEmpty(value) {
return (
// null или undefined
(value == null) ||
// имеет длину и она равна нулю
(value.hasOwnProperty('length') && value.length === 0) ||
// является объектом и не имеет ключей
(value.constructor === Object && Object.keys(value).length === 0)
);
}
Возвращает:
- true:
undefined
,null
,""
,[]
,{}
- false:
true
,false
,1
,0
,-1
,"foo"
,[1, 2, 3]
,{ foo: 1 }
Вы можете найти полезной следующую функцию:
function typeOf(obj) {
return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
Или в ES7 (прокомментируйте, если есть дальнейшие улучшения):
function typeOf(obj) {
const { toString } = Object.prototype;
const stringified = obj::toString();
const type = stringified.split(' ')[1].slice(0, -1);
return type.toLowerCase();
}
Результаты:
typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/); //regexp
typeOf(new Date()); //date
typeOf(new WeakMap()); //weakmap
typeOf(new Map()); //map
Обратите внимание, что оператор привязки (::) не является частью ES2016 (ES7) и ни одной последующей версии стандарта ECMAScript. В настоящее время это предложение находится на стадии 0 (в стадии обсуждения) для введения в язык. – Симон Кьельберг. Автор высказывает свою поддержку этому прекрасному предложению, чтобы оно получило "королевское" одобрение.
Эта проверка условия
if (!!foo) {
// foo определен
}
вполне достаточна.
Как определить, является ли переменная 'undefined' или 'null'?
Почему null является объектом и в чем разница между null и undefined?
Как проверить значение на null в JavaScript?
Как проверить, является ли строка пустой/неопределенной/нуль в JavaScript?
Проверка существования переменной в JavaScript (определена/инициализирована)