Я бачив це запитання , але конкретного прикладу 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
TypeErrorIf 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
Це стисло і працює для невизначених властивостей, хоча це не найчитабельніше.