වැඩ වලින් අඩක් කරන බොහෝ පිළිතුරු. ඔව්, !!X
"X හි සත්යතාවය [බූලියන් ලෙස නිරූපණය කෙරේ]" ලෙස කියවිය හැකිය. එහෙත් !!
, ප්රායෝගිකව කිවහොත්, එක් විචල්යයක් සත්ය හෝ ව්යාජද යන්න සොයා ගැනීම සඳහා එතරම් වැදගත් නොවේ. !!myVar === true
සාධාරණයි myVar
. !!X
“සැබෑ” බූලියන් සමඟ සංසන්දනය කිරීම ඇත්තෙන්ම ප්රයෝජනවත් නොවේ.
ඔබ ලබා ගන්නා !!
දෙය නම් එකිනෙකට එරෙහිව විවිධ විචල්යයන්ගේ සත්යතාව පරීක්ෂා කිරීමේ හැකියාවයි ගන්නේ පුනරාවර්තන, ප්රමිතිගත (සහ ජේඑස්ලින්ට් හිතකාමී) ආකාරයකින් .
සරලව වාත්තු කිරීම :(
එනම් ...
0 === false
වේ false
.
!!0 === false
වේ true
.
ඉහත කරුණු එතරම් ප්රයෝජනවත් නොවේ. if (!0)
ඔබට සමාන ප්රති results ල ලබා දෙයි if (!!0 === false)
. විචල්යයක් බූලියන් වාත්තු කර "සැබෑ" බූලියන් සමඟ සංසන්දනය කිරීම සඳහා හොඳ අවස්ථාවක් ගැන මට සිතිය නොහැකිය.
ජේඑස්ලින්ට්ගේ උපදෙස් වලින් "== සහ! =" බලන්න (සටහන: ක්රොක්ෆර්ඩ් ඔහුගේ වෙබ් අඩවිය ටිකක් එහා මෙහා ගෙන යමින් සිටී; එම සබැඳිය යම් අවස්ථාවක දී මියයෑමට බැඳී සිටී) ඇයිද යන්න ගැන ටිකක් දැනගන්න:
== සහ! = ක්රියාකරුවන් සංසන්දනය කිරීමට පෙර බලහත්කාරය ටයිප් කරයි. මෙය නරක ය, මන්ද එය '\ t \ r \ n' == 0 සත්ය වීමට හේතු වේ. මෙය ආකාරයේ දෝෂ වසං කළ හැකිය. == නිවැරදිව භාවිතා කරන්නේ දැයි JSLint හට විශ්වාසදායක ලෙස නිශ්චය කළ නොහැක, එබැවින් == සහ! = කිසිසේත් භාවිතා නොකිරීම වඩාත් සුදුසුය. ඒ වෙනුවට සෑම විටම වඩා විශ්වාසදායක === සහ! == ක්රියාකරුවන් භාවිතා කිරීම වඩාත් සුදුසුය.
වටිනාකමක් සත්ය හෝ ව්යාජ එකක් යැයි ඔබ සිතන්නේ නම්, කෙටි ආකෘතිය භාවිතා කරන්න. වෙනුවට
(foo != 0)
කියන්න
(foo)
ඒ වෙනුවට
(foo == 0)
කියන්න
(!foo)
සමහර පවතින බව සටහන unintuitive නඩු සඳහා වීජ ගණනාවක් ප්රකාශ නියමිතය ( true
කිරීමට හෙළීමයි 1
හා false
කිරීමට 0
එය වීජ ගණනාවක් වසරට සාපේක්ෂව). මෙම අවස්ථාවේදී, !!
මානසිකව ප්රයෝජනවත් විය හැකිය. නැවතත්, මේවා ඔබ බූලියන් නොවන දෘඩ ටයිප් කළ බූලියන් සමඟ සංසන්දනය කරන අවස්ථා වන අතර එය බරපතල වැරැද්දකි. if (-1)
තවමත් මෙහි යා යුතු මාර්ගයයි.
╔═══════════════════════════════════════╦═══════════════════╦═══════════╗
║ Original ║ Equivalent ║ Result ║
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (-1 == true) console.log("spam") ║ if (-1 == 1) ║ undefined ║
║ if (-1 == false) console.log("spam") ║ if (-1 == 0) ║ undefined ║
║ Order doesn't matter... ║ ║ ║
║ if (true == -1) console.log("spam") ║ if (1 == -1) ║ undefined ║
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (!!-1 == true) console.log("spam") ║ if (true == true) ║ spam ║ better
╠═══════════════════════════════════════╬═══════════════════╬═══════════╣
║ if (-1) console.log("spam") ║ if (truthy) ║ spam ║ still best
╚═══════════════════════════════════════╩═══════════════════╩═══════════╝
ඔබේ එන්ජිම මත පදනම්ව දේවල් පවා පිස්සු වැටේ. උදාහරණයක් ලෙස WScript ත්යාගය දිනා ගනී.
function test()
{
return (1 === 1);
}
WScript.echo(test());
නිසා ඇතැම් ඓතිහාසික වින්ඩෝස් jive බව කරන්නම් ප්රතිදානය -1 පණිවිඩයක් කොටුව තුළ! Cmd.exe විමසුමේදී එය උත්සාහ කර බලන්න! නමුත් WScript.echo(-1 == test())
තවමත් ඔබට 0, හෝ WScript ලබා දෙයි false
. අහක බලන්න. එය පිළිකුල් සහගත ය.
සත්යතාව සංසන්දනය කිරීම :)
නමුත් මට සමාන සත්යයන් / ව්යාජ-නෙස් සඳහා පරීක්ෂා කිරීමට අවශ්ය අගයන් දෙකක් තිබේ නම් කුමක් කළ යුතුද?
අපට මවා පාන myVar1 = 0;
හා myVar2 = undefined;
.
myVar1 === myVar2
ය 0 === undefined
හා පැහැදිලිවම බොරු ය.
!!myVar1 === !!myVar2
ඇත්ත !!0 === !!undefined
සහ ඇත්ත! එකම සත්යතාව! (මේ අවස්ථාවේ දී, දෙදෙනාම "ව්යාජ සත්යතාවයක් ඇත".)
එබැවින් ඔබට "බූලියන්-වාත්තු විචල්යයන්" භාවිතා කිරීමට අවශ්ය එකම ස්ථානය වනුයේ ඔබ විචල්යයන් දෙකම එකම සත්යතාවයක් තිබේදැයි පරීක්ෂා කරන තත්වයක් තිබේ නම් නේද? එනම්, භාවිතය !!
ඔබ vars දෙකක් නම්, දකින්න අවශ්ය නම් දෙකම truthy හෝ දෙකම falsy (හෝ නැති), එනම් ඊට සමාන (හෝ නැති) truthiness .
මට ඒ සඳහා විශාල, උපක්රමශීලී නොවන භාවිත නඩුවක් ගැන සිතිය නොහැකිය. සමහර විට ඔබ පෝරමයක "සම්බන්ධිත" ක්ෂේත්ර තිබේද?
if (!!customerInput.spouseName !== !!customerInput.spouseAge ) {
errorObjects.spouse = "Please either enter a valid name AND age "
+ "for your spouse or leave all spouse fields blank.";
}
ඒ නිසා දැන් ඔබ යන දෙකම සඳහා truthy තිබේ නම් හෝ සහකරු හෝ සහකාරිය නම හා වයස අවුරුදු දෙකම සඳහා falsy, ඔබ දිගටම කරගෙන යා හැක. එසේ නොමැතිනම් ඔබට ලැබී ඇත්තේ එක් ක්ෂේත්රයක් පමණක් වටිනාකමක් ඇති (හෝ ඉතා ඉක්මණින් විවාහ කර ගත් විවාහයක්) වන අතර ඔබේ errorObjects
එකතුවෙහි අමතර දෝෂයක් ඇති කළ යුතුය .
සංස්කරණය 24 ඔක්තෝබර් 2017, 6 පෙබරවාරි 19:
පැහැදිලි බූලියන් අගයන් අපේක්ෂා කරන තෙවන පාර්ශවීය පුස්තකාල
මෙන්න සිත්ගන්නා කරුණක් ... !!
තෙවන පාර්ශවීය ලිබ්ස් පැහැදිලි බූලියන් අගයන් අපේක්ෂා කරන විට ප්රයෝජනවත් විය හැකිය.
නිදසුනක් ලෙස, ජේඑස්එක්ස් හි අසත්යය (ප්රතික්රියා කරන්න) විශේෂ අරුතක් ඇති අතර එය සරල ව්යාජයන් මත අවුලුවනු නොලැබේ. ඔබේ ජේඑස්එක්ස් හි පහත සඳහන් දේ වැනි දෙයක් ආපසු ලබා දීමට ඔබ උත්සාහ කළේ නම්, ඉන්ට් එකක් බලාපොරොත්තු වේ messageCount
...
{messageCount && <div>You have messages!</div>}
... ඔබට 0
ශුන්ය පණිවිඩ ඇති විට ප්රතික්රියා විදැහුම්කරණය දැක ඔබ පුදුමයට පත් විය හැකිය . JSX ඉදිරිපත් නොකිරීමට ඔබ පැහැදිලිවම අසත්යය ආපසු එවිය යුතුය. 0
ජේඑස්එක්ස් සතුටින් ඉදිරිපත් කරන ඉහත ප්රකාශය නැවත පැමිණේ . එය ඔබට නොමැති බව පැවසිය නොහැක Count: {messageCount && <div>Get your count to zero!</div>}
(හෝ අඩු උපක්රමයක්).
එක් විසඳුමක් වන coerces මෙම bangbang, ඇතුළත් 0
බවට !!0
වන, false
:
{!!messageCount && <div>You have messages!</div>}
JSX හි ලියකියවිලි ඔබට වඩාත් පැහැදිලිව, ස්වයං-අදහස් දැක්වීමේ කේතයක් ලිවීමට සහ බූලියන් වෙත බල කිරීම සඳහා සංසන්දනයක් භාවිතා කිරීමට යෝජනා කරයි.
{messageCount > 0 && <div>You have messages!</div>}
තෘතීයයක් සමඟ ව්යාජ ලෙස හැසිරවීමට මට වඩාත් පහසුය -
{messageCount ? <div>You have messages!</div> : false}
යතුරු ලියනයෙහි එකම ගනුදෙනුව: ඔබට බූලියන් ආපසු ලබා දෙන ශ්රිතයක් තිබේ නම් (හෝ ඔබ බූලියන් විචල්යයකට අගයක් පවරයි), ඔබට [සාමාන්යයෙන්] බූලියන්-වයි අගයක් ආපසු ලබා දීමට / පැවරීමට නොහැකිය; එය තදින් ටයිප් කළ බූලියන් විය යුතුය. මෙම මාර්ගයෙන්, යන සැකය myObject
මුලදීම ඇත , return !myObject;
එය වීජ නැවත උත්සවයකට සඳහා ක්රියාත්මක වන නමුත් return myObject;
එහෙම කරන්නේ නැහැ. ඔබ return !!myObject
ටයිප්ස්ක්රිප්ට් හි අපේක්ෂාවන්ට ගැලපේ.
යතුරු ලියනය සඳහා ව්යතිරේකය? නම් myObject
වූයේ any
JavaScript ගේ කතිකාවතක් දී, ඔයා තමයි ආපසු තොරව එය නැවත පැමිණීමට !!
ඔබේ නැවත ටයිප් වීජ පවා,.
මේවා JSX සහ යතුරු ලියන සම්මුතීන් මිස ජාවාස්ක්රිප්ට් වලට ආවේණික නොවන බව මතක තබා ගන්න .
0
ඔබේ විදැහුම්කරණය කරන ලද ජේඑස්එක්ස් හි ඔබ අමුතු දේවල් දුටුවහොත් , ලිහිල් ව්යාජ කළමනාකරණය ගැන සිතන්න.