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


2279

විචල්ය එය බව, වටිනාකම සහ වගකීම බව චෙක්පත් බව විශ්ව JavaScript උත්සවය පවතී undefinedහෝ null? මට මෙම කේතය ඇත, නමුත් එය සියලු අවස්ථා ආවරණය කරයිදැයි මට විශ්වාස නැත:

function isEmpty(val){
    return (val === undefined || val == null || val.length <= 0) ? true : false;
}


81
වළක්වන්න, කවදාවත් කරන්න එපා (truthy statement) ? true : false;. කරන්න (truthy statement);.
ඩේවිඩ් බොකුම්

5
E ජෝර්ජ් ජෙම්ප්ටි ඩුප් එකක් නොවේ, අනෙක් පිළිතුර විශේෂයෙන් නූල් ගැන විමසන අතර, මෙය විචල්යයන් ගැන අසයි .
මැඩ්බ්‍රේක්ස්

2
මෙම ප්‍රශ්නයට ඕනෑම නිවැරදි පිළිතුරක් රඳා පවතින්නේ ඔබ "හිස්" යන්න නිර්වචනය කරන්නේ කෙසේද යන්න මත ය.
මැඩ්බ්‍රේක්ස්

3
Ay ජේ ඔබේ කේතය ක්‍රියාත්මක කරන තාක් දුරට එය කිසිඳු හානියක් නොකරයි. එය ඕනෑවට වඩා වාචික ය. "ඔබට බඩගිනිද?" ඔබ "ඔබට බඩගිනිද" එබැවින් කේතයෙන් if (hungry) …ඒ වෙනුවට කියන්න if (hungry === true) …. මේ ආකාරයට සියලු කේතීකරණ දේවල් මෙන්, එය රසයේ කාරණයක් පමණි. OP විසින් සපයන ලද ආදර්ශයට වඩාත් නිශ්චිතව ඔහු වඩාත් වාචිකව පවසන්නේ, “එය සත්‍ය නම්, සත්‍ය නම්, එසේ නොවේ නම් අසත්‍යය” නමුත් එය සත්‍ය නම් එය දැනටමත් සත්‍යයකි. තවද, එය අසත්ය නම්, එය දැනටමත් අසත්යය. මෙය "ඔබට බඩගිනි නම් ඔබ එසේය, එසේ නොවේ නම් ඔබ එසේ නොවේ" යැයි පැවසීමට සමාන වේ.
ඩේවිඩ් බොකුම්

Answers:


4418

නම්, ඔබ පරීක්ෂා කළ හැක විචල්ය සතුව truthyහෝ වටිනාකම නොවේ. ඒ කියන්නේ

if( value ) {
}

කිරීමට සලකා බලනු ඇත trueනම් valueවේ නොහැකි :

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

ඉහත ලැයිස්තුව falsyECMA- / Javascript හි ඇති විය හැකි සියලු අගයන් නියෝජනය කරයි . තුළ එය සොයා පිරිවිතර දී ToBooleanකොටස.

තවද, ඔබ කරන්නේ නොවේ නම් දන්නේ (එය නම්, ඒ මාර්ගයෙන් විචල්ය පවතී ද යන්න ප්රකාශ ) ඔබ සමග පරික්ෂා කර බැලිය යුතුය typeofක්රියාකරු. උදාහරණයක් වශයෙන්

if( typeof foo !== 'undefined' ) {
    // foo could get resolved and it's defined
}

අවම වශයෙන් විචල්‍යයක් ප්‍රකාශයට පත් කර ඇති බවට ඔබට සහතික විය හැකි නම්, truthyඉහත පෙන්වා ඇති ආකාරයට අගයක් තිබේදැයි ඔබ කෙලින්ම පරීක්ෂා කළ යුතුය .

වැඩිදුර කියවන්න: http://typeofnan.blogspot.com/2011/01/typeof-is-fast.html


111
වටිනාකම ව්‍යාජ බූලියන් එකක් නම් කුමක් කළ යුතුද? සමහර විට ඔබට වටිනාකමක් නොමැති නම් පෙරනිමි අගයක් ලබා දීමට අවශ්‍ය වනු ඇත, ව්‍යාජ බූලියන් සම්මත වුවහොත් එය ක්‍රියා නොකරනු ඇත.
TruMan1

101
Ru TruMan1: එවැනි අවස්ථාවකදී (ඔබේ තර්කනය වලංගු භාවය නියම කරන විට) ඔබ කැමති විය if( value || value === false )යුතුය. සියලු ව්‍යාජ සාරධර්ම සඳහාද එයම වේ , අප ඒවා පැහැදිලිවම වලංගු කළ යුතුය.
jAndy

29
අගය අරාව නම් හැර. අර්ථ නිරූපණය truthyනොමඟ යවන සුළු විය හැකිය. එවැනි අවස්ථාවක අප value.length != 0හිස් නොවන අරාවක් සඳහා පරික්ෂා කළ යුතුය .
පරිශීලක

12
ifඉදිකිරීම කෘතිමව බර යැයි ඔබට හැඟේ නම් , ඔබට ත්‍රිමාණ ක්‍රියාකරු භාවිතා කළ හැකිය var result = undefined ? "truthy" : "falsy". හෝ ඔබ බිය වද්දන කිරීමට වීජ අගය කිරීම සඳහා, භාවිත අවශ්ය නම් !!ක්රියාකරු, උදා: !!1 // true, !!null // false.
කේඑෆ්එල්

7
මෙය හිස් අවකාශයේ අක්ෂර පමණක් අඩංගු නූල් සඳහා පරික්ෂා නොකරන බව සලකන්න.
ක්‍රිස්ටෝෆ් රූසි

225

අගය නිර්වචනය කර හෝ ශුන්‍ය දැයි පරීක්ෂා කිරීමට වාචික ක්‍රමය:

return value === undefined || value === null;

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

return value == null; // also returns true if value is undefined

33
පමණක් පරීක්ෂා කිරීම nullහෝ එසේ undefinedකළ හැකිය : if (value == null). ==බල කරන ක්‍රියාකරුට සිත දෙන්න . ඔබ මේ ආකාරයට පරික්ෂා කළහොත් if (value === null || value === undefined), ඔබට ජාවාස්ක්‍රිප්ට් බල කරන්නේ කෙසේදැයි අමතක වී ඇත / නොදනී. webreflection.blogspot.nl/2010/10/…
ක්‍රිස්ටියාන් වෙස්ටර්බීක්

32
H ක්‍රිස්ටියාන් වෙස්ටර්බීක්: ඔබේ ලක්ෂ්‍යය arg == nullසමාන ප්‍රති results ල ලබා දෙයි arg === undefined || arg === null. කෙසේ වෙතත්, අවසාන උදාහරණය වඩාත් කියවිය හැකි යැයි මම සලකමි.
සල්මාන් ඒ

10
arg == nullමගේ අත්දැකීම් වල බහුලව දක්නට ලැබේ.
බ්‍රයන් ඩවුන්ං

8
return value === (void 0)undefinedකනගාටුවට කරුණක් නම්, විෂය පථයේ නීත්‍යානුකූල විචල්‍යයක් විය හැකි පරීක්ෂාවට වඩා ආරක්ෂිත වීමයි.
x0n

4
Har ෂාර්කි නිර්වචනය නොකළ විචල්‍යයක් සහ ප්‍රකාශ නොකළ විචල්‍යයක් අතර වෙනසක් තිබේ: lucybain.com/blog/2014/null-undefined-undeclared
ක්‍රිස්ටියාන් වෙස්ටර්බීක්

