Как я могу проверить наличие пустой / неопределенной / пустой строки в JavaScript?


2853

Я видел этот вопрос , но я не видел конкретного примера JavaScript. Есть ли простое string.Emptyв JavaScript или это просто проверка ""?


2
только к вашему сведению, я думаю, что самые полезные API для класса String находятся в Mozilla и javascript kit . [elated.com] ( elated.com/articles/working-with-strings ) содержит учебник по всем свойствам, методам String, ... Обратите внимание: ссылка на Mozilla обновлена ​​до developer.mozilla.org/en/ JavaScript / Справочник / Global_Objects /…
Gene T


Это очень помогло бы, если бы требование было четко указано. Для каких значений isEmpty должен возвращать true? Проверка на "" подразумевает, что он должен возвращать истину только в том случае, если значением является тип string и длина 0. Многие ответы здесь предполагают, что он также должен возвращать истину для некоторых или всех значений Falsey.
RobG

Ответы:


3574

Если вы просто хотите проверить, есть ли какое-либо значение, вы можете сделать

if (strValue) {
    //do something
}

Если вам нужно проверить специально для пустой строки над нулем, я думаю , что проверка против ""является лучшим выбором, используя в ===оператора (так что вы знаете , что это, на самом деле, строку вы сравниваете против).

if (strValue === "") {
    //...
}

174
Тестирование свойства length на самом деле может быть быстрее, чем проверка строки на "", потому что интерпретатору не нужно будет создавать объект String из строкового литерала.
Винсент Роберт

26
@ Vincent выполнил наивное профилирование в инструментах разработчика Chrome, тестирование === ''и тестирование .lengthне показали заметного улучшения (и использование .lengthтолько работ, если можно предположить, что у вас есть строка)
bdukes,

26
@bdukes, когда вы начинаете заботиться о такого рода микрооптимизациях, я не думаю, что Chrome - это браузер, в котором у вас больше всего проблем с производительностью ...
Винсент Роберт,

15
Просто отметим, что если ваше определение «пустой строки» включает пробелы, то это решение не подходит. Строка из 1 или более пробелов возвращает true выше. Если вы используете JQuery, вы можете просто использовать это: if ($ .trim (ref) .length === 0) - согласно этому ответу на аналогичный вопрос: stackoverflow.com/questions/2031085/…
CodeClimber

115
Как и ожидалось, .length > 0на самом деле намного быстрее, чем сравнение со строковым литералом! Проверьте это jsPerf
Чад

1128

Для проверки, является ли строка пустой, нулевой или неопределенной, я использую:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

Для проверки, является ли строка пустой, нулевой или неопределенной, я использую:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

Для проверки, является ли строка пустой или содержит только пробел:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

21
почему 0 === str.length вместо str.length === 0?
Винсент

66
@ Vincent Условия часто пишутся так, if (variable == constant value)и если вы забудете '=', вы назначаете постоянное значение переменной вместо тестирования. Код все равно будет работать, так как вы можете назначить переменную в if. Поэтому более безопасный способ написать это условие - поменять местами постоянное значение и переменную. Таким образом, когда вы тестируете свой код, вы увидите ошибку (неверная левосторонняя сторона в назначении). Вы также можете использовать что-то вроде JSHint, чтобы запретить присваивание в условиях и получать предупреждения при его написании.
Флориан

2
позор, который на /^\s*$/.test(str)самом деле не читается - может быть, лучше удалить пробелы, используя более простой код или регулярное выражение? см. stackoverflow.com/questions/6623231/…, а также stackoverflow.com/questions/10800355/…
Adrien Be

6
/^\s*$/.test(str) можно заменить на str.trim (). length === 0
Schadenfreude

21
@Vincent это также называется "Условия Йоды", как if blue is the sky. См. Dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZ.

316

Все предыдущие ответы хороши, но это будет еще лучше. Используйте !!( не не ) оператор.

if(!!str){
    // Some code here
}

Или используйте тип литья:

if(Boolean(str)){
    // Code here
}

Оба выполняют одну и ту же функцию. Введите переменную в логическое значение, где strпеременная.
Это возвращается falseдля null,undefined,0,000,"",false.
Возвращается trueдля строки "0" и пробела "".


61
Почему это «еще лучше»?
Мен

33
Есть ли разница между поведением if(str)и if(!!str)?
Питер Олсон

