විචල්‍යයක් 'නිර්වචනය නොකළ' හෝ 'ශුන්‍ය' දැයි මා තීරණය කරන්නේ කෙසේද?


2143

කොහොමද විචල්ය නම් මම තීරණය කරන්නේ undefinedහෝ null?

මගේ කේතය පහත පරිදි වේ:

var EmpName = $("div#esd-names div#name").attr('class');
if(EmpName == 'undefined'){
  // DO SOMETHING
};
<div id="esd-names">
  <div id="name"></div>
</div>

නමුත් මම මෙය කරන්නේ නම්, ජාවාස්ක්‍රිප්ට් පරිවර්තකය ක්‍රියාත්මක කිරීම නවත්වයි.


Answers:


2860

මෙය සිදු කිරීම සඳහා ඔබට වියුක්ත සමානාත්මතා ක්‍රියාකරුගේ ගුණාංග භාවිතා කළ හැකිය :

if (variable == null){
    // your code here.
}

නිසා null == undefinedසැබෑ වන අතර, ඉහත කේතය දෙකම අල්ලා ඇත nullහා undefined.


5
ෆයර්ෆොක්ස් හි සිදුවීම අහෝසි වී ඇත්දැයි පරීක්ෂා කිරීමට මම උත්සාහ කරමි: දෝෂයක් ක්‍රියාත්මක කිරීම අවහිර කරයි: "සිදුවීම නිර්වචනය කර නැත"
එන්ට්‍රෙටොයිස්

4
Ic මයිකල් ෆීවර් එය ක්‍රියාත්මක නොවන්නේ කෙසේද? මෙය ඔබේ කොන්සෝලය තුළ අලවන්න: const y = undefined; y == null;එය නැවත පැමිණිය යුතුයtrue
සෙරාෆ්

2
@ChrisStryczynski ඔබේ අදහස් දැක්වීමේදී ඔබ yනියත යැයි ප්‍රකාශ කළ නමුත් ඔබ සැසඳිය යුතුය abc(නැත y). මම ක්‍රෝම් සහ ෆයර්ෆොක්ස් yහරහා පරීක්ෂා කළ විට එහි console.log(y == null);ප්‍රති got ලයක් trueලෙස මට ලැබුණි . ඔබට දෝෂයක් තිබේ නම්, සමහර විට ඔබ =සැසඳීම වෙනුවට පැවරුම් ක්‍රියාකරු භාවිතා කිරීමට උත්සාහ කර ==ඇති අතර එමඟින් නැවත constපැවරිය නොහැකි බැවින් දෝෂය නැවත ලබා දීම අර්ථවත් වේ .
Pshemo

2
අදාළ සැසඳීම් සඳහා සජීවී උදාහරණය . lgtm.
රයන් හේනිං

2
@ZaytsevDmitry ඇයි විචල්ය නම් ඔබ ටෙස්ට් බලාපොරොත්තු nullහෝ undefinedවිචල්ය සමාන නම් සම්මත කිරීමට 0? ප්‍රශ්නය වන්නේ සත්‍ය වටිනාකමක් සඳහා පරීක්‍ෂා කිරීම නොව, පැහැදිලිව nullහෝ පරීක්‍ෂා කිරීම ය undefined.
රොඩ්රිගෝ-සිල්වෙයිරා

1111

අල්ලා ගැනීමට nullහා undefinedඑකවර සම්මත ක්‍රමය මෙයයි:

if (variable == null) {
     // do something 
}

- වඩා පැහැදිලි නමුත් අඩු සංක්ෂිප්තයට 100% සමාන වේ:

if (variable === undefined || variable === null) {
     // do something 
}

වෘත්තීය ජේඑස් ලියන විට, එම වර්ගයේ සමානාත්මතාවය සහ ==එදිරිව හැසිරීම=== තේරුම් ගත හැකිය. එබැවින් අපි භාවිතා කරන්නේ ==හා සැසඳීම පමණි null.


නැවත සංස්කරණය කරන්න

භාවිතා කිරීම යෝජනා කරන අදහස් typeofහුදෙක් වැරදිය. ඔව්, ඉහත මගේ විසඳුම විචල්‍යය නොපවතින විට ReferenceError එකක් ඇති කරයි. මේක හොඳ දෙයක්. මෙම යොමු දෝෂය යෝග්‍ය වේ: එය වෙනත් භාෂාවල සම්පාදක දෝෂ මෙන් ඔබේ කේතය නැව්ගත කිරීමට පෙර ඔබේ වැරදි සොයා ගැනීමට සහ ඒවා නිවැරදි කිරීමට උපකාරී වේ. භාවිතා කරන්න try/ catchඔබ ආදානය සමඟ වැඩ කරන්නේ නම් ඔබට පාලනය කළ නොහැක.

ඔබේ කේතයේ ප්‍රකාශයට පත් නොකළ විචල්‍යයන් පිළිබඳව කිසිදු සඳහනක් නොතිබිය යුතුය.


47
කේතයෙහි විචල්‍යය නිර්වචනය කර හෝ කිසිසේත් යොමු කර නොමැති නම් මෙය ReferenceError සහ බිඳවැටීම් ක්‍රියාත්මක කිරීමට හේතු වේ.
මනි ගාන්ධම්

