ජාවාස්ක්‍රිප්ට් හි හිස් / නිර්වචනය නොකළ / ශුන්‍ය නූලක් පරීක්ෂා කරන්නේ කෙසේද?


2867

මම මෙම ප්‍රශ්නය දුටුවෙමි , නමුත් මම ජාවාස්ක්‍රිප්ට් විශේෂිත උදාහරණයක් දුටුවේ නැත. string.Emptyජාවාස්ක්‍රිප්ට් හි සරල එකක් තිබේද , නැතහොත් එය පරික්ෂා කිරීමේ අවස්ථාවක්ද ""?


3
FYI, මම හිතන්නේ සංගීත පන්තිය සඳහා වඩාත්ම ප්‍රයෝජනවත් API මොසිල්ලා සහ ජාවාස්ක්‍රිප්ට් කට්ටලවල ඇත. [elated.com] ( elated.com/articles/working-with-strings ) හි String හි සියලුම ගුණාංග, ක්‍රම පිළිබඳ නිබන්ධනයක් ඇත ... කරුණාකර සටහන් කර ගන්න: මොසිල්ලා සබැඳිය සංවර්ධක. JavaScript / Reference / Global_Objects /…
Gene T

මෙය පරීක්ෂා කරන්න: stackoverflow.com/a/36491147/7026966
ශෙඛර්

අවශ්‍යතාවය පැහැදිලිව දක්වා තිබේ නම් එය බොහෝ සෙයින් උපකාරී වේ. හිස් ආපසු පැමිණීම සත්‍ය විය යුත්තේ කුමන අගයන් සඳහාද ? "" සඳහා පරික්ෂා කිරීමෙන් එය සත්‍ය බවට පත්විය යුත්තේ අගය නූල් සහ දිග 0 නම් පමණි. මෙහි බොහෝ පිළිතුරු උපකල්පනය කරන්නේ එය සමහර හෝ සියලු ව්‍යාජ අගයන් සඳහා සත්‍ය විය යුතු බවයි.
රොබ්

Answers:


3594

ඔබට කිසියම් වටිනාකමක් තිබේදැයි පරීක්ෂා කිරීමට අවශ්‍ය නම්, ඔබට එය කළ හැකිය

if (strValue) {
    //do something
}

ඔබ ශූන්ය පුරා හිස් අගයක් සඳහා විශේෂයෙන් පරීක්ෂා කිරීමට අවශ්ය නම්, මා විරුද්ධ පිරික්සුමක් සිතන්නේ ""භාවිතා ඔබේ හොඳම ඔට්ටු වන ===ක්රියාකරු (ඔබ එරෙහිව සංසන්දනය කරනවා වැලක්, ඇත්තෙන්ම, ඔබ එය බව දැන එසේ බව).

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

178
දිග දේපල පරීක්ෂා කිරීම ඇත්ත වශයෙන්ම "" ට එරෙහිව නූල පරීක්ෂා කිරීමට වඩා වේගවත් විය හැකිය, මන්ද පරිවර්තකයාට වචනාර්ථයෙන් වචන වස්තුවක් සෑදිය යුතු නැත.
වින්සන්ට් රොබට්

27
Ch වින්සන්ට් ක්‍රෝම් සංවර්ධක මෙවලම්වල කිසියම් අශෝභන පැතිකඩක් කරමින්, === ''එදිරිව පරීක්‍ෂා කිරීමෙන් .lengthපැහැදිලි දියුණුවක් .length
නොපෙන්වයි

27
udbdukes ඔබ එවැනි ක්ෂුද්‍ර ප්‍රශස්තිකරණයන් ගැන සැලකිලිමත් වීමට පටන් ගත් විට, ක්‍රෝම් යනු ඔබේ කාර්ය සාධන ගැටලු බොහොමයක් ඇති බ්‍රව්සරය යැයි මම නොසිතමි ...
වින්සන්ට් රොබට්

16
ඔබේ "හිස් නූල" යන්නෙහි සුදු අවකාශය ඇතුළත් නම්, මෙම විසඳුම සුදුසු නොවේ. අවකාශ 1 ක් හෝ වැඩි ගණනක් ඉහත සත්‍ය වේ. ඔබ JQuery භාවිතා කරන්නේ නම් ඔබට මෙය භාවිතා කළ හැකිය: if ($ .trim (ref) .length === 0) - මේ හා සමාන ප්‍රශ්නයකට මෙම පිළිතුරට අනුව: stackoverflow.com/questions/2031085/…
CodeClimber

116
අපේක්ෂිත .length > 0පරිදි ඇත්ත වශයෙන්ම වචනාර්ථයකට සාපේක්ෂව වඩා වේගවත් වේ! මෙම jsPerf
Chad

1132

නූලක් හිස්ද, ශුන්‍ය හෝ නිර්වචනය කර නොමැතිදැයි පරීක්ෂා කිරීම සඳහා මම භාවිතා කරන්නේ:

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