82
function isEmpty(value){
  return (value == null || value.length === 0);
}

මෙය සත්‍ය වේ

undefined  // Because undefined == null

null

[]

""

ශ්‍රිතයක් lengthයනු ප්‍රකාශිත පරාමිති ගණන වන බැවින් ශුන්‍ය තර්ක ශ්‍රිත වේ.

දෙවන කාණ්ඩය අනුමත නොකිරීමට, ඔබට හිස් නූල් පරීක්ෂා කිරීමට අවශ්‍ය විය හැකිය

function isEmpty(value){
  return (value == null || value === '');
}

8
undefined == nullනමුත්undefined !== null
ඉයන් බොයිඩ්

2
AnIanBoyd ඒ ඔබ == සිට === සංසන්දනය කරන බැවිනි. මෙයින් අදහස් කරන්නේ undefined == null (true) undefined! = null (false) undefined === null (false) undefined! == null (true) උදව් කිරීමට සහ මිනිසුන් තල්ලු කිරීම සඳහා තව ටිකක් තොරතුරු ලබා දීම වඩා හොඳය. නිවැරදි දිශාවට. වෙනස මත MOZ ලේඛය developer.mozilla.org/en-US/docs/Web/JavaScript/...
කුරේ තරුණ

44

මෙය ආරක්ෂිතම චෙක්පත වන අතර එය හරියටම මෙහි පළ කර ඇති බවක් මා දැක නැත:

if (typeof value !== 'undefined' && value) {
    //deal with value'
};

අගය කිසි විටෙකත් නිර්වචනය නොකළ අවස්ථා සහ ඒවායින් කිසිවක් ආවරණය කරයි:

  • ශුන්‍යයි
  • නිර්වචනය නොකළ (නිර්වචනය නොකළ අගය කිසි විටෙකත් නිර්වචනය නොකළ පරාමිතියකට සමාන නොවේ)
  • 0
  • "" (හිස් නූල)
  • බොරු
  • නා

සංස්කරණය කරන ලදි: දැඩි සමානාත්මතාවයට වෙනස් කර ඇත (! ==) එය මේ වන විට සම්මතයක් බැවින්;)


10
මම අවතක්සේරු නොකළ නමුත් දැඩි සමානාත්මතා සංසන්දනය සම්බන්ධයෙන් ගත් කල, සාමාන්‍ය රීතිය නම්, දැඩි සංසන්දනයකට වඩා ව්‍යංග ආකාරයේ පරිවර්තනයක් අවශ්‍ය නොවේ නම් .
ජේ. ස්ටීව්

2
ඔබේ අදහස් දැක්වීමට ස්තූතියි ස්ටීව්. එම සාමාන්‍ය රීතිය හොඳයි. ඔවුන් එක් හෝ වෙනත් දෙයක් භාවිතා කරන්නේ ඇයිද යන්න තේරුම් ගැනීමට මම පීපීඑල් බලාපොරොත්තු වෙමි. ඔබ සෑම විටම පීපීඑල් දෙස බලන විට "සැමවිටම තදින් භාවිතා කරන්න" යන්න ගැන ඔබට දේශනා කිරීමට සතුටු වනු ඇත - එය ජාවාස්ක්‍රිප්ට් හි වැදගත්ම දේ මෙන්. අනවශ්‍ය ප්‍රති .ලයකට තුඩු දෙන if (val! == null) වැනි බොහෝ අවස්ථා මම දැක ඇත්තෙමි . සැකයක් ඇති විට - තදින් භාවිතා කරන්න, නමුත් සැක නොකර සිටීම හොඳ යැයි කීම හොඳයි.
guya

6
මම හිතන්නේ මෙහි ඇති කාරණය නම්, typeofක්‍රියාකරු විසින් නූලක් ආපසු ලබා දෙනු ඇතැයි අපේක්ෂා කරන බැවින් දැඩි සමානාත්මතා පරීක්ෂාව භාවිතා කිරීම තාක්‍ෂණිකව වඩා නිවැරදි, වඩා නිශ්චිත හා වේගවත් වේ. ඉතින් ඇත්ත වශයෙන්ම, ලිහිල් සංසන්දනය භාවිතා කිරීමට හේතුවක් නැත, අනෙක් පැත්තෙන් නොවේ. val !== nullබොහෝ අවස්ථාවන්හිදී ද එය වලංගු වේ - මම එය සෑම විටම කරමි. ඔබගේ අනුකූල නොවන තර්කයට මම එකඟ වෙමි, නමුත් මෙය සෑදීම සඳහා මෙය දුර්වල උදාහරණයක් යැයි මම සිතමි. ඔබව ට්‍රෝලර් කිරීමට උත්සාහ නොකරයි.
බ්‍රයන් ඩවුන්ං

ඔබගේ අදහස් දැක්වීමට ස්තූතියි බ්‍රයන්, ඔබ කරන්නේ අගය! == ශුන්‍ය වන්නේ ඔබ කරන්නේ කුමක්දැයි ඔබ දන්නා බැවිනි. ආරම්භකයකුට වැල් ව්‍යාජ වන විට පසුබෑමක් අවශ්‍ය වේ. නමුත්, අගය කිසි විටෙකත් ශුන්‍ය නොවනු ඇත. “සැමවිටම තදින් භාවිතා කරන්න” යන උපදෙස් වලට ඔහු ඇහුම්කන් නොදුන්නේ නම් ඔහුට අඩු දෝෂ ඇතිවේ. නිෂ්පාදන කේතයෙන් මෙය සිදුවන බව මම දැක ඇත්තෙමි. typeof සෑම විටම නූලක් ලබා දෙන අතර වේග වෙනස අතිරික්ත වේ. එබැවින්, ඉහත නඩුවේදී දැඩි ලෙස භාවිතා කිරීම සඳහා ඇති එකම තර්කය වන්නේ අනුකූලතාවයි. මම පවසා ඇත්තේ “දැඩි සමානාත්මතාවයක් අවශ්‍ය නැත” යන්නයි. ඔබට අවශ්‍ය නම් හෝ ඔබේ කේතය වඩාත් ස්ථාවර කරයි නම් ඔබට එය කළ නොහැකි බව එයින් අදහස් නොවේ.
guya

28

ඔබට පහත ශ්‍රිතය ප්‍රයෝජනවත් විය හැකිය:

function typeOf(obj) {
  return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}

හෝ ES7 හි (වැඩි දියුණු කිරීම් නම් අදහස් දක්වන්න)

function typeOf(obj) {
  const { toString } = Object.prototype;
  const stringified = obj::toString();
  const type = stringified.split(' ')[1].slice(0, -1);

  return type.toLowerCase();
}

ප්රතිපල:

typeOf(); //undefined
typeOf(null); //null
typeOf(NaN); //number
typeOf(5); //number
typeOf({}); //object
typeOf([]); //array
typeOf(''); //string
typeOf(function () {}); //function
typeOf(/a/) //regexp
typeOf(new Date()) //date
typeOf(new WeakMap()) //weakmap
typeOf(new Map()) //map

"බන්ධන ක්‍රියාකරු (: :) ES2016 (ES7) හි කොටසක් හෝ ECMAScript ප්‍රමිතියේ පසුකාලීන සංස්කරණයක් නොවන බව සලකන්න. එය දැනට භාෂාවට හඳුන්වා දීම සඳහා අදියර 0 (ස්ට්රෝමන්) යෝජනාවකි." - සයිමන් කෙජල්බර්ග්. රාජකීය ආරෝහණ ලබා ගැනීම සඳහා මෙම සුන්දර යෝජනාවට කතුවරයා සිය සහය එක් කිරීමට අපේක්ෂා කරයි.