6
@PeterOlson, если вы пытаетесь сохранить переменную как логическое значение, которое проверяет содержание на наличие нескольких строк, тогда вы захотите сделать это .. иначе, var any = (!!str1 && !!str2 && !!str3)если там тоже есть число
Джон Рудделл

23
Это решение, которое я всегда использую. !!str.trim()чтобы убедиться, что строка состоит не только из пробелов.
Дарио Одендино,

5
Не выглядит как взломанный, Boolean(str)гораздо более читабелен и менее «весит».
Shinzou

106

Самое близкое, что вы можете получить str.Empty(с условием, что str является String):

if (!str.length) { ...

9
Разве это не сгенерирует исключение, если str равен нулю?
Pic Mickael

3
@PicMickael Да! Так бы str.Empty.
Атес Горал

99

Если вам нужно убедиться, что строка - это не просто набор пустых пробелов (я предполагаю, что это для проверки формы), вам нужно заменить эти пробелы.

if(str.replace(/\s/g,"") == ""){
}

8
Но выполняет работу, если то, что вы действительно хотите проверить, это строка с непробельным содержимым. Есть ли менее дорогой способ проверить это?
вспышка

4
Как насчет свойства длины?
2010 года

27
Вместо того, чтобы удалить все пробелы, почему бы просто не проверить, есть ли не пробел? Имеет 2 преимущества, которые он может выручить рано, если есть непробельный символ, и у него нет возврата новой строки, с которой вы потом проверяете. if(str.match(/\S/g)){}
mpen

34
@ Отметьте, к вашему сведению, вам не понадобится глобальный модификатор, поскольку совпадение с первым вхождением str.match(/\S/)
непробельного

1
почему это дорого? Если это действительно так, то почему jQuery использует этот метод? Вы можете найти это в источнике jQueryvar trimLeft = /^\s+/, trimRight = /\s+$/;
Marecky

66

Я использую:

function empty(e) {
  switch (e) {
    case "":
    case 0:
    case "0":
    case null:
    case false:
    case typeof(e) == "undefined":
      return true;
    default:
      return false;
  }
}

empty(null) // true
empty(0) // true
empty(7) // false
empty("") // true
empty((function() {
    return ""
})) // false

5
Это решение не зависит от языка. Единственная функция JavaScript, на которую он опирается - это typeof. Так что это хороший пример решения, которое вы можете использовать, когда вы не доверяете реализациям в разных браузерах и у вас нет времени, чтобы найти лучшее решение. (Т.е. нет доступа в интернет). Это что-то вроде доказательства. Не самый чистый, но вы можете быть уверены, что он будет работать, не зная слишком много о JavaScript.
Джефф Дэвис,

2
Я бы пошел еще дальше и прибил оператором === для неопределенного случая. В противном случае это просто идеальный ответ.
xarlymg89

typeofВ switchне работает для меня. Я добавил if (typeof e == "undefined")тест, и это работает. Почему?
Лукас

1
@Lucas Потому что это была опечатка или недосмотр. Ваша модификация - правильный подход. (оригинал относится к контексту пустой функции, а не к параметру e, который должен проверять функция)
beeThree

Можем ли мы использовать case undefined:вместо case typeof(e) == "undefined":?
Борис Дж.

43

Вы можете использовать lodash : _.isEmpty (value).

Она охватывает много случаев , как {}, '', null, undefinedи т.д.

Но он всегда возвращается trueдля Numberтипа примитивных типов данных JavaScript, таких как _.isEmpty(10)или _.isEmpty(Number.MAX_VALUE)оба true.


_.isEmpty(" "); // => false
Эрих

1
@Erich Потому " "что не пусто. _.isEmpty("");возвращает истину.
Моши

1
Совершенно верно - я упоминал об этом, потому что некоторые другие ответы здесь подразумевают проверку формы и проверку, состоит ли строка только из пробела, и эта единственная функция lodash сама по себе не решит эту проблему.
Эрих

@ Эрих, теперь я понял, спасибо, что упомянул.
Моши

36

Пытаться:

if (str && str.trim().length) {  
    //...
}

2
Требуется ли свойство длины?
frogcoder

str.trim().lengthбудет быстрее, чем str.trim(), примерно на 1% в соответствии с моими собственными результатами тестирования.
devildelta

2
@devildelta - Ваш 1% является ошибкой в ​​вашем тесте.
Стивен М Ирвинг

OP ищет тест на наличие пустой строки, неопределенного или нулевого. Это тестирование для строки, которая не является ни одним из этих условий. Он ничего не сказал о пробелах, только о строках. Вы можете проверить условия OP только с этим, если вы уверены, что никакие другие типы данных не сохранены в переменной: if (!str) { ... }
Стивен М Ирвинг

36

Функция:

function is_empty(x)
{
    return (
        (typeof x == 'undefined')
                    ||
        (x == null)
                    ||
        (x == false)  //same as: !x
                    ||
        (x.length == 0)
                    ||
        (x == "")
                    ||
        (x.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(x))
                    ||
        (/^\s*$/.test(x))
    );
}

PS: в JavaScript не используйте разрыв строки после return;


1
Есть ли шанс, что вы могли бы объяснить, что делает каждая проверка? :)
DanV