22
str.length === 0 වෙනුවට 0 === str.length ඇයි?
වින්සන්ට්

68
In වින්සන්ට් කොන්දේසි බොහෝ විට මේ ආකාරයට ලියා ඇති if (variable == constant value)අතර ඔබට '=' අමතක වුවහොත් ඔබ පරීක්‍ෂණය වෙනුවට විචල්‍යයට නියත අගය පවරයි . ඔබට if හි විචල්‍යය පැවරිය හැකි බැවින් කේතය තවමත් ක්‍රියා කරයි. එබැවින් මෙම තත්වය ලිවීමට වඩා ආරක්ෂිත ක්‍රමයක් වන්නේ නියත අගය සහ විචල්‍යය ආපසු හැරවීමයි. මේ ආකාරයෙන් ඔබ ඔබේ කේතය පරීක්ෂා කරන විට දෝෂයක් පෙනෙනු ඇත (පැවරුමේ වලංගු නොවන අතක්). කොන්දේසි යටතේ පැවරීම තහනම් කිරීමට ඔබට JSHint වැනි දෙයක් භාවිතා කළ හැකි අතර ඔබ එය ලියන විට අනතුරු අඟවනු ලැබේ.
ෆ්ලෝරියන්

2
/^\s*$/.test(str)සැබවින්ම කියවිය නොහැකි ලැජ්ජාව - සමහර විට සරල කේතයක් හෝ රීජෙක්ස් භාවිතයෙන් අවකාශය ඉවත් කිරීම වඩා හොඳ විය හැකිද? බලන්න stackoverflow.com/questions/6623231/...stackoverflow.com/questions/10800355/...
Adrien වන්න

6
/^\s*$/.test(str) str.trim () සමඟ ප්‍රතිස්ථාපනය කළ හැකිය. දිග === 0
Schadenfreude

22
In වින්සන්ට් මෙය "යෝඩා කොන්දේසි" ලෙසද හැඳින්වේ if blue is the sky. Dodgycoder.net/2011/11/yoda-conditions-pokemon-exception.html
AZ.

320

පෙර පිළිතුරු සියල්ලම හොඳයි, නමුත් මෙය ඊටත් වඩා හොඳ වනු ඇත. පාවිච්චි කරන්න!!( නොවේ ) ක්‍රියාකරු .

if(!!str){
    // Some code here
}

හෝ ටයිප් වාත්තු කිරීම භාවිතා කරන්න:

if(Boolean(str)){
    // Code here
}

දෙකම එකම කාර්යයක් කරයි. විචල්‍යය බූලියන් වෙත ටයිප් කරන්න, එහිදී strවිචල්‍යයකි.
එය නැවත falseසඳහා null,undefined,0,000,"",false.
එය true"0" සහ සුදු අවකාශය "" සඳහා නැවත පැමිණේ .


61
මෙය "ඊටත් වඩා හොඳ" වන්නේ ඇයි?
මෙනේ

33
if(str)සහ හැසිරීම අතර වෙනසක් if(!!str)තිබේද?
පීටර් ඕල්සන්

6
Et පීටර් ඕල්සන් ඔබ විචල්යයක් බූලියන් ලෙස අන්තර්ගතය සඳහා බහු නූල් පරික්ෂා කිරීමට උත්සාහ කරන්නේ නම් ඔබට මෙය කිරීමට අවශ්‍ය වනු ඇත .. var any = (!!str1 && !!str2 && !!str3)එහි අංකයක් තිබේ නම් හැසිරවීම
ජෝන් රුඩෙල්

24
මම නිතරම භාවිතා කරන විසඳුම මෙයයි. !!str.trim()නූල හිස් අවකාශයකින් පමණක් සාදා නැති බවට වග බලා ගැනීමට.
ඩාරියෝ ඔඩඩිනෝ

5
අනවසරයෙන් පෙනෙන්නේ නැත, Boolean(str)එය කියවිය හැකි හා අඩු "wtfish" වේ.
ෂින්සෝ


100

නූල හිස් හිස් පොකුරක් පමණක් නොවන බවට ඔබට සහතික වීමට අවශ්‍ය නම් (මෙය ආකෘති වලංගු කිරීම සඳහා යැයි මම සිතමි) ඔබ අවකාශය වෙනුවට ආදේශ කිරීමක් කළ යුතුය.

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

8
ඔබට ඇත්ත වශයෙන්ම පරීක්ෂා කිරීමට අවශ්‍ය වන්නේ අවකාශය නොවන අන්තර්ගතයක් සහිත නූලක් නම් කාර්යය කරන්නේද? මෙය පරීක්ෂා කිරීම සඳහා අඩු වියදම් ක්‍රමයක් තිබේද?
ෆ්ලෑෂ්

4
දිග දේපල ගැන කුමක් කිව හැකිද?
driAn

