Как проверить пустую / неопределенную / пустую строку в JavaScript? - PullRequest
2454 голосов
/ 30 сентября 2008

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

Ответы [ 41 ]

7 голосов
/ 14 мая 2013

Я провел некоторое исследование того, что произойдет, если вы передадите непустое и непустое / пустое значение в функцию тестера. Как многие знают, (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 равен нулю, он выдаст ошибку:

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 js
    ['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; } }]
];
7 голосов
/ 02 июня 2017

, чтобы проверить, является ли пустая строка:

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

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

if(!val)...
7 голосов
/ 15 февраля 2010

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

if (str == "") {
     //Do Something
}
else {
     //Do Something Else
}
7 голосов
/ 12 марта 2018

Между тем, у нас может быть одна функция, которая проверяет все «пустые места», например 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
7 голосов
/ 01 июня 2011

Я использую комбинацию, самые быстрые проверки - первые.

function isBlank(pString){
    if (!pString || pString.length == 0) {
        return true;
    }
    // checks for a non-white space character 
    // which I think [citation needed] is faster 
    // than removing all the whitespace and checking 
    // against an empty string
    return !/[^\s]+/.test(pString);
}
6 голосов
/ 05 ноября 2016

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

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

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

5 голосов
/ 22 июля 2010

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

str.value.length == 0
5 голосов
/ 07 октября 2017

Вы можете легко добавить его к собственному 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
5 голосов
/ 15 июля 2013

Не думайте, что проверяемая вами переменная является строкой. Не думайте, что если эта переменная имеет длину, то это строка.

Дело в том: тщательно продумайте, что ваше приложение должно делать и принимать. Создайте что-нибудь надежное.

Если ваш метод / функция должен обрабатывать только непустую строку, то проверьте, является ли аргумент непустой строкой, и не выполняйте какой-либо «трюк».

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


var getLastChar = function (str) {
 if (str.length > 0)
   return str.charAt(str.length - 1)
}

getLastChar('hello')
=> "o"

getLastChar([0,1,2,3])
=> TypeError: Object [object Array] has no method 'charAt'

Итак, я бы придерживался


if (myVar === '')
  ...

4 голосов
/ 10 июня 2015

Библиотека Javascript подчеркивания http://underscorejs.org/ предоставляет очень полезную функцию _.isEmpty() для проверки пустых строк и других пустых объектов.

Ссылка: http://underscorejs.org/#isEmpty

isEmpty _.isEmpty(object)
Возвращает true, если перечислимый объект не содержит значений (не перечислимых собственных свойств). Для строк и массивоподобных объектов _.isEmpty проверяет, равно ли свойство длины 0.

_.isEmpty([1, 2, 3]);
=> false

_.isEmpty({});
=> правда

Другие очень полезные функции подчеркивания включают в себя:
http://underscorejs.org/#isNull _.isNull(object)
http://underscorejs.org/#isUndefined _.isUndefined(value)
http://underscorejs.org/#has _.has(object, key)

...