56
එය ශෛලීය කරුණකට වඩා වැඩිය. විචල්ය දී ප්රකාශයට පත් කර නොමැති නම්, සියලු , ඇත්තටම කතෘ පැත්තෙන් නරකයි ලිවීම ය. ඔබේ විචල්‍යය ප්‍රකාශයට පත් කර තිබේද නැද්ද යන්න ඔබ දැනගත යුතුය, එය ප්‍රශ්නයක් නොවිය යුතුය. නමුත් ඔව් , කිසියම් හේතුවක් නිසා එය එසේ නම්, මෙය විචල්‍යය වෙනුවට window.variable ලෙස වෙනස් කළ යුතුය , එය යොමු දෝෂයක් ඇති නොකරයි. යතුරු ලියනය කිරීමෙන් වැළකී සිටිය යුතුය.
තාවකාලික_සර්_නාමය

6
ඔව්, ඔබ !==ඒ වෙනුවට ලියා ඇති නිසා !=.
තාවකාලික_

9
-OP: එම සැසඳීම් "100% සමාන" පිළිබඳ ප්‍රකාශය සරල වැරැද්දකි, ඔබ ඔබේම සංස්කරණයෙහි සඳහන් කළ පරිදි, දෙවැන්න යොමු දෝෂයක් ඇති කරයි. ප්‍රකාශය සම්බන්ධයෙන්: "ඔබේ කේතයේ ප්‍රකාශයට පත් නොකළ විචල්‍යයන් පිළිබඳව කිසිදු සඳහනක් නොතිබිය යුතුය." ඇත්තටම? විකල්ප පරාමිතීන් ගැන කවදා හෝ අසා තිබේද? jsfiddle.net/3xnbxfsu
තිමෝති කන්ස්කි

16
Im තිමෝතිකාන්ස්කි විකල්ප පරාමිතීන් විකල්ප ලෙස සපයා නොමැති නම් නිර්වචනය කළ නොහැකි නමුත් ඒවා අනිවාර්යයෙන්ම ප්‍රකාශිත විචල්‍යයන් වේ. undefinedඕනෑම ප්‍රකාශිත නමුත් ආරම්භ නොකළ විචල්‍යයක් ලෙස ඒවා ප්‍රකාශයට පත් කර ඇති අතර එහි වටිනාකම ඇත, එනම් var someVar;ඔබේ තර්කය සැබවින්ම
නොනැසී

229

ඉහත පිළිතුරු සමඟ සංයෝජනය කිරීමෙන් වඩාත්ම සම්පූර්ණ පිළිතුර වනු ඇත්තේ:

if( typeof variable === 'undefined' || variable === null ){
    // Do stuff
}

මෙය ප්‍රකාශයට පත් නොකළ හෝ ප්‍රකාශයට පත් කරන ලද සහ පැහැදිලිවම ශුන්‍ය හෝ නිර්වචනය නොකළ ඕනෑම විචල්‍යයක් සඳහා ක්‍රියා කළ යුතුය. තථ්‍ය ශුන්‍ය නොවන අගයක් ඇති ඕනෑම ප්‍රකාශිත විචල්‍යයක් සඳහා බූලියන් ප්‍රකාශනය අසත්‍ය ලෙස තක්සේරු කළ යුතුය.


2
ErAerovistae typeofඑය ක්‍රියාකරුවෙකු නොව ශ්‍රිතයක් බව මම හඳුනා ගතිමි , එබැවින් එයට වරහන් අවශ්‍ය නොවේ, නමුත් වරහන් වර්‍ග මම අගය කරමි - කියවීමේ පැහැදිලිකම සඳහා.
user664833

1
යතුරු ලියනය භාවිතා කිරීම වෙනුවට (විචල්ය === නිර්වචනය නොකළ) කෙලින්ම පරීක්ෂා කිරීම ගැන කුමක් කිව හැකිද?
ශීත කළ ක්‍රෙයොන්

2
විචල්‍යය ප්‍රකාශයට පත් නොකළ හොත් එය යොමු දෝෂයක් ඇති කරයි. විචල්‍යයක් ප්‍රකාශ කරන්නේද නැද්ද යන්න ඔබ නොදන්නේ නම්, ඉහත විසඳුම භාවිතා කරන්න. විචල්‍යය අවම වශයෙන් ප්‍රකාශයට පත් කර ඇති බවට ඔබට සහතික විය හැකි නම්, ඔබට භාවිතා කළ හැකියvariable == null
Rogue

3
Og රොග් පෙන්වා දුන් පරිදි විචල්‍යය ප්‍රකාශයට පත් නොවිය හැකි බැවින් මෙය වඩා හොඳ විසඳුමකි.
අබ්දුල් සාදික් යාල්සින්

මා වැරදියි නම් මාව නිවැරදි කරන්න, නමුත් පළමු කොන්දේසිය දෙවැන්නෙහි සුපර්සෙට් එකක් නොවේ, එබැවින් දෙවන කොන්දේසිය අතිරික්තය?
මාර්තු හෝ

187
if (variable == null) {
    // Do stuff, will only match null or undefined, this won't match false
}

14
යමෙක් මෙය තවත් අර්ධ පිළිතුරක් යැයි සිතන්නේ නම්, මෙය සැබවින්ම ක්‍රියාත්මක වේ. undefinedසමාන ඇගයීම null.
චක්

3
ක්‍රෝම් කොන්සෝලය තුළ මට අසමත් විය ... යොමු දෝෂය: විචල්‍යය නිර්වචනය කර නැත, එබැවින් එය ක්‍රියාත්මක විය හැකිය, නමුත් මට නොවේ ...
එරාන් මේදන්