27
සියලු අවකාශයන් ඉවත් කරනවා වෙනුවට, අවකාශයක් නොමැතිදැයි පරීක්ෂා නොකරන්නේ මන්ද? අවකාශ 2 ක් නොමැති අක්ෂරයක් තිබේ නම් එය කලින් ඇප ලබා ගත හැකි වාසි 2 ක් ඇති අතර, ඔබ නැවත පරීක්ෂා කරන නව නූලක් එයට නැත. if(str.match(/\S/g)){}
mpen

34
Ark මාක් FYI, ඔබට ගෝලීය විකරණකාරකය අවශ්‍ය නොවනු ඇත, මන්දයත් අභ්‍යවකාශ නොවන str.match(/\S/)
අක්ෂරයක

1
එය මිල අධික ඇයි? ඇත්ත වශයෙන්ම එසේ නම්, jQuery මෙම ක්‍රමය භාවිතා කරන්නේ ඇයි? ඔබට මෙය jQuery හි මූලාශ්‍රයෙන් සොයාගත හැකියvar trimLeft = /^\s+/, trimRight = /\s+$/;
මාරෙක්කි

66

මම භාවිතා කරන්නේ:

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

5
මෙම විසඳුම භාෂා අ nost ෙයවාදී ය. එය රඳා පවතින එකම ජාවාස්ක්‍රිප්ට් ලක්ෂණය ටයිප් ඔෆ් ය. එබැවින් විවිධ බ්‍රව්සර්වල ක්‍රියාත්මක කිරීම් විශ්වාස නොකරන අතර වඩා හොඳ විසඳුමක් ලබා ගැනීමට කාලය නොමැති විට ඔබට භාවිතා කළ හැකි විසඳුමකට මෙය හොඳ උදාහරණයකි. (IE, අන්තර්ජාල ප්‍රවේශයක් නොමැත). එය සාක්ෂියක් වැනි දෙයක්. ජාවාස්ක්‍රිප්ට් ගැන වැඩි යමක් නොදැන එය ක්‍රියා කරන බව ඔබට සහතික විය හැකිය.
ජෙෆ් ඩේවිස්

2
මම තව ටිකක් ඉදිරියට ගොස්, නිර්වචනය නොකළ නඩුව සඳහා === ක්‍රියාකරුවෙකු සමඟ ඇණ ගසන්න. එසේ නොමැතිනම් එය හුදෙක් පරිපූර්ණ පිළිතුරකි.
xarlymg89

මෙම typeofතුළ switchමට වැඩ කටයුතු කළේ නැත. මම if (typeof e == "undefined")පරීක්ෂණයක් එකතු කළ අතර එය ක්‍රියාත්මක වේ. මන්ද?
ලූකස්

1
Uc ලූකස් මෙය යතුරු ලියනය හෝ අධීක්ෂණය නිසා. ඔබේ වෙනස් කිරීම නිවැරදි ප්‍රවේශයයි. (මුල් පිටුවේ දැක්වෙන්නේ හිස් ශ්‍රිතයේ සන්දර්භය මිස ඊ පරාමිතිය නොවේ, ශ්‍රිතය පරික්ෂා කළ යුතු
දෙයයි

case undefined:ඒ වෙනුවට අපට භාවිතා කළ හැකිද case typeof(e) == "undefined":?
බොරිස් ජේ.

44

ඔබට lodash භාවිතා කළ හැකිය : _.isEmpty (අගය).

ඒ වගේ ගොඩක් නඩු ආවරණය {}, '', null, undefinedආදිය,

එහෙත් එය සෑම විටම නැවත trueසඳහා Numberවර්ගය JavaScript ප්රාථමික දත්ත වර්ග මෙන් _.isEmpty(10)හෝ _.isEmpty(Number.MAX_VALUE)ප්රතිලාභ යන දෙකම true.


_.isEmpty(" "); // => false
එරික්

1
Ric පොහොසත් නිසා " "හිස් නොවේ. _.isEmpty("");නැවත සත්‍ය වේ.
මෝෂි

1
තරමක් සත්‍යය - මා මෙහි සඳහන් කර ඇත්තේ මෙහි ඇති වෙනත් පිළිතුරු වලින් වලංගු භාවයක් ඇති බවත්, නූලක් සුදු පැහැති අවකාශයකින් පමණක් සමන්විත දැයි පරීක්ෂා කරන බවත්, මෙම තනි ලොඩාෂ් ශ්‍රිතය එම ගැටළුව විසඳන්නේ නැති බවත්ය.
එරික්

රිච්, දැන් මට ඔබේ අදහස තේරුණා, සඳහන් කිරීම ගැන ස්තූතියි.
මෝෂි

38

කාර්යය:

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: ජාවාස්ක්‍රිප්ට් හි, පසුව රේඛා බිඳීමක් භාවිතා නොකරන්න return;


2
සෑම චෙක්පතක්ම කරන්නේ කුමක්ද යන්න ඔබට පැහැදිලි කළ හැකි අවස්ථාවක් තිබේද? :)
DanV