+1 'regexp' , 'array' සහ 'function' වර්ගයේ වස්තුව දැනගැනීම ප්‍රයෝජනවත් වේ
Yash

Ix වික්ස්, ES7 අනුවාදය වඩා හොඳ වන්නේ ඇයි?
ගොලිජර්

එය භාවිතා කරන්නේ එකම ක්‍රියාකාරීත්වය ප්‍රකාශ කිරීමේ වඩාත් කියවිය හැකි ක්‍රම අත්හදා බැලීම නොවේ: පැවරුම් විනාශ කිරීම, බන්ධන ක්‍රියාකරු.
Vix

2
බන්ධන ක්‍රියාකරු ( ::) ES2016 (ES7) හි කොටසක් නොවන බව හෝ ECMAScript ප්‍රමිතියේ පසු සංස්කරණයක් නොවන බව සලකන්න. එය දැනට භාෂාවට හඳුන්වා දීම සඳහා අදියර 0 (ස්ට්රෝමන්) යෝජනාවකි.
සයිමන් කෙජල්බර්ග්

25

හොඳම ශ්‍රේණිගත කිරීම සහිත පළමු පිළිතුර වැරදිය. අගය නිර්වචනය කර නොමැති නම් එය නවීන බ්‍රව්සර්වල ව්‍යතිරේකයක් දමනු ඇත. ඔබ භාවිතා කළ යුත්තේ:

if (typeof(value) !== "undefined" && value)

හෝ

if (typeof value  !== "undefined" && value)

3
eee ... මම හිතන්නේ මෙය වැරදියි (අගය) ප්‍රමාණවත් නම් (හිස් වස්තු / අරා හැර). අගය 'නිර්වචනය නොකළේ නම්' නම් 'පාපොච්චාරණය සමත් නොවේ.
ඔස්කාර් සූරා

3
මෙය අර්ථ දක්වා නොමැති විචල්‍යයන් (ඇගයීම සඳහා යොමු දෝෂයක් විසි කරයි), undefinedඅගය සමඟ විචල්‍යයන්ට වෙනස් වේ .
ක්වන්ටාස් 94 බර

2
මට මෙහි එකම දෝෂයක් තිබේ. (x) නම්, (! x) නම්, (!! x) නම් x නිර්වචනය කර නොමැති නම් සියල්ලම දෝෂ සහිත වේ.
shaosh

if(value === 0) gameOver(); ;)
මැඩ්බ්‍රේක්ස්

මෙම පිළිතුර ද වැරදියි, මන්ද එය valueශුන්‍ය වන විට අසත්‍යය ලබා දෙන අතර එය සොයන දේ නොවේ .
මැඩ්බ්‍රේක්ස්

17

මෙම තත්වය පරීක්ෂා කිරීම

if (!!foo) {
    //foo is defined
}

ඔබට අවශ්‍ය වන්නේ එයයි.


මම හිතන්නේ මෙය කුඩා කොටසක් පමණයි. නමුත් ifදැනටමත් ව්‍යාජ චෙක්පතක් කර ඇති අතර මෙය බූලියන් බවට පරිවර්තනය වේ. සාමාන්‍යයෙකුට හසු නොවන ඕනෑම අවස්ථාවක් එයට if(foo)හසු වේද?
දාන් වැන් හල්ස්ට්

1
ඔබට පේළියේ යමක් අවශ්‍ය වූ විට මෙය පරිපූර්ණ වේ, නිදසුනක් ලෙස මට ප්‍රතික්‍රියාකාරකයක් අවශ්‍යය (සක්‍රිය යැයි කියනු ලැබේ) එය නූල් හිස් නොවන විට සත්‍ය වේ - if ප්‍රකාශයක් අධික ලෙස මරා දැමුවහොත් මට එය භාවිතා කළ හැකියactive={!!foo}
බෙන් කෝල්යා මෑන්ස්ලි

Foo 0 නොවේ නම්
Gorky

16

! සඳහා පරීක්ෂා කරන්න හිස් නූල් ( ""), ශුන්ය, නිර්වචනය නොකළ එකක් වීම ගැන, සහ ව්යාජ සංඛ්යාව 0 සහ නන්. කියන්න, නූලක් හිස් var name = ""නම් console.log(!name)නැවත පැමිණේ true.

function isEmpty(val){
  return !val;
}

මෙම ශ්රිතය නම් සැබෑ ආපසු Val වේ සංඛ්යාව 0 හෝ නන්, හිස්, ශුන්ය, නිර්වචනය නොකළ බොරු .

හෝ

ඔබගේ ගැටළු වසමට අනුව ඔබට වැනි !valහෝ භාවිතා කළ හැකිය !!val.


විචල්‍යය හිස් නම් මෙය සත්‍ය වශයෙන්ම නොකියයි, මන්ද ව්‍යාජ සහ 0 වලංගු අගයන් විය හැකි අතර හිස් අගයක් නොවේ. IsEmpty ශ්‍රිතයක් තිබීමේ වටිනාකම වනුයේ හිස් ප්‍රතිලාභ සත්‍ය යැයි ඔබ අපේක්ෂා කරන අගයන් සහතික කිරීමයි. මගේ මතය අනුව ශුන්‍ය, නිර්වචනය නොකළ, NaN සහ හිස් නූලක් යනු හිස් යැයි හැඟෙන අගයන් ය.
කෝරි යන්ග්

9
isEmpty(val)ඔබට කළ හැකි නම් භාවිතා කරන්නේ ඇයි !val?
ඇලන් ලිනටොක්

එය ඔබට භාරයි. කියවීමේ හැකියාව වැඩි කිරීමට ඔබට එය භාවිතා කළ හැකිය. එසේ නොමැතිනම් ඔබ වැඩ කරන කණ්ඩායම වඩා අත්තිකාරම් කේතයක් යැයි ඔබ සිතන්නේ නම්, එවිට ඔබට ඔබගේ ගැටළු වසමට අනුව !valහෝ භාවිතා කළ හැකිය !!val.
අරිෆ්

15

විසඳුමක් මම ගොඩක් කැමතියි:

හිස් විචල්‍යයක් nullහෝ undefined, හෝ එහි දිග තිබේ නම් එය ශුන්‍ය වේ, නැතහොත් එය වස්තුවක් නම් එයට යතුරු නොමැත:

function isEmpty (value) {
  return (
    // null or undefined
    (value == null) ||

    // has length and it's zero
    (value.hasOwnProperty('length') && value.length === 0) ||

    // is an Object and has no keys
    (value.constructor === Object && Object.keys(value).length === 0)
  )
}

ප්‍රතිලාභ:

  • සැබෑ: undefined , null, "", [],{}
  • බොරු: true , false, 1, 0, -1, "foo", [1, 2, 3],{ foo: 1 }

14

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

function isEmpty(value){
    return (typeof value === "undefined" || value === null);
}

මෙම උපකල්පනය කරයි 0, ""සහ වස්තු (පවා හිස් වස්තුව සහ අරා) වලංගු 'වටිනාකම්' වේ.


10