48
එය ක්‍රියාත්මක වන්නේ ප්‍රකාශිත විචල්‍යයන් සඳහා පමණි, ප්‍රකාශයට පත් කළ හැකි හෝ නොවිය හැකි විචල්‍යයන් සඳහා නොවේ, එය කලාතුරකිනි. (එම අවස්ථාව සඳහා ඔබ typeof + null check භාවිතා කළ යුතුය)

11
යන්තම් හොයාගත්තා : ඔබ මෙම අදහස එකතු කරන්න /*jshint eqnull:true */ඔබගේ JS ලේඛනයක් හෝ කාර්යය මුදුනට, සහ JSHint ඔබේ භාවිතා ගැන ඔබට අනතුරු නතර වෙයි == null.
Web_Designer

3
ErAerovistae ඔබට ==බිඳී ඇති බව පැහැදිලිව සඳහන් කරන යොමු කිරීමකට මා යොමු කළ හැකිය . if(variable == null)මෙම පිළිතුරේ බලහත්කාරය මට සම්පුර්ණයෙන්ම අර්ථවත් කරයි ...
බෙන් ඇස්ටන්

94
if (typeof EmpName != 'undefined' && EmpName) {

අගය නොවේ නම් සත්‍ය ලෙස ඇගයීමට ලක් කරයි:

  • ශුන්‍යයි

  • නිර්වචනය නොකළ

  • නා

  • හිස් නූල ("")

  • 0

  • බොරු


14
මම හිතන්නේ මෙය ලැව් ගින්නක් මෙන් පැතිරී ඇති භයානක තාක්‍ෂණයකි. පරික්ෂා කර ඇති බොහෝ විචල්‍යයන් බූලියන් හෝ සංඛ්‍යා විය හැකි බැවිනි. එබැවින් ප්‍රතිවිපාක පරිශීලකයා සම්පූර්ණයෙන් වටහා නොගන්නේ නම් මෙය හොඳ නැත.
ප්‍රයෝජනවත් බී

කරුණාකර මෙම ජාවාස්ක්‍රිප්ට්
විශේෂීකරණය

1
මෙය සමාන වේ if (EmpName). එය undefinedදැනටමත් ව්‍යාජ වනු ඇත නම්.
රූඩි

1
විචල්‍යය අර්ථ දක්වා නොමැති නම්. පසුව (EmpName) දෝෂයක් විසි කරනවා නම්
Thamaraiselvam

1
Ha තමරයිසෙල්වම් මම හිතන්නේ රූඩි මේක අදහස් කරන්න ඇති var EmpName; if (EmpName). විචල්‍යය නිර්වචනය කර ඇති නමුත් අගයක් පවරා නොමැත.
සාගින්න තරු

28

jQuery attr()ශ්‍රිතය හිස් නූලක් හෝ සත්‍ය අගය ලබා දෙයි (සහ කිසි විටෙකත් nullහෝ නොවේ undefined). එය නැවත පැමිණෙන එකම අවස්ථාවundefined වන්නේ ඔබේ තේරීම්කරු කිසිදු අංගයක් ආපසු ලබා නොදුන් .

එබැවින් ඔබට හිස් නූලකට එරෙහිව පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය. විකල්පයක් ලෙස, හිස් නූල්, ශුන්‍ය සහ නිර්වචනය නොකළ ව්‍යාජ-වයි බැවින් ඔබට මෙය කළ හැකිය:

if (!EmpName) { //do something }

1
ක්‍රෝම් 17.0.963.78 m මෙම දෝෂය ලබා දෙයි:ReferenceError: EmpName is not defined
එරාන් මේදන්

6
RanEranMedan මම දන්නවා මේක පරක්කුයි, නමුත් එය පසුව මෙහි පැමිණෙන අයට උදව් වනු ඇතැයි මම බලාපොරොත්තු වෙමි. ඔබට දෝෂයක් ඇතිවීමට හේතුව එය කිසිසේත් ප්‍රකාශයට පත් නොකිරීමයි. සාමාන්‍යයෙන් ඔබට එම්පීනාම් (හෝ වෙනත් විචල්‍යයක්) ශ්‍රිතයක් තුළට හෝ වෙනත් ශ්‍රිතයක ප්‍රතිලාභ අගය ලබා දී ප්‍රකාශ කරනු ලැබේ (උදාහරණය: "var x;"). එය නිර්වචනය නොකළ, හෝ ශුන්‍ය හෝ හිස් නූලක් ආපසු ලබා දුන්නේ දැයි පරීක්ෂා කිරීමට, ඔබට ඉහත විසඳුම භාවිතා කළ හැකිය.
ඩේව්

මෙය සීතල ප්‍රශ්නයක් බව මට වැටහී ඇත, නමුත් undefinedමූලද්‍රව්‍යය මත ආරෝපණය නොපවතින විට jQuery නැවත පැමිණේ (පිළිතුරට අනුව තේරීම් කාරකයට ගැලපෙන අංග නොමැති නම් පමණක් නොවේ). උදාහරණයක් ලෙස, imgනැති srcබවත් නැවත undefinedසඳහා$('img').attr('src');
codinghands

20

මම මේ සඳහා මගේම කාර්යයක් ලිවීමට පැමිණ සිටිමි. ජාවාස්ක්‍රිප්ට් අමුතුයි.

එය වචනාර්ථයෙන් ඕනෑම දෙයකට භාවිතා කළ හැකිය. (විචල්යයේ භාවිතා කළ හැකි අගයන් තිබේද යන්නත් මෙය පරීක්ෂා කරන බව සලකන්න . නමුත් මෙම තොරතුරු සාමාන්යයෙන් අවශ්ය බැවින් එය පළ කිරීම වටී යැයි මම සිතමි). කරුණාකර සටහනක් තැබීම ගැන සලකා බලන්න.

function empty(v) {
    let type = typeof v;
    if (type === 'undefined') {
        return true;
    }
    if (type === 'boolean') {
        return !v;
    }
    if (v === null) {
        return true;
    }
    if (v === undefined) {
        return true;
    }
    if (v instanceof Array) {
        if (v.length < 1) {
            return true;
        }
    } else if (type === 'string') {
        if (v.length < 1) {
            return true;
        }
        if (v === '0') {
            return true;
        }
    } else if (type === 'object') {
        if (Object.keys(v).length < 1) {
            return true;
        }
    } else if (type === 'number') {
        if (v === 0) {
            return true;
        }
    }
    return false;
}

TypeScript- අනුකූල වේ.


මෙම ක්රියාව කළ යුත්තේ හරියටම PHP හි මෙන් එකම දේ empty()කාර්යය (බලන්නRETURN VALUES )

සලකන undefined, null, false, 0, 0.0, "0" {}, [], හිස් ලෙස.

"0.0", NaN, " ", true, හිස්-නොවන ලෙස සලකනු ලැබේ.


2
මම කුඩා ශුන්‍ය පරීක්ෂා කිරීමේ ගැටලුවකට මුහුණ දී සිටිමි. සම්මත කරන ලද පරාමිතියක් ශුන්‍යද, නැතිනම් හිස් වස්තුවක්ද යන්න පරීක්ෂා කිරීමට මට අවශ්‍යය { }. මෙය පොදු හා මෝඩ භාෂා ගැටලුවක් වන නමුත් මට එය අමතක වී තිබුණි. මගේ සියලු සෙවීම් වල නිර්වචනය නොකළ ශුන්‍ය අගය හෝ ලිහිල් සමානාත්මතා සැසඳීම් (==) සඳහා පිළිතුරු පෙන්වයි, නමුත් දැඩි සමානාත්මතාවය (===) හෝ ඊට සමාන නොවේ. පිටුවේ පහළම ඔබේ -1 ශ්‍රේණියේ පිළිතුරෙහි (මා ඉහළට ඔසවා තැබීමට පෙර) මා මග හැර ගිය පිළිතුර මෙන්න. Object.keys( obj ).length < 1හෝ === 0, එය කිසි විටෙකත් -1 නොවනු ඇතැයි උපකල්පනය කරයි. කෙසේ වෙතත්, 0 දක්වා ඉහළට, woo. : p

ස්තූතියි, මට මෙම ශ්‍රිතය අතහැර බොහෝ කේත පිරිසිදු කිරීමට හැකි විය. මෙය සම්මත JS ශ්‍රිතයක් නොවන්නේ ඇයි?
ඇන්ඩි

4
ඔබ වෙනස් කළ යුතු ය සියලු ඔබේ ==කිරීමට ===, මෙහි පසුව මෙම සාධාරණ කාර්යය වනු ඇත.
බෙන් මැකින්ටයර්

14

කෙටිම හා පහසුම:

if(!EmpName ){
 // DO SOMETHING
}

EmpName නම් මෙය සත්‍ය ලෙස තක්සේරු කරනු ඇත:

  • ශුන්‍යයි
  • නිර්වචනය නොකළ
  • නා
  • හිස්
  • string ("")
  • 0
  • බොරු

3
මෙහි නඩුව භාවිතා කිරීම යනු නිර්වචනය නොකළ සහ අසත්‍ය අතර වෙනස දැන ගැනීමට මට අවශ්‍ය වීමයි. මම පසුව චෙක්පත ශුන්‍ය ලෙස භාවිතා කරමි.
gast128

14

මෙය කිරීමට ඇති කෙටිම ක්‍රමය නම්:

if(EmpName == null) { /* DO SOMETHING */ };

මෙන්න සාක්ෂි:

==( මෙහි මූලාශ්‍රය ) පිළිබඳ වැඩි විස්තර මෙහි දැක්වේ

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

බෝනස් : හේතුව ===වඩා පැහැදිලි වීමට හේතුව ==( වයස්ගත පිළිතුර දෙස බලන්න )

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


13

ඔබට පරීක්ෂා කිරීමට අවශ්‍ය විචල්‍යය ගෝලීය නම්, කරන්න

if (window.yourVarName) {
    // Your code here
}

yourVarNameවිචල්‍යය නොපවතින නමුත් පරීක්ෂා කිරීමට මෙම ක්‍රමය දෝෂයක් ඇති නොකරයි.

උදාහරණය: මගේ බ්‍රව්සරය ඉතිහාස API සඳහා සහය දක්වයිදැයි දැන ගැනීමට මට අවශ්‍යය

if (window.history) {
    history.back();
}

මෙය ක්‍රියාත්මක වන ආකාරය:

windowසියලු ගෝලීය විචල්‍යයන් එහි ගුණාංග ලෙස රඳවා ඇති වස්තුවක් වන අතර, ජාවාස්ක්‍රිප්ට් හි නොපවතින වස්තු දේපලකට ප්‍රවේශ වීමට උත්සාහ කිරීම නීත්‍යානුකූල වේ. නම් historyඑවිට නොපවතියි window.historyප්රතිලාභ undefined. undefinedවැරදියි, එබැවින් if(undefined){}බ්ලොක් එකක කේතය ක්‍රියාත්මක නොවේ.


2
බ්‍රව්සරයක ක්‍රියාත්මක වන ජාවාස්ක්‍රිප්ට් වෙතින් - ගෝලීය විචල්‍යයක් ප්‍රකාශයට පත් කර තිබේද, සහ විශේෂයෙන් බ්‍රව්සරයෙන් සපයන ගෝලීය (ඉතිහාස ඒපීඅයි වැනි) තිබේදැයි පරීක්ෂා කිරීම සඳහා මෙවැනි ප්‍රවේශයක් මුග්ධ බව පා ers කයන් සැලකිල්ලට ගත යුතුය . එය ක්රියා නොකරනු ඇත , එක්-ගෝලීය නොවන විචල්ය යන්න පරීක්ෂා කිරීම සඳහා nullහෝ undefined, හෝ ඔබේ JavaScript බ්රවුසරයක් (එනම් Node.js දී) පිටත ක්රියාත්මක වේ නම් එය වැඩ කරනු ඇත. එය සකසා ඇත සංග්රහ globals ද 0, falseහෝ ''අප්රසිද්ධ හෝ කරන අය මෙන් ම undefinedහෝ nullසාමාන්යයෙන් හොදින් වන.
මාර්ක් අමරි

මෙය උපකල්පනය කරන්නේ ස්ක්‍රිප්ට් බ්‍රව්සරයක ක්‍රියාත්මක වන බවයි. එය ලබා දී නැත.
GreenAsJade

9

මට මේ ගැටලුව ඇති වී ඇත, එනම් වස්තුවක් ශුන්‍ය දැයි පරීක්ෂා කිරීම.
මම මෙය සරලවම භාවිතා කරමි:

if (object) {
    // Your code
}

උදාහරණයක් වශයෙන්:

if (document.getElementById("enterJob")) {
    document.getElementById("enterJob").className += ' current';
}

3
(A) A.className + = 'current' නම් var A = document.getElementById ("enterJob") සැකසීම වඩා හොඳය; මේ ආකාරයෙන් ඔබ එකම ප්‍රති result ලය සඳහා 50% ක් වැඩ කරයි ... නමුත් සමහර විට ඔබ එය සංදර්ශන සඳහා පමණක් කර පසුව ආචාර කරමි.
හැරී ස්වෙන්සන්

8

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

var s; // undefined
jQuery.isEmptyObject(s); // will return true;

s = null; // defined as null
jQuery.isEmptyObject(s); // will return true;

// usage
if(jQuery.isEmptyObject(s)){
    alert('Either variable: s is undefined or its value is null');
}else{
     alert('variable: s has value ' + s);
}

s = 'something'; // defined with some value
jQuery.isEmptyObject(s); // will return false;

මෙය මට වැඩ කළේ නැත. මට තවමත් දෝෂය ඇත: ReferenceError: s is not definedපළමු උදාහරණය සඳහා.
මාර්ක්

6

jQuery පිරික්සුම් අංගය ශුන්‍ය නොවේ:

var dvElement = $('#dvElement');

if (dvElement.length  > 0) {
    // Do something
}
else{
    // Else do something else
}

5

ජාවාස්ක්‍රිප්ට් හි, මගේ දැනුමට අනුව, අපට පහත පරිදි නිර්වචනය නොකළ, ශුන්‍ය හෝ හිස් විචල්‍යයක් පරීක්ෂා කළ හැකිය.

if (variable === undefined){
}

if (variable === null){
}

if (variable === ''){
}

සියලුම කොන්දේසි පරීක්ෂා කරන්න:

if(variable === undefined || variable === null || variable === ''){
}

varරක්ෂිත වචනය, මේ විසි ඇතSyntaxError
dhilt

5

ඔබට සරලවම පහත සඳහන් දෑ භාවිතා කළ හැකිය (මෙය කිරීමට කෙටි ක්‍රම ඇති බව මම දනිමි, නමුත් මෙය දෘශ්‍යමය වශයෙන් නිරීක්ෂණය කිරීම පහසු කරයි, අවම වශයෙන් කේතය දෙස බලන අනෙක් අයට).

if (x === null || x === undefined) {
 // Add your response code here, etc.
}

4

පරීක්ෂා කිරීමට පහසුම ක්‍රමය නම්:

if(!variable) {
  // If the variable is null or undefined then execution of code will enter here.
}

1
විචල්‍යයට අගයක් තිබේ falseනම් මෙය අනවශ්‍ය විය හැකි කේතයක් ක්‍රියාත්මක කරයි .
byxor

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

1
කණගාටුයි, නමුත් එය වැරදිය. මෙන්න එය සනාථ කිරීම සඳහා JSfiddle ය.
byxor

ඔබගේ පිළිතුර විසින් undefined, null සහ හිස් අගයක් වැනි වෙනත් දේවල් කිහිපයක්, +0, -0 NaNසහ falseහරහා ලබා ගන්න. !ක්‍රියාකරු ඔපෙරන්ඩ් එක බල කරයි variable- බූලියන් වෙත: ecma-international.org/ecma-262/#sec-toboolean
Alireza

නමුත් ප්‍රශ්නය පරීක්ෂා කරන්න: "විචල්‍යයක් නිර්වචනය කර නොමැතිද නැතිනම් නිශ්චය කරන්නේ කෙසේද", ද! විචල්‍යය ශුන්‍ය හෝ නිර්වචනය නොකළහොත් if සමඟ භාවිතා කරන ඔපෙරන්ඩ් සැමවිටම සත්‍යයට පැමිණේ.
එම්. ආර්නෝල්ඩ්

3

පහත විසඳුම සමඟ:

const getType = (val) => typeof val === 'undefined' || !val ? null : typeof val;
const isDeepEqual = (a, b) => getType(a) === getType(b);

console.log(isDeepEqual(1, 1)); // true
console.log(isDeepEqual(null, null)); // true
console.log(isDeepEqual([], [])); // true
console.log(isDeepEqual(1, "1")); // false
etc...

මට පහත සඳහන් දෑ පරීක්ෂා කළ හැකිය:

  • ශුන්‍යයි
  • නිර්වචනය නොකළ
  • නා
  • හිස්
  • string ("")
  • 0
  • බොරු

"මම ශුන්‍ය හා නිර්වචනය නොකළේ කෙසේද?" යන ප්‍රශ්නයට මෙය පිළිතුරු සපයන්නේ නැත. "ජාවාස්ක්‍රිප්ට් හි ඇති සෑම ව්‍යාජ වටිනාකමක්ම මා අල්ලා ගන්නේ කෙසේද?"
තාවකාලික_සර්_නාමය

ErAerovistae, මම සිතුවේ මම console.log (isDeepEqual (null, null)) සමඟ කළ බවය; සහ console.log (isDeepEqual (නිර්වචනය නොකළ, නිර්වචනය නොකළ)); ?
ටෝනි තායි ගුයින්

2

විචල්යයක් ශුන්ය හෝ නිර්වචනය කර ඇත්දැයි පරීක්ෂා කිරීම සඳහා මම පහත කේතය භාවිතා කරමි.

    if(typeof sVal === 'undefined' || sVal === null || sVal === ''){
      console.log('variable is undefined or null');
    }

වසන්න නමුත් නැත. නැති typeofවී undefinedකෙලින්ම පිටතට සංසන්දනය කරන්න , නූලක් ලෙස නොවේ. මෙය ක්‍රියාත්මක වන නමුත් අතිරේක ක්‍රියාකරුට එය වචනයක් බවට පත් කිරීම හැර වෙනත් බලපෑමක් නැත.
තාවකාලික_

මෙම අවස්ථාවේ දී ඔව් ඔබ හරි අපට ටයිප් ඕෆ් භාවිතා කිරීමට අවශ්‍ය නැත. නමුත් ඔබ නිර්වචනය නොකළ විචල්‍යයන් සමඟ කටයුතු කරන විට යතුරු ලියනය භාවිතා කිරීම හොඳ පුරුද්දකි. Typeof භාවිතා කිරීමට එක් හේතුවක් නම් විචල්‍යය ප්‍රකාශ කර නොමැති නම් එය දෝෂයක් නොදක්වයි.
ඩන්කෝඩි

ඇත්තෙන්ම එය නරක දෙයකි. ඔබේ කේතයේ ප්‍රකාශයට පත් නොකළ විචල්‍යයන් ඔබට අවශ්‍ය නැත. ඔබට එය ReferenceError එකක් විසි කිරීමට අවශ්‍ය වන අතර එවිට ඔබට විචල්‍යය සොයාගෙන එය ප්‍රකාශ කළ හැකිය. නිසැකවම ඔබ එය C ++ වැනි සංයුක්ත භාෂාවෙන් උත්සාහ නොකරනු ඇත! JS එයට ඉඩ දුන් පමණින් එය කළ යුතු යැයි අදහස් නොකෙරේ.
තාවකාලික_

1
ඔබේ හෝ ප්‍රකාශය පසුපසට ය. යමක් නිර්වචනය කර නොමැතිදැයි පරීක්ෂා කිරීම පළමු පියවර වනු ඇත, දෙවන පියවර නොවේ.
ඇන්තනි රට්ලෙජ්

2

මම මෙම පරීක්ෂණය ක්‍රෝම් කොන්සෝලය තුළ ක්‍රියාත්මක කරමි. (අවලංගු 0) භාවිතා කිරීමෙන් ඔබට නිර්වචනය නොකළ පරීක්ෂා කළ හැකිය:

var c;
undefined
if (c === void 0) alert();
// output =  undefined
var c = 1;
// output =  undefined
if (c === void 0) alert();
// output =   undefined
// check c value  c
// output =  1
if (c === void 0) alert();
// output =  undefined
c = undefined;
// output =  undefined
if (c === void 0) alert();
// output =   undefined

2

අපි මේ දෙස බලමු,

  1.  

    let apple; // Only declare the variable as apple
    alert(apple); // undefined

    ඉහත දැක්වෙන්නේ විචල්‍යය ලෙස ප්‍රකාශ වන්නේ පමණි apple. මෙම අවස්ථාවේදී, අපි ක්‍රමයට කතා කළහොත් alertඑය නිර්වචනය නොකෙරේ.

  2.  

       let apple = null; /* Declare the variable as apple and initialized but the value is null */
       alert(apple); // null

appleවටිනාකමේ විචල්‍යය ශුන්‍ය බැවින් දෙවැන්නෙහි එය ශුන්‍ය වේ.

එබැවින් වටිනාකමක් නිර්වචනය කර නැතිද නැතිනම් ඔබට පරීක්ෂා කළ හැකිය.

if(apple !== undefined || apple !== null) {
    // Can use variable without any error
}

1

හොඳම ක්‍රමය:

if(typeof variable==='undefined' || variable===null) {

/* do your stuff */
}

6
දැනටමත් ඔක්තෝබර් 11, 2013 දින @jkindwall මෙම නිශ්චිත විසඳුමක් ලබා stackoverflow.com/a/19323555/2943403 එය පිටුවට කිසිදු නව අගය එකතු නිසා මෙම කේතය පමණක් පශ්චාත් සම්පූර්ණයෙන්ම මිනිසෙක් ය. ඇත්ත වශයෙන්ම, එය පිටු පිපිරීමක් එකතු කරන අතර පර්යේෂකයන් එය කියවීමට කාලය නාස්ති කරයි. කරුණාකර මෙම පිළිතුර ඉවත් කරන්න.
mickmackusa

1
(null == undefined)  // true

(null === undefined) // false

මොකද === වර්ගය සහ වටිනාකම යන දෙකම පරීක්ෂා කරයි. දෙකෙහිම වර්ගය වෙනස් නමුත් අගය සමාන වේ.


1
var i;

if (i === null || typeof i === 'undefined') {
    console.log(i, 'i is undefined or null')
}
else {
    console.log(i, 'i has some value')
}

3
පරිශීලකයා 'නිර්වචනය නොකළ' යන වචනයට ඇතුළු වුවහොත් කුමක් සිදුවේද?
චක්

ඔබේ ප්‍රශ්නය හොඳයි, එය තත්වය සත්‍ය බව පෙන්වන බැවින් සාමාන්‍ය විකල්පය ටයිප් ඔෆ් තත්වයට වෙනස් කළ යුතුය. @Chuck
KARTHIKEYAN.A

මේක වැරදියි. typeofකිසි විටෙකත් yield ල නොදෙනු ඇත, නූල undefinedපමණි 'undefined'. එපමනක් නොව, i == nullනම් මේ වන විටත් සැබෑ ය iundefined, ඒ නිසා දෙවන වීජ එය වැඩ පවා නම් අතිරික්ත වනු ඇත.
තාවකාලික_

1
මෙම විසඳුම (කොන්දේසි ආපසු හැරවීමත් සමඟ) 2013 ඔක්තෝබර් 11 වන දින @jkindwall විසින් ලබා දී ඇත. ඇත්ත වශයෙන්ම, එය පිටු පිපිරීමක් එකතු කරන අතර පර්යේෂකයන් එය කියවීමට කාලය නාස්ති කරයි. කරුණාකර මෙම පිළිතුර ඉවත් කරන්න.
mickmackusa

1

මෙම foo == nullචෙක්පත උපාය කරන්න සහ කෙටිම ආකාරයෙන් "නිර්වචනය නොකළ හෝ ශූන්ය" නඩුව සමථයකට පත් කළ යුතු. ("Foo" ලෙස නොසැලකේ. එස්ලින්ට් සහ ට්ලින්ට් හි eqeqeq හෝ ත්‍රිත්ව-සමාන නීති දෙස බලන්න ...

විචල්යයක් undefinedහෝ nullවෙනම දැයි අප පරික්ෂා කරන විට පැහැදිලි ප්රවේශය මෙම අවස්ථාවේ දී යෙදිය යුතු අතර, මාතෘකාවට මගේ දායකත්වය (දැනට negative ණාත්මක නොවන පිළිතුරු 27 ක්!) void 0පරීක්ෂා කිරීම සඳහා කෙටි හා ආරක්ෂිත ක්රමයක් ලෙස භාවිතා කිරීම ය. සඳහාundefined .

foo === undefinedනිර්වචනය කිරීම වෙන් කර ඇති වචනයක් නොවන අතර සෙවනැලි කළ හැකි නිසා ( MDN ) භාවිතා කිරීම ආරක්ෂිත නොවේ . typeof === 'undefined'චෙක්පත භාවිතා කිරීම ආරක්ෂිතයි, නමුත් අප විසින් foo-is-ප්‍රකාශයට පත් නොකළ නඩුව ගැන සැලකිලිමත් නොවන්නේ නම් පහත සඳහන් ප්‍රවේශය භාවිතා කළ හැකිය:

if (foo === void 0 || foo === null) { ... }

1

ඔබ එය පරීක්ෂා කිරීම සඳහා ශ්‍රිතයක් නිර්මාණය කරන්නේ නම්:

export function isEmpty (v) {
 if (typeof v === "undefined") {
   return true;
 }
 if (v === null) {
   return true;
 }
 if (typeof v === "object" && Object.keys(v).length === 0) {
   return true;
 }

 if (Array.isArray(v) && v.length === 0) {
   return true;
 }

 if (typeof v === "string" && v.trim().length === 0) {
   return true;
 }

return false;
}

-1

ටයිප් ඔෆ් ශුන්‍යය ඇමතීමෙන් “වස්තුව” හි අගය ලැබේ, විශේෂ අගය ශුන්‍යය හිස් වස්තු යොමු කිරීමක් ලෙස සැලකේ. 5 වන අනුවාදය හරහා සෆාරි සහ 7 වන අනුවාදය හරහා ක්‍රෝම් යන දෙඅංශයෙන්ම නිත්‍ය ප්‍රකාශනයක යතුරු ලියනය කිරීම “ශ්‍රිතය” ලබා දෙන අතර අනෙක් සියලුම බ්‍රව්සර් “වස්තුව” ආපසු ලබා දේ.


-1
var x;
if (x === undefined) {
    alert ("only declared, but not defined.")
};
if (typeof y === "undefined") {
    alert ("not even declared.")
};

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


-1

මම තවමත් සිතන්නේ මෙම කොන්දේසි දෙක පරීක්ෂා කිරීමට හොඳම / ආරක්ෂිත ක්‍රමය වන්නේ අගය නූලකට දැමීමයි:

var EmpName = $("div#esd-names div#name").attr('class');

// Undefined check
if (Object.prototype.toString.call(EmpName) === '[object Undefined]'){
    // Do something with your code
}

// Nullcheck
if (Object.prototype.toString.call(EmpName) === '[object Null]'){
    // Do something with your code
}

පරීක්ෂණ සිදු කිරීමට මෙය “හොඳම / ආරක්ෂිත ක්‍රමය” යැයි ඔබ විශ්වාස කරන්නේ මන්දැයි ඔබට පැහැදිලි කළ හැකිද?
sadmicrowave

පරිවර්තනය සෑම විටම "ප්‍රමිතිගත" නූලක් (එනම් [වස්තුව නිර්වචනය නොකළ)) ආපසු ලබා දෙන නිසා, ව්‍යාජ අගයන් පරික්ෂා කිරීමෙන් ඔබ කරදරයට පත් නොවනු ඇත. සත්‍ය / ව්‍යාජ සාරධර්ම සමඟ මා ලැබූ අත්දැකීම් මත පදනම් වූ මගේ මතය එයයි.
n1kkou

පැහැදිලි කිරීම සඳහා ස්තූතියි. මම විවේචනය නොකරමි, එහි සිත්ගන්නාසුලු පිළිතුරකි, මට අවශ්‍ය වූයේ මෙය වෙනත් ක්‍රමවලට වඩා උසස් විය හැක්කේ මන්ද යන්න පිළිබඳව ඔබ අන් අයට යම් පැහැදිලි කිරීමක් ලබා දීමටය.
sadmicrowave

කරදර නැහැ! මේ ආකාරයේ සැසඳීම් සමඟ මට ගැටලු රාශියක් ඇති අතර, මේ දක්වා එය මේ කාරණය සඳහා වඩාත්ම ප්‍රයෝජනවත් ප්‍රවේශය ලෙස මම දකිමි.
n1kkou

-2

යතුරු ලියනය භාවිතා කිරීමෙන් අගය නිර්වචනය කර නොමැතිද නැතිනම් ඔබට පරීක්ෂා කළ හැකිය:

if(typeof value == 'undefined'){

යතුරු ලියනය සම්බන්ධයෙන් පෙර පිළිතුරෙහි ( stackoverflow.com/a/21273362/6305294 ) අදහස් බලන්න .
ඇලෙක්ස්

4
මෙය වැරදිය. අල්ලා ගන්නේ නැත null. මීට වසර ගණනාවකට පෙර නිවැරදි හා සම්පූර්ණ පිළිතුරක් ලබා දුන් ප්‍රශ්නයකට නව, වැරදි පිළිතුරු සපයන්නේ මන්දැයි මට තේරෙන්නේ නැත. වර්තමාන පිළිතුරු කෙසේ හෝ ප්‍රමාණවත් නොවන බව ඔබට හැඟෙනවාද?
තාවකාලික_

-4

if(x==null)ජාවාස්ක්‍රිප්ට් හි නරක අදහසකි. සමඟ විනිශ්චය කරන්න "=="- එය අනපේක්ෂිත ආකාරයේ බලහත්කාරයක් ඇති කළ හැකි අතර එය කෝපි ස්ක්‍රිප්ට් මඟින් කියවිය නොහැක, කොන්දේසි විනිශ්චය කිරීමේදී කිසි විටෙකත් "==" හෝ "! =" භාවිතා නොකරන්න!

if(x)වඩා හොඳ වනු ඇත, නමුත් 0 සහ "" සමඟ ප්‍රවේශම් වන්න . එය ලෙස සලකනු ලැබේ බොරු නොවේ සමග සමාන ක්රමයක් "!= null"වේ සැබෑ .

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

ජාවාස්ක්‍රිප්ට් හොඳම පිළිවෙත් බලන්න .


3
මෙය සම්පුර්ණයෙන්ම වැරදිය. ඕනෑම වෘත්තීය මට්ටමේ රාමුවක් හෝ මෘදුකාංගයක් පිළිබඳ අධ්‍යයනය කිරීමෙන් එය මොහොතකින් සනාථ වේ. භාවිතා ==කිරීමට සංසන්දනය කිරීමට null මුහුදේ දැළක් සමමත ක්රමයක්ද nullහා undefinedJS දී. සමග වර්ගය බලහත්කාරය යොදා ==මෙම නිශ්චිත සන්දර්භය තුළ අවදානමක් නොවේ, සහ ඇත්ත දෙකම නෙත් ඇදගන්නා ඉලක්කය ඉටු කිරීමට ප්රයෝජනයට ගෙන තිබේ nullහා undefinedඑකවර. මීට වසර ගණනාවකට පෙර සතුටුදායක ලෙස විසඳන ලද ප්‍රශ්නවලට වැරදි සහ නොමඟ යවන පිළිතුරු සැපයීමට තෝරා ගැනීමට පෙර කරුණාකර භාෂාව සමඟ වැඩ කිරීමට වැඩි කාලයක් ගත කරන්න.
තාවකාලික_

වළකින්න "==". සෑම දෙයක්ම සෑම විටම වෙනස් වෙමින් පවතී, මම ඔබ සමඟ එකඟ නොවෙමි @ ඒරොවිස්ටේ
ඇල්බට්.කිං

3
ඔබ මා සමඟ එකඟ නොවේ - ඔබ සමස්ත ජාවාස්ක්‍රිප්ට් ආයතනය සමඟ එකඟ නොවේ. පැහැදිලි විය යුතුයි.
තාවකාලික_සර්_නාමය
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.