3
-1 ඔවුන් විවිධ දේ සඳහා පරීක්ෂා කරමින් සිටී. ඒවා සියල්ලම එක ifප්‍රකාශයකට දැමීමෙන් පලක් නැත .
බෙනට් මැක්ල්වී

2
typeof MyVariable == විචල්‍යය මුලින් ප්‍රකාශයට පත් කර ශුන්‍යයට ආරම්භ කළහොත් මිස නිර්වචනය නොකළ අගයක් සහ ප්‍රකාශ නොකළ විචල්‍යයක් සහිත ආරම්භක විචල්‍යයක් අතර 'නිර්වචනය නොකළ' හඳුනා නොගනී. දිග දේපල පරික්ෂා කිරීමෙන් නූල් ප්‍රාථමිකය නූල් වස්තුවක ඔතා ඇත.
ස්කොට් මාකස්

37

උත්සාහ කරන්න:

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

2
දිග දේපල අවශ්‍යද?
frogcoder

str.trim().lengthstr.trim()මගේ පරීක්ෂණ ප්‍රති .ල අනුව 1% ට වඩා වේගයෙන් කරනු ඇත .
ඩෙවිල්ඩෙල්ටා

2
vdevildelta - ඔබගේ 1% ඔබගේ පරීක්ෂණයෙහි දෝෂයකි.
ස්ටීවන් එම් ඉර්වින්

OP හිස් නූල්, නිර්වචනය නොකළ හෝ ශුන්‍ය සඳහා පරීක්ෂා කිරීමට බලාපොරොත්තු වේ. මෙය කිසිදු කොන්දේසියක් නොවන නූලක් සඳහා පරීක්ෂා කිරීමකි. ඔහු හිස් අවකාශය ගැන කිසිවක් කීවේ නැත. විචල්‍යයේ වෙනත් දත්ත වර්ග කිසිවක් ගබඩා කර නොමැති බව ඔබට විශ්වාස නම් තාක් කල් ඔබට OP හි කොන්දේසි පරීක්ෂා කළ හැකිය: if (!str) { ... }
ස්ටීවන් එම් ඉර්වින්

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

ජාවාස්ක්‍රිප්ට් හි හිස් නූලක් නියෝජනය කිරීමට කිසිවක් නැත. එක්කෝ length(var සැමවිටම නූල් එකක් වනු ඇති බව ඔබ දන්නේ නම්) හෝ ඊට එරෙහිව පරීක්ෂා කරන්න""


30

වඩාත්ම කාර්යක්ෂම ක්‍රමය ගැන මම ඕනෑවට වඩා කරදර නොවෙමි . ඔබේ අභිප්‍රාය සඳහා වඩාත් පැහැදිලිව පෙනෙන දේ භාවිතා කරන්න. මට නම් එය සාමාන්‍යයෙන් ය strVar == "".

වෙතින් අදහස් අනුව කොන්ස්ටන් , strVar යනු පූර්ණ සංඛ්යාවකි 0 අගය අඩංගු දක්වා සමහර ආකාරය අවසන් හැකි නම්, එසේ නම් එය නියත වශයෙන්ම එම අරමුණ-පැහැදිලි තත්ත්වයන් එක් වනු ඇත.


11
නරක අදහසක්. StrVar අහම්බෙන් 0 පවරා ඇත්නම් ඔබට සත්‍ය වනු ඇත.
කොන්ස්ටන්ටින්

5
වෙනත් ක්‍රම මගින් ලබා දිය හැකි ඕනෑම ක්ෂුද්‍ර ප්‍රශස්තිකරණයකට වඩා ඔබේ අභිප්‍රාය පැහැදිලි කිරීම වැදගත් බව මම එකඟ වෙමි, නමුත් දැඩි සංසන්දනාත්මක ක්‍රියාකරු භාවිතා කිරීම ===වඩා හොඳ වනු ඇත. එය සත්‍ය වන්නේ ආපසු strVarඑන්නේ හිස් නූලක් නම් පමණි .
වැඩකට නැති කේතය

නිර්වචනය නොකළහොත් චෙක්පත අසමත් වේ. එබැවින් (str) වඩා හොඳින් ක්‍රියා කරන්නේ නම්
වැලන්ටින් හයිනිට්ස්

3
St වැලෙන්ටින්හයිනිට්ස් str ට 0 හෝ "0" යන ව්‍යාජ අගයක් ලබා දී ඇත්නම් (str) සාවද්‍ය ලෙස සත්‍ය ලෙස වාර්තා කරයි. හොඳම ප්‍රවේශය නම් (str === ""). එය සරල වන අතර එය කිසි විටෙකත් අසාර්ථක නොවනු ඇත.
ස්කොට් මාකස්