ඔබ සරල ජාවාස්ක්‍රිප්ට් කැමති නම් මෙය උත්සාහ කරන්න:

  /**
   * Checks if `value` is empty. Arrays, strings, or `arguments` objects with a
   * length of `0` and objects with no own enumerable properties are considered
   * "empty".
   *
   * @static
   * @memberOf _
   * @category Objects
   * @param {Array|Object|string} value The value to inspect.
   * @returns {boolean} Returns `true` if the `value` is empty, else `false`.
   * @example
   *
   * _.isEmpty([1, 2, 3]);
   * // => false
   *
   * _.isEmpty([]);
   * // => true
   *
   * _.isEmpty({});
   * // => true
   *
   * _.isEmpty('');
   * // => true
   */

function isEmpty(value) {
    if (!value) {
      return true;
    }
    if (isArray(value) || isString(value)) {
      return !value.length;
    }
    for (var key in value) {
      if (hasOwnProperty.call(value, key)) {
        return false;
      }
    }
    return true;
  }

එසේ නොමැතිනම්, ඔබ දැනටමත් යටි ඉරි හෝ ලොඩාෂ් භාවිතා කරන්නේ නම්, උත්සාහ කරන්න:

_.isEmpty(value)

3
ඔබේ කේතය උත්සාහ කර ඇත. මට කොන්සෝලය තුළ දෝෂ පණිවිඩයක් ලැබුණි: "නොකියවූ යොමු දෝෂය: isArray () අර්ථ දක්වා නැත". එසේ නොවුවහොත්, එය ක්‍රියාත්මක වන්නේ නම් එය ඉතා හොඳ වේ.
crmprogdev

11
අවම වශයෙන් ලොඩාෂ් සම්බන්ධයෙන් ගත් කල, _.isNilඔබ සොයන කාර්යය නොවේ _.isEmpty. isNil ප්‍රලේඛනය , isEmpty ප්‍රලේඛනය
Snixtor

අගය බූලියන් වන අතර වටිනාකම සත්‍ය නම් මෙය අසාර්ථක වේ.
kalyanbk

3
සරල ජාවාස්ක්රිප්ට් නැත isArrayහෝ isStringමත අනවශ්ය window.
GFoley83

@ GFoley83 - ඔබ මාව අල්ලා ගත්තා! වින්ඩෝස් භාවිතා නොකිරීමට මගේ හේතු තිබේ. මෘදුකාංග භාෂාවල ඉතිහාසය හා ප්‍රගතිය ගැන කථා කරන පරිච්ඡේදයේ මාතෘකාව මම සැබවින්ම ආවරණය කරමි. වඩාත් අදාළ තොරතුරු වනුයේ මගේ පොතේ මොනාඩික් දෝෂ හැසිරවීම නිරූපණය කරන සාකච්ඡාව / කේතය, Go හි ක්‍රියාකාරී ක්‍රමලේඛනය ඉගෙන ගන්න. චියර්ස්!
l3x

9

මෙන්න මගේ - අගය ශුන්‍ය, නිර්වචනය නොකළ, හෝ හිස් නම් (එනම් හිස් අවකාශ පමණක් අඩංගු වේ) සත්‍ය වේ.

function stringIsEmpty(value) {

    return value ? value.trim().length == 0 : true;

}

1
මම මෙහි ක්‍රම කිහිපයක් පිළිබඳව පරීක්ෂණයක් කළා. නිර්වචනය නොකළ චෙක්පතක් සමඟ, ඔබේ ක්‍රියාකාරිත්වය විශිෂ්ට ලෙස ක්‍රියා කරයි. එබැවින් මම භාවිතා කරන්නේ (typeof value! == 'undefined' &&! IsEmpty (value)) හෝ, ඔබට ඇත්ත වශයෙන්ම හිස්දැයි පරීක්ෂා කිරීමට අවශ්‍ය නම්, ඔබට භාවිතා කළ හැකිය (typeof value === 'undefined' || IsEmpty2 (value) ). මෙය ශුන්‍ය සඳහා ක්‍රියා කරනු ඇත; නිර්වචනය නොකළ; 0; ""; ""; false
RationalRabbit

6
return val || 'Handle empty variable'

එය ස්ථාන ගණනාවක හැසිරවීමට ඉතා හොඳ හා පිරිසිදු ක්‍රමයක් වන අතර විචල්‍යයන් පැවරීමටද භාවිතා කළ හැකිය

const res = val || 'default value'

නෑ ස්ථාන ගොඩක් නමුත් පෙරනිමි විට trueඔබ සැපයීමට හෝ නැවත කිරීමට උත්සාහ කරමින් සිටින valවන false.
මොලොම්බි

Ol මොලොම්බි එය ඉතා සුවිශේෂී අද්දර නඩුවකි, නමුත් එය පවා පහසුවෙන් හැසිරවිය හැකියconst res = falsyValue ? true : falsyValue
කියුබොක්ස්

5

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

if (foo) {}
function (bar) {}(foo)

Foo ප්‍රකාශ කර නොමැති නම් දෙකම දෝෂයක් ජනනය කරනු ඇත.

විචල්‍යයක් ප්‍රකාශයට පත් කර ඇත්දැයි පරීක්ෂා කිරීමට ඔබට අවශ්‍ය නම් ඔබට භාවිතා කළ හැකිය

typeof foo != "undefined"

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

if (typeof foo != "undefined" && foo) {
    //code here
}

5

පෙරනිමි අගය පරීක්ෂා කිරීමට

function typeOfVar (obj) {
      return {}.toString.call(obj).split(' ')[1].slice(0, -1).toLowerCase();
}
function isVariableHaveDefaltVal(variable) {
    if ( typeof(variable) === 'string' ) {  // number, boolean, string, object 
        console.log(' Any data Between single/double Quotes is treated as String ');        
        return (variable.trim().length === 0) ? true : false;
    }else if ( typeof(variable) === 'boolean' ) {
      console.log('boolean value with default value \'false\'');
        return (variable === false) ? true : false;
    }else if ( typeof(variable) === 'undefined' ) {
        console.log('EX: var a; variable is created, but has the default value of undefined.'); 
        return true;
    }else if ( typeof(variable) === 'number' ) { 
        console.log('number : '+variable);
        return (variable === 0 ) ? true : false;
    }else if ( typeof(variable) === 'object' ) {
   //   -----Object-----
        if (typeOfVar(variable) === 'array' && variable.length === 0) {
            console.log('\t Object Array with length = ' + [].length); // Object.keys(variable)
            return true;
        }else if (typeOfVar(variable) === 'string' && variable.length === 0 ) {
            console.log('\t Object String with length = ' + variable.length);
            return true;
        }else if (typeOfVar(variable) === 'boolean' ) {
            console.log('\t Object Boolean = ' + variable);
            return (variable === false) ? true : false;
        }else if (typeOfVar(variable) === 'number' ) {
            console.log('\t Object Number = ' + variable);
            return (variable === 0 ) ? true : false;
        }else if (typeOfVar(variable) === 'regexp' && variable.source.trim().length === 0 ) {
       console.log('\t Object Regular Expression : ');
        return true;
        }else if (variable === null) {
       console.log('\t Object null value');
        return true;
        }
    }
    return false;
}
var str = "A Basket For Every Occasion";
str = str.replace(/\s/g, "-");
//The "g" flag in the regex will cause all spaces to get replaced.

ප්‍රති ult ලය පරීක්ෂා කරන්න:

isVariableHaveDefaltVal(' '); // string          
isVariableHaveDefaltVal(false); // boolean       
var a;           
isVariableHaveDefaltVal(a);               
isVariableHaveDefaltVal(0); // number             
isVariableHaveDefaltVal(parseInt('')); // NAN isNAN(' '); - true         
isVariableHaveDefaltVal(null);              
isVariableHaveDefaltVal([]);               
isVariableHaveDefaltVal(/ /);              
isVariableHaveDefaltVal(new Object(''));               
isVariableHaveDefaltVal(new Object(false));            
isVariableHaveDefaltVal(new Object(0)); 
typeOfVar( function() {} );