2
-1 Они проверяют разные вещи. Нет смысла объединять их все в одно ifутверждение.
Беннет МакЭлви

1
typeof MyVariable == 'undefined' не различает инициализированную переменную с неопределенным значением и необъявленную переменную, если переменная не была первоначально объявлена ​​и инициализирована нулевым значением. Проверка свойства length приводит к тому, что строковый примитив оборачивается строковым объектом.
Скотт Маркус

34
var s; // undefined
var s = ""; // ""
s.length // 0

Там нет ничего, представляющего пустую строку в JavaScript. Выполните проверку либо length(если вы знаете, что var всегда будет строкой), либо против""


29

Я бы не стал слишком беспокоиться о самом эффективном методе. Используйте то, что наиболее ясно для вашего намерения. Для меня это обычно strVar == "".

Согласно комментарию Константина , если бы strVar мог каким-то образом содержать целочисленное значение 0, то это действительно была бы одна из тех ситуаций, проясняющих намерения.


11
Плохая идея. Вы получите правду, если strVar случайно назначен 0.
Константин

5
Я согласен с тем, что разъяснение вашего намерения более важно, чем любые микрооптимизации, которые могут принести другие методы, но лучше использовать оператор строгого сравнения === . Возвращает true только если strVarэто пустая строка.
бесполезный код

Проверка не пройдена, если она не определена. Так что, если (ул) работает лучше
Валентин Хайниц

3
@ValentinHeinitz, если str присвоено значение Falsey 0 или «0», если (str) будет ложно сообщать об истине. Лучший подход - если (str === ""). Это просто и никогда не подведет.
Скотт Маркус


21

Представление

Я выполняю тесты на macOS v10.13.6 (High Sierra) для 18 выбранных решений. Решения работают немного иначе (для входных данных углового случая), которые были представлены во фрагменте ниже.

Выводы

  • простые решения , основанные на !str, ==, ===и lengthбыстро для всех браузеров (А, В, С, G, I, J)
  • решения, основанные на регулярном выражении ( test, replace) и charAtсамые медленные для всех браузеров (H, L, M, P)
  • решения, помеченные как самые быстрые, были самыми быстрыми только за один запуск теста, но во многих случаях они изменяются в группе «быстрых» решений

Введите описание изображения здесь

подробности

В следующем фрагменте я сравниваю результаты выбранных 18 методов, используя разные входные параметры

  • "" "a" " "- пустая строка, строка с буквой и строка с пробелом
  • [] {} f- массив, объект и функция
  • 0 1 NaN Infinity - номера
  • true false - логическое значение
  • null undefined

Не все протестированные методы поддерживают все входные данные.

И затем для всех методов я выполняю тест скорости str = ""для браузеров Chrome v78.0.0, Safari v13.0.4 и Firefox v71.0.0 - вы можете запустить тесты на своей машине здесь

Введите описание изображения здесь


Это действительно круто! Я люблю видеть все это выложенным! Спасибо!
WebWanderer

это тщательное исследование - спасибо
Деян

20

Много ответов и много разных возможностей!

Без сомнения, для быстрой и простой реализации победителем является: if (!str.length) {...}

Тем не менее, как и многие другие примеры доступны. Лучший функциональный метод для этого, я бы предложил:

function empty(str)
{
    if (typeof str == 'undefined' || !str || str.length === 0 || str === "" || !/[^\s]/.test(str) || /^\s*$/.test(str) || str.replace(/\s/g,"") === "")
    {
        return true;
    }
    else
    {
        return false;
    }
}

Я немного излишне знаю.


