Як я можу перевірити наявність порожнього / невизначеного / нульового рядка в JavaScript?


2851

Я бачив це запитання , але конкретного прикладу JavaScript не бачив. Чи string.Emptyє в JavaScript доступний простий доступ, чи це лише випадок перевірки ""?


2
просто FYI, я думаю, що найкорисніші API для класу String є в Mozilla та javascript kit . [elated.com] ( elated.com/articles/working-with-strings ) має навчальний посібник щодо всіх властивостей, методів String, ... Зверніть увагу: посилання Mozilla оновлено до developer.mozilla.org/uk/ JavaScript / Довідка / Global_Objects /…
Gene T


Це дуже допомогло б, якби вимога була чітко визначена. Для яких значень має бути порожнє повернення? Перевірка "" висновку, що вона повинна повертати істину лише у тому випадку, якщо значення є рядком Type і довжиною 0. Багато відповідей припускають, що воно також повинно повертати істинне для деяких або всіх значень фальси.
RobG

Відповіді:


3565

Якщо ви просто хочете перевірити, чи є якесь значення, можете зробити

if (strValue) {
    //do something
}

Якщо вам потрібно перевірити спеціально для порожнього рядка над нулем, я думаю , що перевірка проти ""є кращим вибором, використовуючи в ===оператора (так що ви знаєте , що це, насправді, рядок ви порівнюєте проти).

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

173
Тестування властивості length може бути фактично швидшим, ніж тестування рядка проти "", тому що інтерпретатору не доведеться створювати об'єкт String з літерального рядка.
Вінсент Роберт

25
@Вінсент робив наївне профілювання інструментів для розробників Chrome, тестування === ''порівняно .lengthне показало помітного поліпшення (і використовуючи .lengthлише роботи, якщо ви можете припустити, що у вас є рядок)
bdukes

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

15
Зауважимо лише, що якщо ваше визначення "порожній рядок" включає пробіл, то це рішення не підходить. Рядок з 1 або більше пробілів повертає істину вище. Якщо ви використовуєте JQuery ви можете просто використовувати: якщо ($ .trim (посилання) .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
@ Вінсент це також називають "Умовами Йоди", як 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)набагато читає і менш "wtfish".
shinzou


99

Якщо вам потрібно переконатися, що рядок - це не лише купа порожніх пробілів (я припускаю, що це для перевірки форми), вам потрібно зробити заміну на пробіли.

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

8
Але виконує роботу, якщо те, що ви насправді хочете перевірити, це рядок із непробільним вмістом. Чи є менш дорогий спосіб перевірити це?
спалах

4
Як щодо властивості довжини?
driAn

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

34
@Mark FYI, вам не знадобиться глобальний модифікатор, оскільки відповідність першого появи символу, що не є пробілом, означатиме, що рядок не порожній:str.match(/\S/)
neezer

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. Тож це хороший приклад рішення, яке ви можете використовувати, коли ви не довіряєте реалізації в різних браузерах і не встигаєте знайти краще рішення. (IE, немає доступу до Інтернету). Це щось на зразок доказу. Не найчистіший, але ви можете бути впевнені, що він буде працювати, не знаючи занадто багато про JavaScript.
Джефф Девіс

2
Я б пішов ще трохи далі і забив це оператором === для невизначеного випадку. Інакше це просто просто ідеальна відповідь.
xarlymg89

typeofУ switchне працює для мене. Я додав if (typeof e == "undefined")тест, і це працює. Чому?
Лукас

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

Чи можемо ми використати case undefined:замість case typeof(e) == "undefined":?
Борис Дж.

43

Ви можете використовувати lodash : _.isEmpty (значення).

Вона охоплює багато випадків , як {}, '', null, undefinedі т.д.

Але він завжди повертається trueдля Numberтипу примітивних типів JavaScript, таких як _.isEmpty(10)або _.isEmpty(Number.MAX_VALUE)обидва true.


_.isEmpty(" "); // => false
Еріх

1
@Erich Тому що " "це не порожньо. _.isEmpty("");повертає правду.
Мошій,

1
Цілком вірно - я згадав про це, оскільки деякі з інших відповідей тут передбачають перевірку форми та перевірку, чи рядок складається лише з пробілів, і ця одна функція лодаша сама по собі не вирішить цю проблему.
Еріх

@Erich, тепер я зрозумів, дякую за згадування.
Мошій

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твердження.
Bennett McElwee