කුමන වර්ගයේ වස්තුව පරීක්ෂා කිරීමට මම ixVix ශ්‍රිතය () භාවිතා කළෙමි.

instansof භාවිතා කරමින් «

var prototypes_or_Literals = function (obj) {
    switch (typeof(obj)) {
        // object prototypes
        case 'object':
            if (obj instanceof Array)
                return '[object Array]';
            else if (obj instanceof Date)
                return '[object Date]';
            else if (obj instanceof RegExp)
                return '[object regexp]';
            else if (obj instanceof String)
                return '[object String]';
            else if (obj instanceof Number)
                return '[object Number]';

            else
                return 'object';
        // object literals
        default:
            return typeof(obj);
    }   
};
output test «
prototypes_or_Literals( '' ) // "string"
prototypes_or_Literals( new String('') ) // "[object String]"
Object.prototype.toString.call("foo bar") //"[object String]"        

සංසන්දනාත්මක ක්‍රියාකරුවන් පරික්ෂා කරයි == [දත්ත]. === [දත්ත, වස්තු වර්ගය] ජාත්‍යන්තර අයිඊඊඊ 754 ප්‍රමිතියට අනුව JS අංක සෑම විටම ද්විත්ව නිරවද්‍යතාවයකින් යුත් පාවෙන ලක්ෂ්‍ය සංඛ්‍යා ලෙස ගබඩා කර ඇත. // Number Type [int, float literals ] var int = 77; var float = 77.7; console.log( int.toFixed(10) + '\t' + float.toFixed(10) ); // Object Type var number = new Number( 77 ); if( int != float ) console.log('Data Not Equal'); if( int == number && int !== number ) console.log('Data is Equal & Types vary');
යෂ්

5
function isEmpty(obj) {
    if (typeof obj == 'number') return false;
    else if (typeof obj == 'string') return obj.length == 0;
    else if (Array.isArray(obj)) return obj.length == 0;
    else if (typeof obj == 'object') return obj == null || Object.keys(obj).length == 0;
    else if (typeof obj == 'boolean') return false;
    else return !obj;
}

වයිට්ස්පේස් නූල් හැසිරවීමට ටිම් සමඟ ES6 හි:

const isEmpty = value => {
    if (typeof value === 'number') return false
    else if (typeof value === 'string') return value.trim().length === 0
    else if (Array.isArray(value)) return value.length === 0
    else if (typeof value === 'object') return value == null || Object.keys(value).length === 0
    else if (typeof value === 'boolean') return false
    else return !value
}

1
නියමයි, ස්තූතියි! සෑම වර්ගයකම වටිනාකමක් හසුරුවයි - අනෙක් සියලුම විසඳුම්වල සංඛ්‍යා ඉතිරි වේ!
ෆේබියන් වොන් එලර්ට්ස්

1
AbFabianvonEllerts කරුණාකර වෙනත් කේතයක පිළිතුරට අතිරේක කේත සංස්කරණය කිරීමට උත්සාහ නොකරන්න. එය ඔබගේම පිළිතුරක් ලෙස, පිළිතුර යටතේ අදහස් දැක්වීමක් ලෙස හෝ ඔවුන් විසින්ම පිළිතුර යාවත්කාලීන කරන ලෙස අදහස් දක්වන්න.
ටයිලර් එච්

5

එය ප්‍රයෝජනවත් විය හැකිය.

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

var variablesWhatILookFor = [null, undefined, ''];
variablesWhatILookFor.indexOf(document.DocumentNumberLabel) > -1

2
කරුණාකර ඔබට පැහැදිලි කළ හැකිද? එහි සිදුවන්නේ කුමක්ද
ජොෂ්කිස්බ්

අරාවෙහි ඔබ හිස් යැයි උපකල්පනය කළ යම් විචල්‍යයක් අඩංගු වේ.
ddagsan

Ar ජොෂ්කිස්බ් අරාවෙහි ඇති සියලුම අගයන් නියෝජනය කරන්නේ ඔබට වීමට අවශ්‍ය දේ (ශූන්‍ය, නිර්වචනය නොකළ හෝ වෙනත් දේ) වන අතර ඔබ එහි අවශ්‍ය දේ සොයයි.
ddagsan

1
dddgsan ජොෂ්කිස්බ් ඔබේ පිළිතුර අගය කළ හැකි වුවත්, අදහස් දැක්වීමට වඩා ඔබේ පැහැදිලි කිරීම ඔබේ පිළිතුරට ඇතුළත් කළ යුතුය
නික්

4

ඔබ භාවිතා කරන්නේ නම් TypeScriptසහ ගිණුම් අවශ්ය නැහැ සඳහා එපා 'වටිනාකම් අය false" නම් මෙය ඔබ සඳහා විසඳුම:

පලමු: import { isNullOrUndefined } from 'util';

ඉන්පසු: isNullOrUndefined(this.yourVariableName)

කරුණාකර සටහන් කරන්න: පහත සඳහන් පරිදි මෙය දැන් අතහැර දමා ඇත, value === undefined || value === nullඒ වෙනුවට භාවිතා කරන්න. ref .


2
මම හිතුවේ මේක නියමයි, ඒ නිසා මම මුලින් තෝරා නොගත් නමුත් එය අතහැර දැමූ Node.js දෙයක්. ටයිප් අර්ථ දැක්වීම් ගොනුව මෙසේ කියයි:/** @deprecated since v4.0.0 - use "value === null || value === undefined" instead. */
පරමාණුක

omatomictom මම හිතුවේ ඒක typescriptදෙයක් කියලා. කරුණාකර එහි ලේඛනයේ සබැඳිය ලබා දිය හැකිද?
බ්ලැක්බයර්ඩ්

මෙන්න: nodejs.org/api/util.html#util_util_isnullorundefined_object . එසේම: "මෙය සිසිල් යැයි මම සිතුවෙමි, එබැවින් මම මුලින් ඉහළට ඔසවා තැබුවෙමි " එය කියවිය යුතුය :)
atomictom

මේ වගේ ප්‍රයෝජනවත් සරල දෙයක් අවලංගු කරන්නේ ඇයි? geeeeees.
ටික්ටොක් කරන්න

3

රික්තය

මුළු ලෝකයේම වටිනාකමක් හිස් දැයි ගණනය කරන ශ්‍රිතයක් නිර්වචනය කිරීමට හෝ භාවිතා කිරීමට උත්සාහ කිරීම මම නිර්දේශ නොකරමි. “හිස්” යන්නෙන් ඇත්තටම අදහස් කරන්නේ කුමක්ද? මා සතුව let human = { name: 'bob', stomach: 'empty' }ඇත්නම් isEmpty(human)ආපසු යා trueයුතුද? මා සතුව let reg = new RegExp('');ඇත්නම් isEmpty(reg)ආපසු යා trueයුතුද? කුමක් ගැනද isEmpty([ null, null, null, null ])- මෙම ලැයිස්තුවේ ඇත්තේ හිස් බව පමණි, එබැවින් ලැයිස්තුවම හිස්ද? ජාවාස්ක්‍රිප්ට් හි “රික්තය” (හිතාමතාම අපැහැදිලි වචනයක්, පෙර පැවති ඇසුරෙන් වැළකී සිටීම) පිළිබඳ සටහන් මෙහි ඉදිරිපත් කිරීමට මට අවශ්‍යය - ජාවාස්ක්‍රිප්ට් අගයන්හි “රික්තය” කිසි විටෙකත් සාමාන්‍යයෙන් නොසැලකිය යුතු යැයි තර්ක කිරීමට මට අවශ්‍යය.