2
Проверка на неопределенные должна быть перемещена в первую очередь в проверках, иначе неопределенные элементы вызовут исключения в предыдущих проверках.
SvdSinner

Полностью согласен! ХОРОШО ПОЙМАЛ. Я отредактирую свой ответ выше!
tfont

str.length === 0возвращает true для любой функции, которая не имеет формальных параметров.
RobG

20

Вы также можете использовать регулярные выражения:

if((/^\s*$/).test(str)) { }

Проверяет строки, которые либо пусты, либо заполнены пробелами.


Это работает, но это также ужасно дорого. Хорошо, если вы просто хотите проверить одну или две вещи, а не большой набор.
Орфей

19
  1. проверить, что var a;существуют
  2. обрезать false spacesзначение, затем проверитьemptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }

17

Кроме того, в случае, если вы рассматриваете заполненную пробелом строку как «пустую».

Вы можете проверить это с помощью этого регулярного выражения:

!/\S/.test(string); // Returns true if blank.

14

Я обычно использую что-то вроде этого,

if (!str.length) {
    // Do something
}

3
Быстрее всего, если вы знаете, что переменная является строкой. Выдает ошибку, если переменная не определена.
Адриан Хоуп-Бейли

@ AdrianHope-Bailie, зачем тестировать неопределенную переменную?
Абимаэль Мартелл

2
@AbimaelMartell Почему бы и нет? У вас есть переменная, которую вы объявили или передали вам из какой-то области, которую вы не можете контролировать, например, в ответе на вызов метода или API. Можно предположить, что оно содержит значение, и использовать приведенную выше проверку, но если оно не определено или равно нулю, вы получите ошибку. var test = null; if (! test.length) {alert («
Адриан

OP спрашивал «как проверить пустую строку», неопределенная переменная не является пустой строкой. В любом случае, вы можете проверить, typeof variable != "undefined"прежде чем проверять, пусто ли.
Абимаэль Мартелл

10

Я не заметил ответа, который учитывает возможность появления нулевых символов в строке. Например, если у нас есть нулевая строка символов:

var y = "\0"; // an empty string, but has a null character
(y === "") // false, testing against an empty string does not work
(y.length === 0) // false
(y) // true, this is also not expected
(y.match(/^[\s]*$/)) // false, again not wanted

Чтобы проверить его пустоту, можно сделать что-то вроде этого:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

Он работает с пустой строкой и пустой строкой и доступен для всех строк. Кроме того, его можно расширить, чтобы он содержал другие пустые или пробельные символы JavaScript (т. Е. Неразрывный пробел, метка порядка байтов, разделитель строк / абзацев и т. Д.).


2
Интересный анализ. Я не думаю, что это будет актуально в 99,9% случаев. НО я недавно обнаружил, что MySQL оценивает столбец как «нулевой», если (и только если) этот столбец содержит нулевой символ («\ 0»). С другой стороны, Oracle не будет оценивать "\ 0" как нулевое, предпочитая обрабатывать его как строку длиной 1 (где этот один символ является нулевым символом). Это может вызвать путаницу, если с ней не справиться должным образом, потому что многие веб-разработчики работают с внутренней базой данных, которая может проходить через различные типы «нулевых» значений. Это должно быть в глубине души каждого разработчика.
телега верховая лошадь

10

Между тем, у нас может быть одна функция, которая проверяет все пустые значения, такие как null, undefined, '', '', {}, [] . Так что я просто написал это.

var isEmpty = function(data) {
    if(typeof(data) === 'object'){
        if(JSON.stringify(data) === '{}' || JSON.stringify(data) === '[]'){
            return true;
        }else if(!data){
            return true;
        }
        return false;
    }else if(typeof(data) === 'string'){
        if(!data.trim()){
            return true;
        }
        return false;
    }else if(typeof(data) === 'undefined'){
        return true;
    }else{
        return false;
    }
}

Варианты использования и результаты.

console.log(isEmpty()); // true
console.log(isEmpty(null)); // true
console.log(isEmpty('')); // true
console.log(isEmpty('  ')); // true
console.log(isEmpty(undefined)); // true
console.log(isEmpty({})); // true
console.log(isEmpty([])); // true
console.log(isEmpty(0)); // false
console.log(isEmpty('Hey')); // false

10

На данный момент нет прямого метода, такого как string.empty, чтобы проверить, является ли строка пустой или нет. Но в вашем коде вы можете использовать проверку оболочки для пустой строки, например:

// considering the variable in which your string is saved is named str.

if (str && str.length>0) { 

  // Your code here which you want to run if the string is not empty.

}

Используя это, вы также можете убедиться, что строка не является неопределенной или нулевой. Помните, неопределенные, нулевые и пустые три разные вещи.


Это приведет к ошибке на нулевом или неопределенном, потому что мы не должны напрямую выполнять операцию с переменной, которая является нулевой или неопределенной - проверка на str существует, прежде чем делать это, как указано в других ответах, а также заметить, что это сработает на let abc. = '' но не на let abc = '', эти два разные.
whoami

Рассмотрим let rand = ()=>Math.random(), затем rand && rand.length > 0)возвращает false, но ясно, что fn не является «пустым». Т.е. он возвращает false для любой функции, которая не имеет параметров формата.
RobG

@RobG Math.random()возвращает число, а не строку. И этот ответ о строках. ;-)
Харшит Агарвал

