විචල්යය නිර්වචනය කර තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට මට අවශ්ය විය. උදාහරණයක් ලෙස, පහත දැක්වෙන්නේ නිර්වචනය නොකළ දෝෂයකි
alert( x );
මෙම දෝෂය මා හඳුනා ගන්නේ කෙසේද?
විචල්යය නිර්වචනය කර තිබේද නැද්ද යන්න පරීක්ෂා කිරීමට මට අවශ්ය විය. උදාහරණයක් ලෙස, පහත දැක්වෙන්නේ නිර්වචනය නොකළ දෝෂයකි
alert( x );
මෙම දෝෂය මා හඳුනා ගන්නේ කෙසේද?
Answers:
JavaScript හි, null
වස්තුවකි. නොපවතින දේවල් සඳහා තවත් වටිනාකමක් තිබේ , undefined
. null
ලේඛනයේ යම් ව්යුහයක් සොයා ගැනීමට අපොහොසත් වූ සෑම අවස්ථාවකම පාහේ DOM නැවත පැමිණේ , නමුත් ජාවාස්ක්රිප්ට් තුළම undefined
භාවිතා වන අගය වේ.
දෙවනුව, නැත, සෘජු සමානකමක් නොමැත. ඔබට නිශ්චිතවම පරීක්ෂා කිරීමට අවශ්ය නම් null
, කරන්න:
if (yourvar === null) // Does not execute if yourvar is `undefined`
ඔබට විචල්යයක් තිබේදැයි පරීක්ෂා කිරීමට අවශ්ය නම්, එය කළ හැක්කේ try
/ සමඟ පමණි catch
, මන්ද typeof
එය ප්රකාශයට පත් නොකළ විචල්යයකට සහ undefined
සමාන අගයකින් ප්රකාශිත විචල්යයකට සලකනු ඇත.
එහෙත්, Variable එකක් නම්, පරීක්ෂා කිරීමට හා නොවේ undefined
:
if (yourvar !== undefined) // Any scope
මීට පෙර, typeof
නිර්වචනය නොකළ ආරක්ෂිතව පරීක්ෂා කිරීම සඳහා ක්රියාකරු භාවිතා කිරීම අවශ්ය විය , මන්ද එය undefined
විචල්යයක් මෙන් නැවත පැවරිය හැකි බැවිනි . පැරණි ක්රමය මේ ආකාරයට විය:
if (typeof yourvar !== 'undefined') // Any scope
යන ප්රශ්නය undefined
නැවත assignable වීම සම්මතයන් 5, 2009 දැන් ඔබට ආරක්ෂිතව භාවිතා කළ හැක නිකුත් කරන ලද ස්ථාවර විය ===
හා !==
පරීක්ෂණ සඳහා undefined
භාවිතා නොකර typeof
ලෙස undefined
කියවීමට පමණක් ඇති යම් කාලයක් සඳහා.
සාමාජිකයෙකු ස්වාධීනව සිටීදැයි දැන ගැනීමට ඔබට අවශ්ය නම් එහි වටිනාකම කුමක් දැයි සැලකිලිමත් නොවන්න:
if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance
විචල්යයක් සත්යයක් දැයි දැන ගැනීමට ඔබට අවශ්ය නම් :
if (yourvar)
typeof
ක්රියාකරු ( typeof null == 'object'
) ය. මෙම null
අගය යනු ප්රාථමික අගය වන එකම අගය වන, NULL වර්ගය .
විචල්යයක් නම් සත්ය වශයෙන්ම පරීක්ෂා කිරීමට ඇති එකම ක්රමය undefined
පහත සඳහන් දේ කිරීමයි. මතක තබා ගන්න, නිර්වචනය කිරීම ජාවාස්ක්රිප්ට් හි වස්තුවකි.
if (typeof someVar === 'undefined') {
// Your variable is undefined
}
මෙම ත්රෙඩ් එකේ ඇති වෙනත් විසඳුම් සමහරක් විචල්යයක් නිර්වචනය කර ඇතත් එය නිර්වචනය කර නොමැති බව විශ්වාස කිරීමට ඔබව පොළඹවනු ඇත (උදාහරණයක් ලෙස NULL හෝ 0 අගය සමඟ).
ReferenceError
.
undefined
ජාවාස්ක්රිප්ට් හි වස්තුවක් යැයි පැවසීම වැරදි තොරතුරු ය. මෙම ප්රකාශය කෙසේ හෝ ඔබගේ පිළිතුරට සම්බන්ධද? එය undefined
වර්ගයේ අගයක් වන අතර එය නම් undefined
කර ඇති ගෝලීය අනන්යතාවයට පවරා ඇත undefined
.
undefined
ES5 සිට කියවීමට පමණි. මේ ආකාරයට කෙටිකාලීන භාවිතා කිරීම if (x === undefined) {...}
හෝ භාවිතා කිරීම සඳහා ඔබට ආරක්ෂිතව පරීක්ෂා කළ හැකිය : if (x === void 0)
.
තාක්ෂණික වශයෙන්, නිසි විසඳුම වන්නේ (මම විශ්වාස කරමි):
typeof x === "undefined"
ඔබට සමහර විට කම්මැලි වී භාවිතා කළ හැකිය
x == null
නමුත් එමඟින් නිර්වචනය නොකළ විචල්ය x සහ ශුන්ය අඩංගු විචල්ය x යන දෙකටම සත්යය නැවත ලබා ගත හැක.
var x;
පසුව typeof x;
ඔබට ලැබෙනු ඇත "undefined"
ඔබ කළාක් නම් වගේtypeof lakjdflkdsjflsj;
ඊටත් වඩා පහසු හා කෙටිමං අනුවාදයක් වනුයේ:
if (!x) {
//Undefined
}
හෝ
if (typeof x !== "undefined") {
//Do something since x is defined.
}
මම බොහෝ විට කර ඇත:
function doSomething(variable)
{
var undef;
if(variable === undef)
{
alert('Hey moron, define this bad boy.');
}
}
ඔබට ත්රිමාණ කොන්දේසි සහිත ක්රියාකරු භාවිතා කළ හැකිය:
var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
//var a = "hallo world";
var a = !a ? document.write("i dont know 'a'") : document.write("a = " + a);
var a = false;
යුතුද? ඒ a===undefined
වෙනුවට ඔබ එය පරීක්ෂා කර බැලිය යුතුය
var x;
ඉහත කිරීමෙන් දෝෂයක් ඇති වේ
!a
සැබෑ පරීක්ෂා undefined
, එය ද සැබෑ පරීක්ෂා 0
හා null
හා false
. මෙය ඉතා වැරදි වන අතර එය ඉවත් කළ යුතුය.
දෝෂය ඔබට x
නොපවතින බව ඔබට කියයි ! එය ප්රකාශයට පත් කර නැත , එය වටිනාකමක් පැවරීමට වඩා වෙනස් ය .
var x; // declaration
x = 2; // assignment
ඔබ ප්රකාශ නම් x
, ඔබ දෝෂයක් ලබා ගැනීමට නොහැකි වනු ඇත. ඔබ පවසන අනතුරු ඇඟවීමේ ලබා ගත හැකි බව undefined
නිසාx
පවතින / ප්රකාශ කර ඇති නමුත් වටිනාකමක් ඇත.
විචල්යය ප්රකාශයට පත් කර ඇත්දැයි පරීක්ෂා කිරීම සඳහා, ඔබට භාවිතා කළ හැකිය, විචල්යයක් තිබේදැයි පරීක්ෂා typeof
කිරීමේ වෙනත් ක්රමයක් ඔබට මුලින් ඇති වූ දෝෂය මතු කරයි.
if(typeof x !== "undefined") {
alert(x);
}
මෙය ගබඩා කර ඇති අගය වර්ගය පරීක්ෂා කරයි x
. එය පමණක් ආපසු undefined
විට x
ප්රකාශ කර නැත කර හෝ එය නම් කර ඇත ප්රකාශයට පත් කර තවමත් යොදවා නොමැති.
typeof
ක්රියාකරු අවශ්ය නොවේ .
මම බොහෝ විට සරලම ක්රමය භාවිතා කරමි:
var variable;
if (variable === undefined){
console.log('Variable is undefined');
} else {
console.log('Variable is defined');
}
සංස්කරණය කරන්න:
විචල්යය ආරම්භ නොකර, ව්යතිරේකය විසි කරනු ලැබේ "නොකැඩූ යොමු දෝෂය: විචල්යය අර්ථ දක්වා නැත ..."
Uncaught ReferenceError: variable is not defined
variable
මගින් අර්ථ දක්වා ඇත var variable;
. මෙම ස්නිපටය variable
දේශීය විෂය පථය අභිබවා යනු ඇත. එය වසා දැමීමකට හෝ ගෝලීය විචල්යයකට ප්රවේශ වීමට අපේක්ෂා කරන තර්කනය බිඳ දැමිය හැකිය. එනම්:var variable = 1; function test() { var variable; if (variable === undefined){ console.log('Variable is undefined'); } else { console.log('Variable is defined: ' + variable); } } test(); // Variable is undefined
තවත් විභව “විසඳුමක්” භාවිතා කිරීම window
වස්තුව . එය බ්රව්සරයක සිටින විට යොමු දෝෂ ගැටළුව මඟහරවා ගනී.
if (window.x) {
alert('x exists and is truthy');
} else {
alert('x does not exist, or exists and is falsy');
}
undefined
. මෙය එසේ නොකරනු ඇත.
මෙම void
ක්රියාකරු ප්රතිලාභ undefined
එය සම්මත කිසිදු තර්කයක් / ප්රකාශනය සඳහා. එවිට ඔබට ප්රති result ලයට එරෙහිව පරීක්ෂා කළ හැකිය (ඇත්ත වශයෙන්ම සමහර මිනිෆයර් ඔබේ කේතය සිට වෙනස් undefined
කරයිvoid 0
චරිත කිහිපයක් බේරා ගැනීමට)
උදාහරණයක් වශයෙන්:
void 0
// undefined
if (variable === void 0) {
// variable is undefined
}
typeof
අතර සිතීම undefined
නැවත පැවරිය හැකිය, එය දශකයක් පමණ ගත වී නැත.
undefined
පත් කර තිබුණද , දෙවියන් වහන්සේ දන්නේ කුමන හේතුවක් නිසාද යන්න භාවිතා කිරීම void 0
සැමවිටම undefined
නොසලකා හරිනු ඇත.
අපට undefined
පහත පරිදි පරීක්ෂා කළ හැකිය
var x;
if (x === undefined) {
alert("x is undefined");
} else {
alert("x is defined");
}
පිළිගත් පිළිතුර නිවැරදි ය. තවත් එක් විකල්පයක් එක් කිරීමට අවශ්ය විය. try ... catch
මෙම තත්වය පාලනය කිරීම සඳහා ඔබට බ්ලොක් භාවිතා කළ හැකිය. විකාර උදාහරණයක්:
var a;
try {
a = b + 1; // throws ReferenceError if b is not defined
}
catch (e) {
a = 1; // apply some default behavior in case of error
}
finally {
a = a || 0; // normalize the result in any case
}
catch
බ්ලොක් මට්ටමේ විෂය පථයක් නිර්මාණය කරන බැවින් එය තරමක් අවුල් සහගත වන බ්ලොක් ගැන සැලකිලිමත් වන්න . ඇත්ත වශයෙන්ම, අසන ලද ප්රශ්නයට පිළිතුරු සැපයීම සඳහා උදාහරණය අතිශයින්ම සරල කර ඇත, එය දෝෂ හැසිරවීමේ හොඳම භාවිතයන් ආවරණය නොකරයි;).
විචල්යයක් ප්රකාශයට පත් කර ඇති බව තහවුරු කර ගැනීම සඳහා මම කුඩා ශ්රිතයක් භාවිතා කරමි, එය ඇත්ත වශයෙන්ම මගේ ජාවාස්ක්රිප්ට් ලිපිගොනු වල ඇති කැළඹිලි ප්රමාණය අඩු කරයි. විචල්යය පවතිනවා පමණක් නොව, වටිනාකමක් ද ලබා දී ඇති බව තහවුරු කර ගැනීම සඳහා මම අගය සඳහා චෙක්පතක් එක් කරමි. දෙවන කොන්දේසිය මඟින් විචල්යය ද ක්ෂණිකව ක්රියාත්මක කර ඇත්දැයි පරීක්ෂා කරයි, මන්ද විචල්යය නිර්වචනය කර ඇති නමුත් ක්ෂණිකව ක්රියාත්මක නොවන්නේ නම් (පහත උදාහරණය බලන්න), ඔබ ඔබේ කේතයේ වටිනාකම සඳහන් කිරීමට උත්සාහ කළහොත් එය තවමත් දෝෂයක් ඇති කරයි.
var my_variable;
ක්ෂණිකව නොවේ - ක්ෂණික -var my_variable = "";
function varExists(el) {
if ( typeof el !== "undefined" && typeof el.val() !== "undefined" ) {
return true;
} else {
return false;
}
}
එවිට ඔබට විචල්යය නිර්වචනය කර ඇති බවත්, ක්ෂණිකව මේ ආකාරයෙන් ක්ෂණික කර ඇති බවත් පරීක්ෂා කිරීමට ඔබට කොන්දේසි සහිත ප්රකාශයක් භාවිතා කළ හැකිය ...
if ( varExists(variable_name) ) { // checks that it DOES exist }
හෝ එය නිර්වචනය කර නොමැති බවත්, ක්ෂණිකව භාවිතා කර ඇති බවත් පරීක්ෂා කිරීමට ...
if( !varExists(variable_name) ) { // checks that it DOESN'T exist }
return typeof el !== "undefined" && typeof el.val() !== "undefined"