සත්‍යය / මුසාවාදය

සාරධර්මවල “රික්තය” තීරණය කරන්නේ කෙසේද යන්න තීරණය කිරීම සඳහා, සාරධර්ම “සත්‍ය” හෝ “ව්‍යාජ” ද යන්න පිළිබඳ ජාවාස්ක්‍රිප්ට්හි ආවේනික, ආවේනික හැඟීම අප විසින් සකස් කළ යුතුය. ස්වාභාවිකවම, nullසහ undefinedදෙකම "ව්‍යාජ" වේ. ස්වභාවිකවම, අංකය 0(සහ වෙනත් සංඛ්‍යාවක් හැර NaN) ද "ව්‍යාජ" ය. අවම වශයෙන් ස්වභාවිකව: ''falsy, නමුත් []සහ {}(හා new Set(), හා new Map()) truthy ඇත - ඒ සෑම දැත්තක්ම එක හා සමාන අරුත් සුන් පෙනේ වුවත්!


Null vs නිර්වචනය නොකළ

nullඑදිරිව එදිරිව යම් සාකච්ඡාවක් ද ඇත undefined- අපගේ වැඩසටහන් වල රික්තය ප්‍රකාශ කිරීම සඳහා අපට ඇත්ත වශයෙන්ම දෙකම අවශ්‍යද? මගේ කේතයේ එම අනුපිළිවෙලෙහි u, n, d, e, f, i, n, e, d අක්ෂර දිස්වීම මම පෞද්ගලිකව වළක්වයි. මම සෑම විටම භාවිතා nullකරන්නේ "රික්තය" යන්නයි. කෙසේ වෙතත්, නැවතත්, ජාවාස්ක්‍රිප්ට්හි සහජයෙන්ම ඇති ආකාරය nullසහ undefinedවෙනස් වන්නේ කෙසේද යන්න අපට අනුගත විය යුතුය:

  • නොපවතින දේපලකට ප්‍රවේශ වීමට උත්සාහ කිරීම ලබා දෙයි undefined
  • ශ්‍රිතයක් ඇමතීමේදී පරාමිතියක් බැහැර කිරීමෙන් එම පරාමිතිය ලැබෙනු ඇත undefined:

let f = a => a;
console.log(f('hi'));
console.log(f());

  • පෙරනිමි අගයන් සහිත පරාමිතීන්ට පෙරනිමිය ලැබෙන්නේ ලබා දුන් විට පමණි undefined, නමුත් null:

let f = (v='hello') => v;
console.log(f(null));
console.log(f(undefined));


ජනක නොවන රික්තය

රික්තය කිසි විටෙකත් සාමාන්‍ය ආකාරයකින් ගනුදෙනු නොකළ යුතු යැයි මම විශ්වාස කරමි. අපගේ දත්ත හිස්ද යන්න තීරණය කිරීමට පෙර ඒ පිළිබඳ වැඩිදුර තොරතුරු ලබා ගැනීමට අප සෑම විටම දැඩි විය යුතුය - මම ප්‍රධාන වශයෙන් මෙය කරන්නේ මා ගනුදෙනු කරන්නේ කුමන ආකාරයේ දත්තද යන්න පරීක්ෂා කිරීමෙනි:

let isType = (value, Cls) => {
  try {
    return Object.getPrototypeOf(value).constructor === Cls;
  } catch(err) {
    return false;
  }
};

මෙම ශ්‍රිතය බහුමාපකය නොසලකා හරින බව සලකන්න - එය අපේක්ෂා කරන්නේ උප කාණ්ඩයක valueසෘජු අවස්ථාවක් Clsමිස උප කාණ්ඩයක අවස්ථාවක් නොවේ Cls. instanceofප්‍රධාන හේතු දෙකක් නිසා මම වැළකී සිටිමි :

  • ([] instanceof Object) === true ("අරාව යනු වස්තුවකි")
  • ('' instanceof String) === false ("නූලක් නූල් නොවේ")

බව සටහන Object.getPrototypeOfවැනි නඩුව වළක්වා ගැනීමට යොදා let v = { constructor: String };ඇති isTypeතවමත් නිවැරදිව නැවත කාර්යය isType(v, String)(බොරු), සහ isType(v, Object)(සත්ය).

සමස්තයක් ලෙස, isTypeමෙම ඉඟි සමඟ මෙම ශ්‍රිතය භාවිතා කිරීමට මම නිර්දේශ කරමි :

  • නොදන්නා වර්ගයේ කේත සැකසුම් අගයන් අවම කරන්න. උදා, මන්ද let v = JSON.parse(someRawValue);, අපගේ vවිචල්‍යය දැන් නොදන්නා ආකාරයේ ය. හැකි ඉක්මනින්, අපගේ හැකියාවන් සීමා කළ යුතුය. උදා: මෙය කිරීමට හොඳම ක්රමය යම් ආකාරයක අවශ්ය විසින් විය හැකි if (!isType(v, Array)) throw new Error('Expected Array');- මේ ලිපිය තුළ වර්ගීය ස්වභාවය ඉවත් කිරීමට ඇත්තටම ඉක්මන් හා ප්රකාශන මාර්ගය v, සහ එය හැම විටම තියෙන්නේ සහතික Array. සමහර විට, අපි ඉඩ දිය යුතුයිv විවිධ වර්ගවල දිය යුතුය. එවැනි අවස්ථාවන්හිදී, vහැකි ඉක්මණින් ජනක නොවන කේත කොටස් අප විසින් නිර්මාණය කළ යුතුය :