22

කාර්ය සාධනය

තෝරාගත් විසඳුම් 18 ක් සඳහා මම macOS v10.13.6 (High Sierra) මත පරීක්ෂණ සිදු කරමි . විසඳුම් තරමක් වෙනස් ලෙස ක්‍රියා කරයි (කෙළවරේ ආදාන දත්ත සඳහා) එය පහත දැක්වෙන ස්නිපටයේ ඉදිරිපත් කර ඇත.

නිගමන

  • සරල විසඳුම් මත පදනම් !str, ==, ===හා lengthසියලු බ්රව්සර් (A, B, C, G, මම, j) සඳහා වේගවත්
  • නිත්‍ය ප්‍රකාශනය ( test, replace) මත පදනම් වූ විසඳුම් සහ charAtසියලු බ්‍රව්සර් සඳහා මන්දගාමී වේ (H, L, M, P)
  • වේගවත්ම ලෙස සලකුණු කරන ලද විසඳුම් වේගවත් වූයේ එක් ටෙස්ට් ධාවනයක් සඳහා පමණි - නමුත් බොහෝ ධාවන වලදී එය 'වේගවත්' විසඳුම් කණ්ඩායම තුළ වෙනස් වේ

රූප විස්තරය මෙහි ඇතුළත් කරන්න

විස්තර

පහත දැක්වෙන ස්නිපටයේ විවිධ ආදාන පරාමිතීන් භාවිතා කරමින් තෝරාගත් ක්‍රම 18 ක ප්‍රති results ල සංසන්දනය කරමි

  • "" "a" " "- හිස් නූල, අකුරු සහිත නූල් සහ අවකාශය සහිත නූල්
  • [] {} f- අරාව, වස්තුව සහ ක්‍රියාකාරිත්වය
  • 0 1 NaN Infinity - අංක
  • true false - බූලියන්
  • null undefined

පරීක්ෂා කරන ලද සියලුම ක්‍රම සියලු ආදාන අවස්ථාවන්ට සහාය නොදක්වයි.

ඊට පස්සේ මම වේග පරීක්ෂාව නඩුව ඉටු සියලු ක්රමෝපායන් සඳහා str = ""බ්රව්සර ක්රෝම් v78.0.0, Safari v13.0.4, සහ ෆයර්ෆොක්ස් v71.0.0 සඳහා - ඔබ පරීක්ෂණ ඔබගේ යන්ත්රය මත ධාවනය කළ හැකි මෙහි

රූප විස්තරය මෙහි ඇතුළත් කරන්න


මෙය ඇත්තෙන්ම නියමයි! මේ සියල්ල දැකීමට මා කැමතිය! ඔබට ස්තුතියි!
වෙබ් වොන්ඩරර්

එය ගැඹුරු අධ්‍යයනයක් - ස්තූතියි
ඩියෑන්

20
  1. var a;පවතින බව පරීක්ෂා කරන්න
  2. අගය කපා දමන්න false spaces, පසුව පරීක්ෂා කරන්නemptiness

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

20

පිළිතුරු ගොඩක්, සහ විවිධ හැකියාවන් ගොඩක්!

ඉක්මන් හා සරල ක්‍රියාත්මක කිරීම සඳහා සැකයකින් තොරව ජයග්‍රාහකයා වන්නේ: 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;
    }
}

ටිකක් වැඩිපුර, මම දන්නවා.


2
නිර්වචනය නොකළ දේ සඳහා චෙක්පත් පළමු වරට චෙක්පත් වෙත ගෙනයාමට අවශ්‍ය වනු ඇත, නැතහොත් නිර්වචනය නොකළ අයිතම කලින් චෙක්පත් සඳහා ව්‍යතිරේකයන් දමනු ඇත.
SvdSinner

සම්පූර්ණයෙන්ම එකඟ වන්න! නයිස් කැච්. මම මගේ ඉහත පිළිතුර සංස්කරණය කරමි!
tfont

str.length === 0විධිමත් පරාමිතීන් නොමැති ඕනෑම ශ්‍රිතයක් සඳහා සත්‍ය වේ.
රොබ්

20

ඔබට සාමාන්‍ය ප්‍රකාශන සමඟද යා හැකිය:

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

හිස් හෝ හිස් අවකාශයකින් පිරී ඇති නූල් සඳහා චෙක්පත්.


එය ක්‍රියාත්මක වන නමුත් එය ඉතා මිල අධික ඔප්ස් නැණවත් ය. ඔබට විශාල එකක් හෝ දෙකක් හෝ දෙකක් පරික්ෂා කිරීමට අවශ්‍ය නම් හොඳයි.
ඕෆියස්

17

එසේම, ඔබ හිස් අවකාශයක් පුරවා ඇති නූලක් "හිස්" ලෙස සලකන්නේ නම්.

