Я бачив це запитання , але конкретного прикладу 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)
набагато читає і менш "wtfish".
Найближче до чого можна дістатися 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 (значення).
Вона охоплює багато випадків , як {}
, ''
, null
, undefined
і т.д.
Але він завжди повертається true
для Number
типу примітивних типів JavaScript, таких як _.isEmpty(10)
або _.isEmpty(Number.MAX_VALUE)
обидва true
.
_.isEmpty(" "); // => false
" "
це не порожньо. _.isEmpty("");
повертає правду.
Функція:
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
твердження.
Спробуйте:
if (str && str.trim().length) {
//...
}
str.trim().length
зробимо швидше, ніж str.trim()
приблизно на 1%, відповідно до моїх власних результатів тестування.
if (!str) { ... }
Я б не переймався надто ефективним методом. Використовуйте те, що найбільш зрозуміло вашому наміру. Для мене це зазвичайstrVar == ""
.
Відповідно до коментаря Константина , якби strVar міг би дещо отримати ціле число 0, то це справді буде однією з таких ситуацій, що з'ясовують намір.
===
. Повертає значення true лише якщо strVar
це порожній рядок.
Дуже багато відповідей, і багато різних можливостей!
Без сумніву, для швидкої та простої реалізації переможець: 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
}
Я виконую тести на 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) {
// 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)
повертається хибним, але явно fn не є "порожнім". Тобто він повертає помилку для будь-якої функції, яка не має параметрів формату.
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
If 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 є значенням, а не порожнім або нульовим, ви можете перевірити його.
Наступні дві функції повертають істинні лише для невизначених, нульових, порожніх / значень пробілів та помилок для всього іншого, таких як числа, булеві, об'єкти, вирази тощо.
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; } }]
];
Немає 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
Це стисло і працює для невизначених властивостей, хоча це не найчитабельніше.