1
typeof MyVariable == 'undefined' не розрізняє ініціалізовану змінну з невизначеним значенням та незадекларованою змінною, якщо змінна спочатку не була оголошена та ініціалізована до нуля. Перевірка властивості довжини призводить до того, що рядок примітиву загортається в об'єкт рядка.
Скотт Маркус

35

Спробуйте:

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

2
Чи потрібна властивість довжини?
frogcoder

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

2
@devildelta - Ваш 1% - це помилка у вашому тесті.
Стівен М Ірвінг

ОП шукає перевірити порожній рядок, невизначений або нульовий. Це тестування на рядок, який не є жодним із цих умов. Він також нічого не сказав про пробіли. Ви можете перевірити умови ОП саме цим чином, якщо ви впевнені, що в змінній не зберігаються інші типи даних: if (!str) { ... }
Stephen M Irving

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

В JavaScript нічого не представляє порожній рядок. Зробіть перевірку на або length(якщо ви знаєте, що var завжди буде рядком), або проти""


29

Я б не переймався надто ефективним методом. Використовуйте те, що найбільш зрозуміло вашому наміру. Для мене це зазвичайstrVar == "" .

Відповідно до коментаря Константина , якби strVar міг би дещо отримати ціле число 0, то це справді буде однією з таких ситуацій, що з'ясовують намір.


11
Погана ідея. Ви дійсні, якщо strVar буде випадково призначено 0.
Константин

5
Я погоджуюся, що пояснення вашого наміру важливіше, ніж будь-які мікрооптимізації, які можуть принести інші методи, але краще використовувати оператор жорсткого порівняння === . Повертає значення true лише якщо strVarце порожній рядок.
Марний код

Якщо чек не визначений, чек не вдається. Тож якщо (str) працює краще
Valentin Heinitz

3
@ValentinHeinitz, якщо str було призначено значення фальси 0 або "0", якщо (str) помилково повідомило б про істину. Найкращий підхід - if (str === ""). Це просто і ніколи не вийде з ладу.
Скотт Маркус


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 
    }

19

Продуктивність

Я виконую тести на 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

це ретельне дослідження - дякую
Діан

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 ("Адріан помиляється");}
Adrian Hope-Bailie

ОП запитували "як перевірити порожню рядок", не визначена змінна не порожня рядок. Все одно ви можете перевірити, 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 оцінює стовпець на "null", якщо (і тільки якщо) цей стовпець містить нульовий символ ("\ 0"). Oracle, з іншого боку, не оцінює "\ 0" як нульовий, вважаючи за краще вважати його рядком довжиною 1 (де цей символ є нульовим символом). Це може спричинити плутанину при неправильному поводженні, оскільки багато веб-розробники працюють з базовою базою даних, яка може проходити через різні типи "нульових" значень. Це повинно знаходитись у центрі уваги кожного розробника.
cartbeforehorse

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 = '', але не дозволено abc = '', ці два різні.
whoami

Поміркуйте let rand = ()=>Math.random(), тоді rand && rand.length > 0)повертається хибним, але явно fn не є "порожнім". Тобто він повертає помилку для будь-якої функції, яка не має параметрів формату.
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)повинен повернути те саме значення.
Bennett McElwee

У моєму конкретному випадку - empty("0")треба повернутися false(тому що це не порожня рядок), але empty(0)повинен повернутися trueтому, що він порожній :)
Андрон

Але 0 не порожній! Це число, і цифри не можуть бути повними або порожніми. Звичайно, це ваша функція, і тому вона повинна відповідати вашим вимогам, але emptyв цьому випадку це оманливе ім'я.
Bennett McElwee

Я думаю, що це ім'я 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.
Bennett McElwee

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) як хибні. Дивіться 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

Це кидання A TypeErrorIf 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 є значенням, а не порожнім або нульовим, ви можете перевірити його.

Наступні дві функції повертають істинні лише для невизначених, нульових, порожніх / значень пробілів та помилок для всього іншого, таких як числа, булеві, об'єкти, вирази тощо.

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

Існують більш складні приклади, але вони прості і дають стійкі результати. Немає необхідності перевіряти невизначеність, оскільки вона включена у перевірку (value == null). Ви також можете імітувати поведінку C # , додавши їх до String так:

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

Ви не хочете ставити його в прототип Strings, тому що якщо екземпляр класу String є нульовим, він помилиться:

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.