كيفية التحقق فارغة/undefined/سلسلة خالية في جافا سكريبت ؟

StackOverflow https://stackoverflow.com/questions/154059

  •  03-07-2019
  •  | 
  •  

سؤال

رأيت هذا الموضوع, لكني لم أرى جافا سكريبت معين على سبيل المثال.هل هناك بسيطة string.Empty المتاحة في جافا سكريبت ، أو هو مجرد حالة من التحقق ""?

هل كانت مفيدة؟

المحلول

إذا كنت تريد أن تحقق ما إذا كان هناك أي قيمة ، يمكنك القيام به

if (strValue) {
    //do something
}

إذا كنت تحتاج إلى التحقق خصيصا سلسلة فارغة على null, أعتقد فحص ضد "" هو أفضل رهان ، وذلك باستخدام على === المشغل (حتى أن كنت أعرف أنه هو ، في الواقع ، سلسلة تقارنين ضد).

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

نصائح أخرى

لفحص إذا سلسلة فارغة أو فارغة أو غير معروف يمكنني استخدام:

function isEmpty(str) {
    return (!str || 0 === str.length);
}

لفحص إذا سلسلة فارغة أو فارغة أو غير معروف يمكنني استخدام:

function isBlank(str) {
    return (!str || /^\s*$/.test(str));
}

لفحص إذا سلسلة فارغة أو تحتوي فقط white-space:

String.prototype.isEmpty = function() {
    return (this.length === 0 || !this.trim());
};

كل ما سبق هي جيدة ولكن هذا سوف يكون أفضل.استخدام !!(لا لا) المشغل.

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

أو استخدام نوع الصب:

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

كل فعل نفس الوظيفة ، نوع يلقي متغير منطقية ، حيث str هو متغير.
يعود false بالنسبة null,undefined,0,000,"",false.
يعود true سلسلة "0" بيضاء " ".

إذا كنت بحاجة للتأكد من أن السلسلة ليست مجرد مجموعة من المساحات الفارغة (أفترض أن هذا هو التحقق من صحة النموذج) يجب عليك أن تقوم محل على مسافات.

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

أقرب ما يمكنك الحصول على str.Empty (مع شرط أن str هو سلسلة) هو:

if (!str.length) { ...

يمكنني استخدام :

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

محاولة:

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

وظيفة:

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

p.s.في جافا سكريبت, لا تستخدم خط كسر بعد return;

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

لا يوجد شيء يمثل سلسلة فارغة في جافا سكريبت.هل الاختيار إما ضد length (إذا كنت تعرف أن فار سوف يكون دائما سلسلة) أو ضد ""

يمكنك استخدام lodash :_.isEmpty(القيمة).

ويغطي الكثير من الحالات مثل {}, '', null, undefined الخ.

لكنه يعود دائما true بالنسبة Number نوع من جافا سكريبت بدائية أنواع البيانات مثل _.isEmpty(10) أو _.isEmpty(Number.MAX_VALUE) كل يعود true.

وأود أن لا تقلق كثيرا عن معظم كفاءة الأسلوب.استخدام ما هو أكثر واضحة إلى نية.بالنسبة لي هذا هو عادة strVar == "".

تحرير:في تعليق من كونستانتين, إذا strVar أن بعض كيف ينتهي تحتوي على عدد صحيح 0 قيمة ، ثم من شأنه أن يكون في الواقع واحدة من تلك النية-توضيح الحالات.

هل يمكن أن تذهب أيضا مع regexps:

if((/^\s*$/).test(str)) { }

بالتحقق من السلاسل التي إما أن تكون فارغة أو مليئة بيضاء.

الكثير من الإجابات و الكثير من الاحتمالات المختلفة!

من دون شك سريعة وبسيطة التنفيذ الفائز هو: 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;
    }
}

قليلا المفرط أعلم.

  1. تحقق من أن var a; موجودة
  2. تقليم من false spaces في القيمة ، ثم اختبار emptiness

    if ((a)&&(a.trim()!=''))
    {
      // if variable a is not empty do this 
    }
    

أيضا ، في حال كنت تنظر بيضاء مليئة السلسلة بأنها "فارغة".يمكنك اختبار مع هذا Regex:

!/\S/.test(string); // Returns true if blank.

وعادة ما تستخدم بعض الشيء من هذا القبيل ،

if (!str.length) {
//do some thing
}

أنا لم ألحظ الجواب أن يأخذ بعين الاعتبار إمكانية أحرف فارغة في سلسلة.على سبيل المثال, إذا كان لدينا null سلسلة الأحرف:

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

لاختبار nullness واحد يمكن أن تفعل شيئا مثل هذا:

String.prototype.isNull = function(){ 
  return Boolean(this.match(/^[\0]*$/)); 
}
...
"\0".isNull() // true