10

Все эти ответы хороши.

Но я не могу быть уверен, что переменная является строкой, не содержит только пробелов (это важно для меня) и может содержать «0» (строка).

Моя версия:

function empty(str){
    return !str || !/[^\s]+/.test(str);
}

empty(null); // true
empty(0); // true
empty(7); // false
empty(""); // true
empty("0"); // false
empty("  "); // true

Образец на jsfiddle .


1
А? Если вы ожидаете строку empty(0)и empty(7)должны вернуть то же значение.
Беннет МакЭлви,

В моем конкретном случае - empty("0")должен возвращать false(потому что это не пустая строка), но empty(0)должен возвращаться, trueпотому что она пуста :)
Андрон

Но 0 не пусто! Это число, и числа не могут быть полными или пустыми. Конечно, это ваша функция и поэтому должна удовлетворять вашим требованиям, но emptyв данном случае это вводящее в заблуждение имя.
Беннет МакЭлви

Я думаю, что это имя emptyхорошо. В документации php для пустой функции: Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.разница между PHPэтой функцией и этой строкой - эта строка '0'не будет определяться как пустая.
Андрон

Как я уже сказал, это ваша функция: называйте это как хотите. Но emptyэто неточное и вводящее в заблуждение имя. Интересно, что PHP также имеет функцию с плохим именем empty, но ошибки PHP не имеют ничего общего с JavaScript.
Беннет МакЭлви

10

Я не видел хорошего ответа здесь (по крайней мере, не тот ответ, который подходит мне)

Поэтому я решил ответить себе:

value === undefined || value === null || value === "";

Вам нужно начать проверять, не определено ли оно. В противном случае ваш метод может взорваться, и тогда вы можете проверить, равен ли он нулю или равен пустой строке.

Вы не можете иметь! или только if(value)потому, что если вы проверите, 0он даст вам ложный ответ (0 - ложь).

С учетом сказанного, оберните его таким способом:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS: Вам не нужно проверять typeof , так как он взорвется и выбросит еще до того, как войдет в метод


Вероятно, лучше использовать логическую (value) конструкцию, которая обрабатывает неопределенные и нулевые значения (а также 0, -0, false, NaN) как false. См. Stackoverflow.com/questions/856324/…
Журавлев А.

9

Если нужно обнаружить не только пустые, но и пустые строки, я добавлю к ответу Горала:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}

8

Попробуй это

str.value.length == 0

3
"".value.lengthвызовет ошибку. Это должно бытьstr.length === 0
AndFisher

Это TRow TypeErrorЕсли strравен undefinedилиnull
RousseauAlexandre

8

Вы можете легко добавить его к собственному объекту String в JavaScript и использовать его снова и снова ...
Что-то простое, например, приведенный ниже, может помочь вам, если вы хотите проверить ''пустые строки:

String.prototype.isEmpty = String.prototype.isEmpty || function() {
  return !(!!this.length);
}

В противном случае, если вы хотите проверить как ''пустую строку, так и ' 'пробел, вы можете сделать это, просто добавив trim()что-то вроде кода ниже:

String.prototype.isEmpty = String.prototype.isEmpty || function() {
   return !(!!this.trim().length);
}

и вы можете назвать это так:

''.isEmpty(); //return true
'alireza'.isEmpty(); //return false