if (isType(v, String)) {
  /* v isn't generic in this block - It's a String! */
} else if (isType(v, Number)) {
  /* v isn't generic in this block - It's a Number! */
} else if (isType(v, Array)) {
  /* v isn't generic in this block - it's an Array! */
} else {
  throw new Error('Expected String, Number, or Array');
}

  • වලංගු කිරීම සඳහා සෑම විටම "සුදු ලැයිස්තු" භාවිතා කරන්න. ඔබට වටිනාකමක් අවශ්‍ය නම්, උදා: නූලක්, අංකයක් හෝ අරාවක්, එම “සුදු” හැකියාවන් 3 පරීක්ෂා කර, 3 න් කිසිවක් සෑහීමකට පත් නොවන්නේ නම් දෝෂයක් විසි කරන්න. "කළු" හැකියාවන් පරික්ෂා කිරීම එතරම් ප්‍රයෝජනවත් නොවන බව අපට දැක ගත හැකිය: අප ලියන බව පවසන්න if (v === null) throw new Error('Null value rejected');- nullසාරධර්ම මගින් එය සිදු නොවන බව සහතික කිරීම සඳහා මෙය විශිෂ්ටයි , නමුත් අගයක් නම් එය හරහා ගමන් කරන්නේ නම්, අපි තවමත් දන්නේ නැති තරම්ය ඒ ගැන ඕනෑම දෙයක්. vමෙම ශුන්‍ය චෙක්පත පසු කරන අගයක් තවමත් ඉතා සාමාන්‍යයි - එය අන් කිසිවක් නොවnull ! අසාධු ලේඛකයින් ජනක-නෙස් බැහැර කරන්නේ නැති තරම්ය.
  • වටිනාකමක් නොමැති නම් null , කිසි විටෙකත් "රික්ත අගයක්" ලෙස නොසැලකේ. ඒ වෙනුවට, "රික්තයක් සහිත X" සලකා බලන්න. අත්යවශ්යයෙන්ම, කිසි විටෙකත් එවැනි දෙයක් කිරීම ගැන නොසිතන්න if (isEmpty(val)) { /* ... */ }- එම isEmptyක්රියාකාරිත්වය ක්රියාත්මක වුවද (මට දැන ගැනීමට අවශ්ය නැත ...), එය අර්ථවත් නොවේ! එය සාමාන්‍ය දෙයක්! රික්තය ගණනය කළ යුත්තේ valවර්ගය පිළිබඳ දැනුමෙන් පමණි . රික්තය-චෙක්පත් මේ ආකාරයෙන් විය යුතුය:

    • "අක්ෂර නොමැති නූලක්": if (isType(val, String) && val.length === 0) ...
    • "මුක්කු 0 ක් සහිත වස්තුවක්": if (isType(val, Object) && Object.entries(val).length === 0) ...
    • "සංඛ්‍යාවක්, බිංදුවට සමාන හෝ අඩු": if (isType(val, Number) && val <= 0) ...
    • "අයිතමයක් නොමැති අරාව": if (isType(val, Array) && val.length === 0) ...

    • එකම ව්‍යතිරේකය වන්නේ nullයම් ක්‍රියාකාරීත්වයක් දැක්වීමට භාවිතා කරන විටය . මෙම අවස්ථාවේ දී කීම අර්ථවත් ය: "රික්ත අගයක්":if (val === null) ...


මට පෙනේ ඔබ මේ ගැන යම් අදහසක් තබා ඇති බව:>
රූයි මාර්ක්ස්

3