මෙම නිත්‍ය ප්‍රකාශනයෙන් ඔබට එය පරීක්ෂා කළ හැකිය:

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

15

මම සාමාන්‍යයෙන් මේ වගේ දෙයක් පාවිච්චි කරනවා,

if (!str.length) {
    // Do something
}

4
විචල්යය නූලක් බව ඔබ දන්නේ නම් වේගවත්ම. විචල්‍යය නිර්වචනය කර නොමැති නම් දෝෂයක් විසි කරයි.
ඒඩ්‍රියන් හෝප්-බේලි

Rian ඒඩ්‍රියන් හෝප්-බේලි ඔබ නිර්වචනය නොකළ විචල්‍යයක් පරීක්ෂා කරන්නේ ඇයි?
අබිමායෙල් මාටෙල්

3
B අබිමාල් මාටෙල් ඇයි නැත්තේ? ඔබ විසින් ප්‍රකාශයට පත් කරන ලද හෝ යම් විෂය පථයකින් ඔබට ලබා දුන් විචල්‍යයක් ඔබට තිබේ, ක්‍රමයකින් හෝ API ඇමතුමකින් ලැබෙන ප්‍රතිචාරයක් වැනි ඔබට පාලනය කළ නොහැක. ඔබට එහි අගයක් ඇතැයි උපකල්පනය කර ඉහත චෙක්පත භාවිතා කළ හැකි නමුත් එය අර්ථ දක්වා නොමැති නම් හෝ ශුන්‍ය නම් ඔබට දෝෂයක් ලැබෙනු ඇත. var test = ශූන්‍ය; if (! test.length) {alert ("
ඒඩ්‍රියන්

OP ඉල්ලා සිටියේ "හිස් නූලක් පරික්ෂා කරන්නේ කෙසේද" යන්නයි. නිර්වචනය නොකළ විචල්‍යය හිස් නූලක් නොවේ. කෙසේ හෝ typeof variable != "undefined"හිස් දැයි පරීක්ෂා කිරීමට පෙර ඔබට පරීක්ෂා කළ හැකිය .
අබිමෙල් මාටෙල්

11

නූලක ඇති ශුන්‍ය අක්ෂර ඇතිවීමේ හැකියාව සැලකිල්ලට ගන්නා පිළිතුරක් මා දැක නැත. උදාහරණයක් ලෙස, අපට ශුන්‍ය අක්ෂර මාලාවක් තිබේ නම්:

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

එය ශුන්‍ය නූලක් මත සහ හිස් නූලක් මත ක්‍රියා කරන අතර එය සියලු නූල් සඳහා ප්‍රවේශ විය හැකිය. ඊට අමතරව, එය වෙනත් ජාවාස්ක්‍රිප්ට් හිස් හෝ සුදු පැහැති අක්ෂර (එනම් නොකැඩෙන අවකාශය, බයිට් ඇණවුම් සලකුණ, රේඛාව / ඡේද බෙදුම්කරු ආදිය) අඩංගු වන පරිදි පුළුල් කළ හැකිය.


2
සිත්ගන්නා විශ්ලේෂණය. 99.9% ක් සඳහා මෙය අදාළ වේ යැයි මම නොසිතමි. නමුත් මෑතකදී මා සොයාගත්තේ MySQL විසින් තීරුව "ශුන්‍ය" ලෙස තක්සේරු කරන්නේ නම් (සහ පමණක් නම්) එම තීරුවේ ශුන්‍ය අක්‍ෂරය ("\ 0") අඩංගු වේ. අනෙක් අතට ඔරකල් "\ 0" ශුන්‍ය යැයි තක්සේරු නොකරනු ඇත, එය දිග 1 නූලක් ලෙස සැලකීමට කැමැත්තක් දක්වයි (එහිදී එක් අක්‍ෂරයක් ශුන්‍ය අක්‍ෂරය වේ). නිසි ලෙස ගනුදෙනු නොකළහොත් මෙය ව්‍යාකූලත්වයක් ඇති කළ හැකිය, මන්ද බොහෝ වෙබ් සංවර්ධකයින් පසු-අන්ත දත්ත ගබඩාවක් සමඟ කටයුතු කරන අතර එමඟින් විවිධ වර්ගයේ “ශුන්‍ය” අගයන් පසුකර යා හැකිය. එය සෑම සංවර්ධකයෙකුගේම මනසෙහි පිටුපස තිබිය යුතුය.
cartbeforehorse

11

යමෙකුට හිස් පමණක් නොව හිස් නූල්ද හඳුනා ගැනීමට අවශ්‍ය නම්, මම ගෝරල්ගේ පිළිතුරට එකතු කරමි:

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

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

11

මේ අතර , ශුන්‍ය, නිර්වචනය නොකළ, '', '', {}, [] වැනි සියලුම 'හිස් කිරීම්' පරීක්ෂා කරන එක් ශ්‍රිතයක් අපට තිබිය හැකිය . ඉතින් මම මේක ලිව්වා.

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

11

මම මෙහි හොඳ පිළිතුරක් දුටුවේ නැත (අවම වශයෙන් මට ගැලපෙන පිළිතුරක්වත් නැත)

ඒ නිසා මම මටම පිළිතුරු දීමට තීරණය කළෙමි.

value === undefined || value === null || value === "";

එය නිර්වචනය කර නොමැතිදැයි පරීක්ෂා කිරීම ආරම්භ කළ යුතුය. එසේ නොමැතිනම් ඔබේ ක්‍රමය පුපුරා යා හැකි අතර, එය ශුන්‍යයට සමානද නැතිනම් හිස් නූලකට සමානදැයි ඔබට පරීක්ෂා කළ හැකිය.

ඔබට තිබිය නොහැක !! හෝ if(value)ඔබ පරික්ෂා කළහොත් 0එය ඔබට ව්‍යාජ පිළිතුරක් ලබා දෙනු ඇත (0 අසත්‍යය).

එය පැවසීමත් සමඟ, එය මෙවැනි ක්‍රමයකින් ඔතා:

public static isEmpty(value: any): boolean { return value === undefined || value === null || value === ""; }

PS: ඔබට යතුරු ලියනය පරීක්ෂා කිරීමට අවශ්‍ය නැත , මන්ද එය පුපුරා ගොස් ක්‍රමයට ඇතුළු වීමට පෙර විසි කරන බැවිනි


නිර්වචනය නොකළ හා ශුන්‍ය අගයන් (සහ 0, -0, අසත්‍ය, NaN) අසත්‍ය ලෙස සලකන බූලියන් (අගය) ඉදිකිරීම වඩා හොඳ භාවිතා කරන්න. Stackoverflow.com/questions/856324/…
ඒ.

10

මේ වන විට නූල් හිස්ද නැද්ද යන්න පරීක්ෂා කිරීම සඳහා 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.

}

මෙය භාවිතා කිරීමෙන් ඔබට නූල් ද නිර්වචනය කර නොමැති බව සහතික කළ හැකිය. මතක තබා ගන්න, නිර්වචනය නොකළ, ශුන්‍ය හා හිස් යනු වෙනස් කරුණු තුනකි.


එය ශුන්‍ය හෝ නිර්වචනය නොකළ විචල්‍යයක් මත සෘජුවම මෙහෙයුමක් නොකළ යුතු බවට එය දෝෂයක් ඇති කරයි - වෙනත් පිළිතුරු වල සඳහන් පරිදි මෙය කිරීමට පෙර str තිබේදැයි පරීක්ෂා කරන්න. = '' නමුත් ඉඩ නොතබන්න abc = '', මේ දෙක වෙනස් වේ.
whoami

සලකා බලන්න let rand = ()=>Math.random(), පසුව rand && rand.length > 0)සාවද්‍ය ලෙස ආපසු එවන්න, නමුත් පැහැදිලිවම fn "හිස්" නොවේ. ආකෘති පරාමිතීන් නොමැති ඕනෑම ශ්‍රිතයක් සඳහා එය සාවද්‍ය වේ.
රොබ්