أنه يعمل على سلسلة فارغة ، على سلسلة فارغة و هو في متناول جميع السلاسل.وبالإضافة إلى ذلك, يمكن أن تكون موسعة تحتوي على جافا سكريبت أخرى فارغة أو الأحرف بيضاء (أيغير منقسمة, byte order mark, خط/الفقرة فاصل ، إلخ.).

إذا كان أحد يحتاج إلى كشف فارغة ليس فقط ولكن أيضا سلاسل فارغة ، سأضيف إلى Goral الجواب:

function isEmpty(s){
    return !s.length;    
}

function isBlank(s){
    return isEmpty(s.trim());    
}

كل هذه الإجابات هي لطيفة.

ولكن أنا لا يمكن أن تكون على يقين من أن المتغير هو سلسلة لا يحتوي على فراغات فقط (وهذا هو المهم بالنسبة لي), و يمكن أن تحتوي على '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.

وعادة ما تستخدم شيئا مثل:

if (str == "") {
     //Do Something
}
else {
     //Do Something Else
}

يمكنني استخدام مزيج أسرع الشيكات الأولى.

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

تجاهل بيضاء سلاسل, هل يمكن استخدام هذا للتحقق فارغة فارغة وغير محدد :

var obj = {};
(!!obj.str) //returns false

obj.str = "";
(!!obj.str) //returns false

obj.str = null;
(!!obj.str) //returns false

موجزة ويعمل على خصائص غير ، على الرغم من أنه ليس أكثر قابلية للقراءة.

فعلت بعض البحوث ماذا يحدث إذا كنت تمر غير سلسلة غير فارغة/قيمة فارغة إلى اختبار وظيفة.العديد من يعرف (0 == "") صحيح في جافا سكريبت ، ولكن منذ 0 قيمة غير فارغة أو فارغة, قد تحتاج إلى اختبار ذلك.

التاليين وظائف العودة الحقيقية فقط undefined, null, فارغة/بيضاء قيم كاذبة عن كل شيء آخر ، مثل أرقام, منطقية, الأجسام, عبارات الخ.

function IsNullOrEmpty(value)
{
    return (value == null || value === "");
}
function IsNullOrWhiteSpace(value)
{
    return (value == null || !/\S/.test(value));
}

أكثر تعقيدا أمثلة موجودة ، ولكن هذه هي بسيطة تعطي نتائج متسقة.ليست هناك حاجة إلى اختبار لمدة غير محددة ، حيث يتم تضمينه في (القيمة == null) الاختيار.يمكنك أيضا تقليد C# سلوك طريق إضافتها إلى سلسلة من هذا القبيل:

String.IsNullOrEmpty = function (value) { ... }

كنت لا تريد وضعه في سلاسل النموذج ، لأنه إذا كان على سبيل المثال سلسلة الدرجة باطل ، سيكون خطأ:

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; } }]
];

للتحقق مما إذا كان هو بالضبط سلسلة فارغة:

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

للتحقق مما إذا كان هو سلسلة فارغة أو منطقية ما لا قيمة (null, undefined, 0, NaN, false, ...):

if(!val)...

وفي الوقت نفسه يمكن أن يكون وظيفة واحدة أن يتحقق للجميع 'الزجاجات الفارغة' مثل null, غير محدد, ", ' ', {}, [].لذلك أنا فقط كتبت هذا.

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

لا يوجد isEmpty() طريقة لديك للتحقق من نوع طول:

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

نوع الاختيار هو مطلوب من أجل تجنب أخطاء وقت التشغيل عندما test هو undefined أو null.

لا تفترض أن المتغير الذي تحقق هو سلسلة.لا تفترض أنه إذا كان هذا فار يبلغ طول ، ثم سلسلة.

الشيء هو:التفكير مليا في ما التطبيق الخاص بك يجب أن تفعل و لا يمكن أن يقبل.بناء شيء قوي.

إذا كان الأسلوب الخاص بك / وظيفة فقط عملية غير سلسلة فارغة ثم اختبار ما إذا كانت الحجة هي عدم سلسلة فارغة و لا تفعل بعض 'خدعة'.

كمثال على شيء من شأنها أن تنفجر إذا كنت تتبع بعض النصائح هنا لا بعناية.


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 === '')
  ...

جرب هذا

str.value.length == 0

يمكنك بسهولة إضافته إلى الأم سلسلة الكائن في جافا سكريبت وإعادة استخدامها مرارا وتكرارا...
شيء بسيط مثل رمز أدناه يمكن القيام بهذه المهمة بالنسبة لك إذا كنت تريد أن تحقق '' سلاسل فارغة:

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
function tell()
{
var pass = document.getElementById('pasword').value;
var plen = pass.length;

now you can check if your string is empty as like 
if(plen==0)
{
         alert('empty');
}
else
{
   alert('you entered something');
}
}


<input type='text' id='pasword' />

وهذا هو أيضا عام طريقة للتحقق مما إذا كان الحقل فارغا.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top