Питання Як перевірити наявність порожньої рядка у JavaScript?


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


2146
2017-09-30 17:17


походження


просто FYI, я думаю, що найбільш корисні API для класу String є Mozilla і Javascript Kit. [elated.com] (elated.com/articles/working-with-strings ) має навчальний посібник про всі властивості, методи, ... Примітка: посилання Mozilla було оновлено до developer.mozilla.org/en/JavaScript/Reference/Global_Objects/... - Gene T


Відповіді:


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

if (strValue) {
    //do something
}

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

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

2742
2017-09-30 17:20



Випробування властивості довжини насправді може бути швидше, ніж тестування рядка з "", оскільки інтерпретатору не доведеться створювати об'єкт String з рядка буквальний. - Vincent Robert
@ Вінcент робить деякі наївні профілі в інструментах розробника Chrome, тестування === '' проти .length не показав ніякого помітного поліпшення (і використання .length працює, якщо ви можете припустити, що у вас є рядок) - bdukes
@bdukes, коли ви починаєте піклуватися про таку мікро-оптимізацію, я не думаю, що Chrome є веб-переглядачем, де ви стикаєтеся з більшістю ваших проблем із продуктивністю ... - Vincent Robert
Просто зазначимо, що якщо ваше визначення "порожній рядок" містить пробіл, то це рішення не підходить. Строка з 1 або більше пробілів повертає істину вище. Якщо ви використовуєте jQuery, ви можете просто скористатись цим: if ($ .trim (ref) .length === 0) - за цією відповіддю на аналогічне запитання: stackoverflow.com/questions/2031085/... - CodeClimber
Як і очікувалося .length > 0 насправді набагато швидше ніж порівнювати з рядком буквально! Перевірте це jsPerf - Chad


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

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());
};

903
2017-07-16 01:45



чому 0 === str.length замість str.length === 0? - Vincent
@Вінсентські умови часто записуються як це if (variable == constant value) і якщо ви забудете '=', то ви призначаєте постійну величину для змінної замість тестування. Код буде працювати, оскільки ви можете призначити змінну в if. Отже, більш безпечним способом записати цю умову є зміна постійної величини та змінної. Таким чином, при перевірці коду ви побачите помилку (недійсна ліва сторона в присвоєнні). Ви також можете використовувати щось на зразок JSHint, щоб заборонити присвоєння в умовах і бути попереджений, коли ви пишете його. - florian
соромно що /^\s*$/.test(str) насправді не читається - може бути краще видалити пробіли за допомогою простішого коду або регулярного виразу? побачити stackoverflow.com/questions/6623231/... а також stackoverflow.com/questions/10800355/... - Adrien Be
/^\s*$/.test(str) можна замінити на str.trim (). довжина === 0 - Schadenfreude
@Вінцент це також називають "Yoda Conditions", як if blue is the sky. Побачити dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html - AZ.


Все вище, добре, але це буде ще краще. використовувати !!(не ні) оператор.

if(!!str){
some code here;
}

або використовуйте тип лиття:

if(Boolean(str)){
    codes here;
}

Обидва роблять ту саму функцію, введіть casting змінну до логічного, де str є змінною.
Повертає false за null,undefined,0,000,"",false.
Повертає true для рядка "0" та пробілу "".


225
2018-03-30 13:34



Чому це "ще краще"? - Mene
Чи є якась різниця між поведінкою if(str) і if(!!str)? - Peter Olson
@PeterOlson, якщо ви намагаєтесь зберегти змінну як логічне значення, яке перевіряє кілька рядків для вмісту, то ви б хотіли це зробити .. aka var any = (!!str1 && !!str2 && !!str3) обробка, якщо там є і номер - John Ruddell
Це рішення я завжди використовую. !!str.trim() щоб переконатися, що рядок не виготовлений лише з пробілів. - Dario Oddenino
Не здається схоже на зламати Boolean(str) є набагато більш читабельним і менш "wtfish". - shinzou


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

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