ObRobG Math.random()විසින් අංකයක් ලබා දෙන අතර එය නූලක් නොවේ. මෙම පිළිතුර නූල් ගැන ය. ;-)
හර්ෂිත් අගර්වාල්

10

මේ සියලු පිළිතුරු හොඳයි.

නමුත් විචල්‍යය යනු නූලක් බව මට සහතික විය නොහැක, අවකාශයන් පමණක් අඩංගු නොවේ (මෙය මට වැදගත් වේ), සහ '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 හි නියැදිය .


1
හහ්? ඔබ වැලක් අපේක්ෂාවෙන් නම්, empty(0)සහ empty(7)එම අගය නැවත කළ යුතුය.
බෙනට් මැක්ල්වී

මගේ විශේෂිත අවස්ථාවෙහිදී - empty("0")ආපසු යා යුතුය false(එය හිස් නූලක් නොවන නිසා), නමුත් එය හිස් බැවින් empty(0)ආපසු යා යුතුය true:)
ඇන්ඩ්‍රොන්

නමුත් 0 හිස් නොවේ ! එය අංකයක් වන අතර සංඛ්‍යා පූර්ණ හෝ හිස් විය නොහැක. ඇත්ත වශයෙන්ම, එය ඔබගේ කාර්යය වන අතර එමඟින් ඔබේ අවශ්‍යතා සපුරාලිය යුතුය, නමුත් emptyමෙම අවස්ථාවේදී නොමඟ යවන නමකි.
බෙනට් මැක්ල්වී

