Я видел этот вопрос , но я не видел конкретного примера JavaScript. Есть ли простое string.Empty
в JavaScript или это просто проверка ""
?
Я видел этот вопрос , но я не видел конкретного примера JavaScript. Есть ли простое string.Empty
в JavaScript или это просто проверка ""
?
Ответы:
Если вы просто хотите проверить, есть ли какое-либо значение, вы можете сделать
if (strValue) {
//do something
}
Если вам нужно проверить специально для пустой строки над нулем, я думаю , что проверка против ""
является лучшим выбором, используя в ===
оператора (так что вы знаете , что это, на самом деле, строку вы сравниваете против).
if (strValue === "") {
//...
}
=== ''
и тестирование .length
не показали заметного улучшения (и использование .length
только работ, если можно предположить, что у вас есть строка)
Для проверки, является ли строка пустой, нулевой или неопределенной, я использую:
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());
};
if (variable == constant value)
и если вы забудете '=', вы назначаете постоянное значение переменной вместо тестирования. Код все равно будет работать, так как вы можете назначить переменную в if. Поэтому более безопасный способ написать это условие - поменять местами постоянное значение и переменную. Таким образом, когда вы тестируете свой код, вы увидите ошибку (неверная левосторонняя сторона в назначении). Вы также можете использовать что-то вроде JSHint, чтобы запретить присваивание в условиях и получать предупреждения при его написании.
/^\s*$/.test(str)
самом деле не читается - может быть, лучше удалить пробелы, используя более простой код или регулярное выражение? см. stackoverflow.com/questions/6623231/…, а также stackoverflow.com/questions/10800355/…
if blue is the sky
. См. Dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
Все предыдущие ответы хороши, но это будет еще лучше. Используйте !!
( не не ) оператор.
if(!!str){
// Some code here
}
Или используйте тип литья:
if(Boolean(str)){
// Code here
}
Оба выполняют одну и ту же функцию. Введите переменную в логическое значение, где str
переменная.
Это возвращается false
для null,undefined,0,000,"",false
.
Возвращается true
для строки "0" и пробела "".
if(str)
и if(!!str)
?
var any = (!!str1 && !!str2 && !!str3)
если там тоже есть число
!!str.trim()
чтобы убедиться, что строка состоит не только из пробелов.
Boolean(str)
гораздо более читабелен и менее «весит».
Самое близкое, что вы можете получить str.Empty
(с условием, что str является String):
if (!str.length) { ...
str.Empty
.
Если вам нужно убедиться, что строка - это не просто набор пустых пробелов (я предполагаю, что это для проверки формы), вам нужно заменить эти пробелы.
if(str.replace(/\s/g,"") == ""){
}
if(str.match(/\S/g)){}
str.match(/\S/)
var trimLeft = /^\s+/, trimRight = /\s+$/;
Я использую:
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
typeof
В switch
не работает для меня. Я добавил if (typeof e == "undefined")
тест, и это работает. Почему?
case undefined:
вместо case typeof(e) == "undefined":
?
Вы можете использовать lodash : _.isEmpty (value).
Она охватывает много случаев , как {}
, ''
, null
, undefined
и т.д.
Но он всегда возвращается true
для Number
типа примитивных типов данных JavaScript, таких как _.isEmpty(10)
или _.isEmpty(Number.MAX_VALUE)
оба true
.
_.isEmpty(" "); // => false
" "
что не пусто. _.isEmpty("");
возвращает истину.
Пытаться:
if (str && str.trim().length) {
//...
}
str.trim().length
будет быстрее, чем str.trim()
, примерно на 1% в соответствии с моими собственными результатами тестирования.
if (!str) { ... }
Функция:
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
;
if
утверждение.
Я бы не стал слишком беспокоиться о самом эффективном методе. Используйте то, что наиболее ясно для вашего намерения. Для меня это обычно strVar == ""
.
Согласно комментарию Константина , если бы strVar мог каким-то образом содержать целочисленное значение 0, то это действительно была бы одна из тех ситуаций, проясняющих намерения.
===
. Возвращает true только если strVar
это пустая строка.
Я выполняю тесты на 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 - вы можете запустить тесты на своей машине здесь
Много ответов и много разных возможностей!
Без сомнения, для быстрой и простой реализации победителем является: 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;
}
}
Я немного излишне знаю.
str.length === 0
возвращает true для любой функции, которая не имеет формальных параметров.
var a;
существуютобрезать false spaces
значение, затем проверитьemptiness
if ((a)&&(a.trim()!=''))
{
// if variable a is not empty do this
}
Я обычно использую что-то вроде этого,
if (!str.length) {
// Do something
}
typeof variable != "undefined"
прежде чем проверять, пусто ли.
Я не заметил ответа, который учитывает возможность появления нулевых символов в строке. Например, если у нас есть нулевая строка символов:
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 (т. Е. Неразрывный пробел, метка порядка байтов, разделитель строк / абзацев и т. Д.).
Между тем, у нас может быть одна функция, которая проверяет все пустые значения, такие как 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
На данный момент нет прямого метода, такого как 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.
}
Используя это, вы также можете убедиться, что строка не является неопределенной или нулевой. Помните, неопределенные, нулевые и пустые три разные вещи.
let rand = ()=>Math.random()
, затем rand && rand.length > 0)
возвращает false, но ясно, что fn не является «пустым». Т.е. он возвращает false для любой функции, которая не имеет параметров формата.
Math.random()
возвращает число, а не строку. И этот ответ о строках. ;-)
Все эти ответы хороши.
Но я не могу быть уверен, что переменная является строкой, не содержит только пробелов (это важно для меня) и может содержать «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 .
empty(0)
и empty(7)
должны вернуть то же значение.
empty("0")
должен возвращать false
(потому что это не пустая строка), но empty(0)
должен возвращаться, true
потому что она пуста :)
empty
в данном случае это вводящее в заблуждение имя.
empty
это неточное и вводящее в заблуждение имя. Интересно, что PHP также имеет функцию с плохим именем empty
, но ошибки PHP не имеют ничего общего с JavaScript.
Я не видел хорошего ответа здесь (по крайней мере, не тот ответ, который подходит мне)
Поэтому я решил ответить себе:
value === undefined || value === null || value === "";
Вам нужно начать проверять, не определено ли оно. В противном случае ваш метод может взорваться, и тогда вы можете проверить, равен ли он нулю или равен пустой строке.
Вы не можете иметь! или только if(value)
потому, что если вы проверите, 0
он даст вам ложный ответ (0 - ложь).
С учетом сказанного, оберните его таким способом:
public static isEmpty(value: any): boolean {
return value === undefined || value === null || value === "";
}
PS: Вам не нужно проверять typeof , так как он взорвется и выбросит еще до того, как войдет в метод
Попробуй это
str.value.length == 0
"".value.length
вызовет ошибку. Это должно бытьstr.length === 0
TypeError
Если str
равен undefined
илиnull
Вы можете легко добавить его к собственному объекту 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()
для второго варианта)? Строка нулевой длины уже ложна, круглые скобки избыточны, и отрицание ее три раза - это то же самое, что отрицание ее один раз.
Я провел некоторое исследование того, что произойдет, если вы передадите не строковое и непустое / нулевое значение в функцию тестера. Как многие знают, (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; } }]
];
Там нет isEmpty()
метода, вы должны проверить тип и длину:
if (typeof test === 'string' && test.length === 0){
...
Проверка типа необходима, чтобы избежать ошибок времени выполнения, когда test
есть undefined
или null
.
Игнорируя строки пробелов, вы можете использовать это, чтобы проверить наличие нулевых, пустых и неопределенных:
var obj = {};
(!!obj.str) // Returns false
obj.str = "";
(!!obj.str) // Returns false
obj.str = null;
(!!obj.str) // Returns false
Он лаконичен и работает для неопределенных свойств, хотя и не самый читаемый.