විවිධ තර්කනයන් සමඟ උත්සාහ කරන්න . වලංගු කිරීම සඳහා ඔබට බෙලෝ කේතය භාවිතා කළ හැකිය (4) වලංගු නොවන, හිස් නොවූ, නිර්වචනය නොකළ සහ ශුන්‍ය නොවීම වැනි ජාවාස්ක්‍රිප්ට් සහ jquery වල මෙම කේතය (! (! (විචල්‍යය)) පමණක් භාවිතා කරන්න.

function myFunction() {
    var data;  //The Values can be like as null, blank, undefined, zero you can test

    if(!(!(data)))
    {
        alert("data "+data);
    } 
    else 
    {
        alert("data is "+data);
    }
}

3

නව ECMAScript Nullish coalescing operator දෙස බලන්න

මෙම අංගය - ??ක්‍රියාකරු - සමඟ ගනුදෙනු කිරීමේදී nullහෝ පෙරනිමි අගයකට “ආපසු වැටීමේ” ක්‍රමයක් ලෙස ඔබට සිතිය හැකිය undefined.

let x = foo ?? bar();

නැවතත්, ඉහත කේතය පහත සඳහන් දේට සමාන වේ.

let x = (foo !== null && foo !== undefined) ? foo : bar();

2
function isEmpty(val){
    return !val;
}

නමුත් මෙම විසඳුම ඕනෑවට වඩා සැලසුම් කර ඇති අතර, පසුව කාර්යබහුල-ආකෘති අවශ්‍යතා සඳහා ශ්‍රිතය වෙනස් කිරීමට ඔබට අවශ්‍ය නැතිනම්, එය කෙලින්ම කේතයෙන් භාවිතා කිරීම වඩා පිරිසිදු ය:

if(!val)...

2
var myNewValue = myObject && myObject.child && myObject.child.myValue;

මෙය කිසි විටෙකත් දෝෂයක් ඇති නොකරනු ඇත. නම් myObject , ළමා , හෝ myValue NULL වේ නම් myNewValue ශූන්ය වනු ඇත. කිසිදු දෝෂයක් විසි නොකරනු ඇත


2

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

(function(g3, $, window, document, undefined){
   g3.utils = g3.utils || {};
/********************************Function type()********************************
* Returns a lowercase string representation of an object's constructor.
* @module {g3.utils}
* @function {g3.utils.type}
* @public
* @param {Type} 'obj' is any type native, host or custom.
* @return {String} Returns a lowercase string representing the object's 
* constructor which is different from word 'object' if they are not custom.
* @reference http://perfectionkills.com/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/
* http://stackoverflow.com/questions/3215046/differentiating-between-arrays-and-hashes-in-javascript
* http://javascript.info/tutorial/type-detection
*******************************************************************************/
g3.utils.type = function (obj){
   if(obj === null)
      return 'null';
   else if(typeof obj === 'undefined')
      return 'undefined';
   return Object.prototype.toString.call(obj).match(/^\[object\s(.*)\]$/)[1].toLowerCase();
};
}(window.g3 = window.g3 || {}, jQuery, window, document));

2

JAndy ගේ පිළිතුරට අනුව, අගය පහත සඳහන් ඒවායින් එකක් නම් සත්‍ය වීම වළක්වා ගැනීමට ඔබට අවශ්‍ය නම් :

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

සත්‍යවාදී සාරධර්ම ලබා ගැනීමෙන් වළක්වා ගත හැකි එක් විසඳුමක් නම්:

function isUsable(valueToCheck) {
    if (valueToCheck === 0     || // Avoid returning false if the value is 0.
        valueToCheck === ''    || // Avoid returning false if the value is an empty string.
        valueToCheck === false || // Avoid returning false if the value is false.
        valueToCheck)             // Returns true if it isn't null, undefined, or NaN.
    {
        return true;
    } else {
        return false;
    }
}

එය පහත පරිදි භාවිතා වේ:

if (isUsable(x)) {
    // It is usable!
}
// Make sure to avoid placing the logical NOT operator before the parameter (isUsable(!x)) and instead, use it before the function, to check the returned value.
if (!isUsable(x)) {
    // It is NOT usable!
}

එම අවස්ථාවන්ට අමතරව, වස්තුව හෝ අරාව හිස් නම් ඔබට සාවද්‍ය තොරතුරු ලබා දීමට අවශ්‍ය විය හැකිය :

  • වස්තුව: {} ( ECMA 7+ භාවිතා කිරීම )
  • අරාව: [] ( ECMA 5+ භාවිතා කිරීම )

ඔබ මේ ආකාරයෙන් ඉදිරියට යනු ඇත:

function isEmptyObject(valueToCheck) {
    if(typeof valueToCheck === 'object' && !Object.keys(valueToCheck).length){
        // Object is empty!
        return true;
    } else {
        // Object is not empty!
        return false;
    }
}

function isEmptyArray(valueToCheck) {
    if(Array.isArray(valueToCheck) && !valueToCheck.length) {
        // Array is empty!
        return true;
    } else {
        // Array is not empty!
        return false;
    }
}

ඔබ සියලු සුදු අවකාශයේ නූල් ("") පරීක්ෂා කිරීමට කැමති නම්, ඔබට පහත සඳහන් දෑ කළ හැකිය:

function isAllWhitespace(){
    if (valueToCheck.match(/^ *$/) !== null) {
        // Is all whitespaces!
        return true;
    } else {
        // Is not all whitespaces!
        return false;
    }
}

සටහන: hasOwnPropertyවිචල්‍යය ඒවායින් එකක් ලෙස ප්‍රකාශයට පත් කර ඇත්නම්, හිස් නූල්, 0, අසත්‍ය, NaN, ශුන්‍ය සහ නිර්වචනය නොකළ සත්‍ය සඳහා ප්‍රතිලාභ ලබා දෙයි, එබැවින් එය භාවිතා කිරීමට හොඳම නොවේ. එය ප්‍රකාශයට පත් කළ බව පෙන්වීමට එය භාවිතා කිරීම සඳහා ශ්‍රිතය වෙනස් කළ හැකි නමුත් එය භාවිතා කළ නොහැක.


2

GitHub හි කේතය

const isEmpty = value => (
  (!value && value !== 0 && value !== false)
  || (Array.isArray(value) && value.length === 0)
  || (isObject(value) && Object.keys(value).length === 0)
  || (typeof value.size === 'number' && value.size === 0)

  // `WeekMap.length` is supposed to exist!?
  || (typeof value.length === 'number'
      && typeof value !== 'function' && value.length === 0)
);

// Source: https://levelup.gitconnected.com/javascript-check-if-a-variable-is-an-object-and-nothing-else-not-an-array-a-set-etc-a3987ea08fd7
const isObject = value =>
  Object.prototype.toString.call(value) === '[object Object]';

දුප්පත් මිනිසාගේ පරීක්ෂණ

const test = () => {
  const run = (label, values, expected) => {
    const length = values.length;
    console.group(`${label} (${length} tests)`);
    values.map((v, i) => {
      console.assert(isEmpty(v) === expected, `${i}: ${v}`);
    });
    console.groupEnd();
  };

  const empty = [
    null, undefined, NaN, '', {}, [],
    new Set(), new Set([]), new Map(), new Map([]),
  ];
  const notEmpty = [
    ' ', 'a', 0, 1, -1, false, true, {a: 1}, [0],
    new Set([0]), new Map([['a', 1]]),
    new WeakMap().set({}, 1),
    new Date(), /a/, new RegExp(), () => {},
  ];
  const shouldBeEmpty = [
    {undefined: undefined}, new Map([[]]),
  ];

  run('EMPTY', empty, true);
  run('NOT EMPTY', notEmpty, false);
  run('SHOULD BE EMPTY', shouldBeEmpty, true);
};

පරීක්ෂණ ප්‍රති results ල:

EMPTY (10 tests)
NOT EMPTY (16 tests)
SHOULD BE EMPTY (2 tests)
  Assertion failed: 0: [object Object]
  Assertion failed: 1: [object Map]

විශිෂ් function ශ්‍රිතය, මෙහි ඇති අනෙක් සියලුම පිළිතුරු වලට ඔබ සතුව ඇති ගැටළු කිහිපයක් තිබේ, මම මගේම ලිවීමට පෙර එය සොයාගනු ඇතැයි සිතමි: p මගේ වැඩ කටයුතු දෙස බැලීමට ඔබ කැමති යැයි සිතුවෙමි stackoverflow.com/ ප්‍රශ්න / 5515310 /… අපගේ කාර්යයන් දෙකම එකම ප්‍රතිදානයක් ඇති බව පෙනේ, නමුත් මම කේතය ටිකක් අඩු කර ඇත්තෙමි. මට කිසිවක් මග හැරී ඇත්දැයි කරුණාකර මට දන්වන්න.
ෂෝන් බැනිස්ටර්

"ඔබ මගේ" දුප්පත් මිනිසාගේ පරීක්ෂණ "උත්සාහ කළාද? සිතියම, දුර්වල සිතියම, සහ සමහර විට දිනය, රෙජීඑක්ස් වැනි විශේෂ අවස්ථා සඳහා මම තවත් පරීක්ෂණ එකතු කර අවසන් යැයි සිතමි. ඔබේ ගැන ඔබට විශ්වාසද value.constructor === Object? මෙය පරීක්ෂා කරන්න .
පැස්කල් පොලියුනස්

ඔව්, මම ඔබේ පරීක්ෂණ ක්‍රියාත්මක කළෙමි, ඒවාට ස්තූතියි, අපගේ කාර්යයන් දෙකම අපගේ පරීක්ෂණ දෙකම සමඟ එකම ප්‍රති results ල ලබා දෙයි. මෙම පරීක්ෂණ අවස්ථා වලින් පිටත මට යමක් මග හැරී ඇත්දැයි මම කල්පනා කරමි. value.constructor === Objectජාවාස්ක්‍රිප්ට් හි හෝ ප්‍රකාශ වල ක්‍රියාත්මක කිරීමේ අනුපිළිවෙලක් තිබේ නම් මම විශ්වාස කරමි , එසේ නැතහොත් OR ප්‍රකාශය ක්‍රියාත්මක වන්නේ පෙර සත්‍යය නොපැමිණියේ නම් සහ අප දැනටමත් පරීක්ෂා කර Nullතිබේ නම් පමණි. ඇත්ත වශයෙන්ම එම අන්තිම OR ප්‍රකාශයේ එකම අරමුණ වන්නේ {}එය නොකළ යුතු දේ සඳහා එය සත්‍ය නොවන බව හඳුනාගෙන සහතික කිරීමයි.
ෂෝන් බැනිස්ටර්

1

අවිනිශ්චිත කැදැල්ලේ විචල්‍යය නිර්වචනය කර නොමැතිදැයි මෙය පරීක්ෂා කරයි

function Undef(str) 
{
  var ary = str.split('.');
  var w = window;
  for (i in ary) {
    try      { if (typeof(w = w[ary[i]]) === "undefined") return true; }
    catch(e) { return true; }
  }
  return false;
}

if (!Undef("google.translate.TranslateElement")) {

ගූගල් පරිවර්තන ශ්‍රිතය TranslateElement තිබේද යන්න ඉහත පරීක්ෂා කරයි. මෙය සමාන වේ:

if (!(typeof google === "undefined" 
 || typeof google.translate === "undefined" 
 || typeof google.translate.TranslateElement === "undefined")) {

1

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

let customer = {
  name: "Carl",
  details: {
    age: 82,
    location: "Paradise Falls" // detailed address is unknown
  }
};
let customerCity = customer.details?.address?.city;

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

let customer = {
  name: "Carl",
  details: { age: 82 }
};
const customerCity = customer?.city ?? "Unknown city";
console.log(customerCity); // Unknown city

1

බොහෝ විට කෙටිම පිළිතුර නම්

val==null || val==''

ඔබ දෘඩ පැත්ත වෙනස් කළහොත් val===''හිස් අරාව අසත්‍ය වේ. සාක්ෂි

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

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

බෝනස් : හේතුව ===වඩා පැහැදිලි වන්නේ ඇයි==

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

පැහැදිලි සහ පහසුවෙන් තේරුම්ගත හැකි කේතයක් ලිවීමට, පිළිගත් අගයන් පිළිබඳ පැහැදිලි ලැයිස්තුවක් භාවිතා කරන්න

val===undefined || val===null || val===''|| (Array.isArray(val) && val.length===0)


ප්‍රයෝජනවත් දෘශ්‍යකරණය! ඒවායේ ප්‍රභවය කුමක්ද?
viam0Zah

1
source viam0Zah ප්‍රභවයට සබැඳිය ස්නිපටයට පහළින් ->(source here)
Kamil Kiełczewski

1
function notEmpty(value){
  return (typeof value !== 'undefined' && value.trim().length);
}

එය පහත සඳහන් දෑ සමඟ සුදු අවකාශයන් ('') ද පරීක්ෂා කරනු ඇත:

  • null, undefined, NaN, හිස්, නූල් (""), 0, අසත්ය
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.