Какая польза от выполнения, !(!!this.length)а не просто !this(или !this.trim()для второго варианта)? Строка нулевой длины уже ложна, круглые скобки избыточны, и отрицание ее три раза - это то же самое, что отрицание ее один раз.
Джон Монтгомери

8

Попробуй это:

export const isEmpty = string => (!string || !string.length);

8

Я провел некоторое исследование того, что произойдет, если вы передадите не строковое и непустое / нулевое значение в функцию тестера. Как многие знают, (0 == "") верно в JavaScript, но поскольку 0 является значением, а не пустым или нулевым, вы можете проверить его.

Следующие две функции возвращают true только для неопределенных, нулевых, пустых / пробельных значений и false для всего остального, такого как числа, логические значения, объекты, выражения и т. Д.

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

Существуют более сложные примеры, но они просты и дают согласованные результаты. Нет необходимости проверять неопределенность, поскольку она включена в проверку (value == null). Вы также можете имитировать поведение C # , добавляя их в строку следующим образом:

String.IsNullOrEmpty = function (value) { ... }

Вы не хотите помещать его в прототип Strings, потому что, если экземпляр класса String имеет значение null, он выдаст ошибку:

String.prototype.IsNullOrEmpty = function (value) { ... }
var myvar = null;
if (1 == 2) { myvar = "OK"; } // Could be set
myvar.IsNullOrEmpty(); // Throws error

Я проверил со следующим массивом значений. Вы можете пройтись по нему, чтобы проверить свои функции, если сомневаетесь.

// Helper items
var MyClass = function (b) { this.a = "Hello World!"; this.b = b; };
MyClass.prototype.hello = function () { if (this.b == null) { alert(this.a); } else { alert(this.b); } };
var z;
var arr = [
// 0: Explanation for printing, 1: actual value
    ['undefined', undefined],
    ['(var) z', z],
    ['null', null],
    ['empty', ''],
    ['space', ' '],
    ['tab', '\t'],
    ['newline', '\n'],
    ['carriage return', '\r'],
    ['"\\r\\n"', '\r\n'],
    ['"\\n\\r"', '\n\r'],
    ['" \\t \\n "', ' \t \n '],
    ['" txt \\t test \\n"', ' txt \t test \n'],
    ['"txt"', "txt"],
    ['"undefined"', 'undefined'],
    ['"null"', 'null'],
    ['"0"', '0'],
    ['"1"', '1'],
    ['"1.5"', '1.5'],
    ['"1,5"', '1,5'], // Valid number in some locales, not in JavaScript
    ['comma', ','],
    ['dot', '.'],
    ['".5"', '.5'],
    ['0', 0],
    ['0.0', 0.0],
    ['1', 1],
    ['1.5', 1.5],
    ['NaN', NaN],
    ['/\S/', /\S/],
    ['true', true],
    ['false', false],
    ['function, returns true', function () { return true; } ],
    ['function, returns false', function () { return false; } ],
    ['function, returns null', function () { return null; } ],
    ['function, returns string', function () { return "test"; } ],
    ['function, returns undefined', function () { } ],
    ['MyClass', MyClass],
    ['new MyClass', new MyClass()],
    ['empty object', {}],
    ['non-empty object', { a: "a", match: "bogus", test: "bogus"}],
    ['object with toString: string', { a: "a", match: "bogus", test: "bogus", toString: function () { return "test"; } }],
    ['object with toString: null', { a: "a", match: "bogus", test: "bogus", toString: function () { return null; } }]
];

Если вы просто перестанете использовать == и используете ===, тогда это решит проблему, если (s === "").
Скотт Маркус

8

Чтобы проверить, является ли это точно пустой строкой:

if(val==="")...

Чтобы проверить, является ли это пустой строкой ИЛИ логическим эквивалентом для нулевого значения (null, undefined, 0, NaN, false, ...):

if(!val)...

7

Там нет isEmpty()метода, вы должны проверить тип и длину:

if (typeof test === 'string' && test.length === 0){
  ...

Проверка типа необходима, чтобы избежать ошибок времени выполнения, когда testесть undefinedили null.


7

Игнорируя строки пробелов, вы можете использовать это, чтобы проверить наличие нулевых, пустых и неопределенных:

var obj = {};
(!!obj.str) // Returns false

obj.str = "";
(!!obj.str) // Returns false

obj.str = null;
(!!obj.str) // Returns false

Он лаконичен и работает для неопределенных свойств, хотя и не самый читаемый.

Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.