මම හිතන්නේ ඒ නම emptyහොඳයි. හිස් ශ්‍රිතය සඳහා වන php docs හි : මෙම ශ්‍රිතය Returns FALSE if var exists and has a non-empty, non-zero value. Otherwise returns TRUE.අතර වෙනස PHP- එම නූල '0'හිස් යැයි හඳුනා නොගනී.
ඇන්ඩ්‍රොන්

මා පවසන පරිදි, එය ඔබගේ කාර්යයයි: ඔබට අවශ්‍ය දේ අමතන්න. නමුත් emptyසාවද්‍ය හා නොමඟ යවන නමකි. PHP හි දුර්වල ලෙස නම් කර ඇති emptyශ්‍රිතයක් තිබීම සිත්ගන්නා කරුණකි , නමුත් PHP හි අසමත්වීම් වලට ජාවාස්ක්‍රිප්ට් සමඟ කිසිදු සම්බන්ධයක් නොමැත.
බෙනට් මැක්ල්වී

10

එය හරියටම හිස් නූලක් දැයි පරීක්ෂා කිරීමට:

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

එය හිස් නූලක්ද නැතිනම් කිසිදු වටිනාකමක් නැති තාර්කික සමානද යන්න පරීක්ෂා කිරීම සඳහා (ශුන්‍ය, නිර්වචනය නොකළ, 0, NaN, අසත්‍ය, ...):

if(!val)...

9

ආරම්භ වන්නේ:

return (!value || value == undefined || value == "" || value.length == 0);

අවසාන කොන්දේසිය දෙස බලන විට, අගය == "" නම්, එහි දිග 0 විය යුතුය. එබැවින් එය අතහරින්න:

return (!value || value == undefined || value == "");

නමුත් ඉන්න! ජාවාස්ක්‍රිප්ට් හි හිස් නූලක් වැරදිය. එබැවින් පහත වැටීමේ අගය == "":

return (!value || value == undefined);

තවද, නිර්වචනය නොකළ සත්‍යයකි, එම නිසා චෙක්පත අවශ්‍ය නොවේ. එබැවින් අපට ඇත්තේ:

return (!value);

අපට වරහන් අවශ්‍ය නොවේ:

return !value

කුමක් සිදුවේද value = falseනැත්නම් value = 0. ප්‍රශ්නයට අනුව නිවැරදි ප්‍රතිචාරය ඔබ ලබා දෙනවාද?
nerez

8

isEmpty()ක්‍රමයක් නැත , ඔබ වර්ගය සහ දිග පරීක්ෂා කළ යුතුය:

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

ක්‍රියාත්මක වන දෝෂයන් ඇති විට හෝ වළක්වා ගැනීම සඳහා චෙක්පත් වර්ගය අවශ්‍ය testවේ .undefinednull



8

ඔබට එය පහසුවෙන් ජාවාස්ක්‍රිප්ට් හි ස්වදේශීය සංගීත වස්තුවට එකතු කර නැවත නැවත භාවිතා කළ හැකිය ... හිස් කේත පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම් පහත කේතය වැනි සරල දෙයක් ඔබට කළ හැකිය .
''

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()
ජෝන් මොන්ට්ගොමරි

8

මේක උත්සාහ කරන්න:

export const isEmpty = string => (!string || !string.length);

8

ඔබ පරීක්ෂක ශ්‍රිතයකට නූල් නොවන සහ හිස් නොවන / ශුන්‍ය අගයක් ලබා දුන්නොත් කුමක් සිදුවේද යන්න පිළිබඳව මම පර්යේෂණ කිහිපයක් කළෙමි. බොහෝ දෙනා දන්නා පරිදි, (0 == "") ජාවාස්ක්‍රිප්ට් හි සත්‍ය වේ, නමුත් 0 යනු වටිනාකමක් වන අතර හිස් හෝ ශුන්‍ය නොවන බැවින් ඔබට එය පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය.

පහත දැක්වෙන ශ්‍රිත දෙක සත්‍ය වන්නේ නිශ්චිත, ශුන්‍ය, හිස් / සුදු අවකාශයේ අගයන් සඳහා පමණක් වන අතර සංඛ්‍යා, බූලියන්, වස්තූන්, ප්‍රකාශන යනාදී සියල්ල සඳහා අසත්‍යය.

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

වඩාත් සංකීර්ණ උදාහරණ පවතී, නමුත් මේවා සරල වන අතර ස්ථාවර ප්‍රති .ල ලබා දේ. (අගය == ශූන්‍ය) චෙක්පතට ඇතුළත් කර ඇති බැවින්, නිර්වචනය නොකළ දේ පරීක්ෂා කිරීම අවශ්‍ය නොවේ. මේ ආකාරයට සංගීතයට එකතු කිරීමෙන් ඔබට 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 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; } }]
];

ඔබ == භාවිතා කිරීම නවතා === භාවිතා කරන්නේ නම්, මෙය (s === "") නම් ගැටළුව විසඳයි.
ස්කොට් මාකස්
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.