88
2017-09-30 23:08



Але чи робить ця робота, якщо те, що ви дійсно хочете протестувати, це ланцюжок з непрофесійним вмістом. Чи є менш дорогий спосіб перевірити це? - flash
Як щодо тривалості майна? - driAn
Замість того, щоб видалити всі прогалини, чому б не просто перевірити, чи існує не пробіл? Має два переваги, які він може врятувати рано, якщо є непропускний символ, і він не повертає новий рядок, який ви потім перевіряєте. if(str.match(/\S/g)){} - mpen
@Mark FYI вам не потрібен глобальний модифікатор, оскільки матч першої появи не пробілу означає, що рядок не є порожнім: str.match(/\S/) - neezer
Важливо: це буде кидати помилки, якщо str є null. - nfechner


Найближча річ, яку ви можете отримати до str.Empty (за умови, що str є String), є:

if (!str.length) { ...

75
2017-09-30 19:17





Я використовую :

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

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

44
2017-07-09 18:52



Це рішення є більш мовним агностиком. Єдиною функцією JavaScript, на яку вона покладається, є типof. Таким чином, це хороший приклад рішення, яке можна використовувати, коли ви не довіряєте реалізаціям у різних веб-переглядачах та не встигаєте знайти краще рішення. (IE, немає доступу до Інтернету). Це щось на кшталт доказів. Не найчистіше, але ви можете бути впевнені, що він буде працювати, не знаючи надто багато про JavaScript. - Jeff Davis
Я б трохи далі й нахилив його з оператором === для невизначеного випадку. Інакше це просто ідеальна відповідь. - Carlos Alberto Martínez Gadea
The typeof в switch не працював для мене. Я додав if (typeof e == "undefined") тест і це працює. Чому? - Lucas


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

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


23
2017-09-30 17:42





Спробуйте:

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

22
2018-01-09 02:54



Чи потрібна довжина майна? - frogcoder


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

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


21
2017-09-30 17:20



Погана ідея. Ви отримаєте справу, якщо strVar випадково призначено 0. - Constantin
Я згоден з тим, що ваше бажання зрозуміло, важливіше, ніж будь-яка мікро-оптимізація, яка може призвести до інших методів, але за допомогою суворий оператор порівняння  === було б краще. Це повертає тільки true, якщо strVar це порожня рядок - Useless Code
Перевірка не працює, якщо вона не визначена. Отже, якщо (str) працює краще - Valentin Heinitz
@ Валентин Хейніц, якщо str було призначено помилкове значення 0 або "0", якщо (str) помилково повідомлятиме про істину. Найкращий підхід - якщо (str === ""). Це простий і воно ніколи не вдасться. - Scott Marcus
Який дорівнює оператору (== vs ===) слід використовувати для порівняння JavaScript? - nobar


Функція:

function Is_Empty_or_Undefined (MyVar){      return (

        (typeof MyVar== 'undefined')
                    ||
        (MyVar == null) 
                    ||
        (MyVar == false)  //!MyVariable
                    ||
        (MyVar.length == 0)
                    ||
        (MyVar == "")
                    ||
        (MyVar.replace(/\s/g,"") == "")
                    ||
        (!/[^\s]/.test(MyVar))
                    ||
        (/^\s*$/.test(MyVar))
  );
}

19
2018-02-27 20:31



Будь-який шанс, ви могли б пояснити, що робить кожна перевірка? :) - DanV
-1 Вони випробовують різні речі. Немає сенсу поставити їх у єдине if заява - Bennett McElwee
@ Беннет досить впевнений, що він просто робить це, щоб показати різні способи ... - Robert Pounder
typeof MyVariable == 'undefined' не розпізнає між ініціалізованою змінною з невизначеним значенням та незареєстрованою змінною, якщо первісна змінна не була оголошена та ініціалізована на нуль. Перевірка властивості довжини призводить до того, що рядок примітиву буде загорнутий у рядковий об'єкт. - Scott Marcus