জাভাস্ক্রিপ্টে একটি সংজ্ঞায়িত পরিবর্তনশীল কীভাবে চেক করবেন


911

আমি ভেরিয়েবলটি সংজ্ঞায়িত হয়েছে কিনা তা যাচাই করতে চেয়েছিলাম। উদাহরণস্বরূপ, নিম্নলিখিতটি একটি সংজ্ঞায়িত ত্রুটি নিক্ষেপ করে

alert( x );

আমি কীভাবে এই ত্রুটিটি ধরতে পারি?



5
ভালো দেখায় একটি granddaddy হল: stackoverflow.com/questions/1485840/... stackoverflow.com/questions/2647867/... - মহান gramps হয়তো এই: stackoverflow.com/questions/27509/...
র্যান্ডম

1
এটি চিহ্নিত নকলের সদৃশ নয়। পরিবর্তনীয় রেজোলিউশন এবং অবজেক্ট প্রোপার্টি রেজোলিউশন খুব আলাদা জিনিস। আরও ভাল সদৃশ হচ্ছে জাভাস্ক্রিপ্টে কোনও ভেরিয়েবলের উপস্থিতি আছে কিনা তা পরীক্ষা করে দেখুন?
রবজি

আপনার ত্রুটি ভেরিয়েবল ঘোষিত না হওয়ার কারণে। বেশিরভাগ উত্তর অ্যাসাইনমেন্টের দিকে নিবদ্ধ থাকে। আরও উত্তর জন্য আমার উত্তর দেখুন। অতিরিক্তভাবে তাদের মধ্যে অনেকগুলি ভুলভাবে জানায় যে নাল এবং অপরিজ্ঞাতটি জাভাস্ক্রিপ্টে থাকা বস্তু। তারা আদিম , বস্তু নয় ...
জাল্লিন

উত্তর:


1689

জাভাস্ক্রিপ্টে, nullএকটি অবজেক্ট। অস্তিত্ব নেই এমন জিনিসগুলির জন্য আরও একটি মান রয়েছে undefined,। DOM nullপ্রায় সব ক্ষেত্রেই ফিরে আসে যেখানে ডকুমেন্টে কিছু কাঠামো খুঁজে পেতে ব্যর্থ হয় তবে জাভাস্ক্রিপ্টে নিজেই undefinedব্যবহৃত মূল্য।

দ্বিতীয়ত, না, সরাসরি সমতুল্য নেই। আপনি যদি সত্যিই বিশেষভাবে জন্য অনুসন্ধান nullকরতে চান তবে করুন:

if (yourvar === null) // Does not execute if yourvar is `undefined`

যদি আপনি কোনও ভেরিয়েবলের উপস্থিতি আছে কিনা তা পরীক্ষা করতে চান তবে এটি কেবল try/ দিয়ে সম্পন্ন হতে পারে catch, যেহেতু typeofএকটি অঘোষিত ভেরিয়েবল এবং undefinedসমতুল্য মান হিসাবে ঘোষিত একটি ভেরিয়েবলকে বিবেচনা করবে ।

তবে, কোনও ভেরিয়েবল ঘোষিত হয়েছে কিনা এবং তা পরীক্ষা করে দেখুন undefined:

if (yourvar !== undefined) // Any scope

পূর্বে, typeofঅপারেটরটিকে নিরাপদে অপরিজ্ঞাতভাবে পরীক্ষা করতে অপারেটরটি ব্যবহার করা দরকার ছিল , কারণ undefinedভেরিয়েবলের মতোই পুনরায় সাইন করা সম্ভব হয়েছিল । পুরানো উপায়টি এরকম দেখাচ্ছে:

if (typeof yourvar !== 'undefined') // Any scope

ইস্যু undefinedহচ্ছে পুনরায় হস্তান্তরযোগ্য নাম ECMAScript 5, যা 2009 এখন আপনি নিশ্চিন্তে ব্যবহার করতে পারেন মুক্তি পায় সংশোধন করা হয় ===এবং !==এর জন্য পরীক্ষা undefinedব্যবহার না করেই typeofযেমন undefinedশুধুমাত্র পাঠযোগ্য হয়েছে কিছু সময়ের জন্য।

যদি আপনি জানতে চান যে কোনও সদস্য স্বতন্ত্র রয়েছেন কিনা তবে তার মান কী তা বিবেচনা করবেন না:

if ('membername' in object) // With inheritance
if (object.hasOwnProperty('membername')) // Without inheritance

যদি আপনি জানতে চান যে একটি পরিবর্তনশীল সত্যবাদী কিনা :

if (yourvar)

সূত্র


71
অপরিজ্ঞাত কোনও সংরক্ষিত শব্দ নয়; আপনি (বা অন্য কারও কোড) "অপরিজ্ঞাতকৃত = 3" করতে পারেন এবং এটি আপনার দুটি পরীক্ষা ভঙ্গ করবে।
জেসন এস

6
"যদি আপনি জানেন যে ভেরিয়েবলটি বিদ্যমান তবে এটিতে কোনও মান সঞ্চিত আছে কিনা তা জানেন না" - হু ?!
জেসন এস

36
আমি মনে করি তিনি ঘোষিত একটি পরিবর্তনশীল উল্লেখ করছেন যা নির্ধারিত হয়নি। যেমন: var foo; // ফু বিদ্যমান আছে তবে এর কোনও মূল্য নেই
ওয়ালি ললেস

3
হুমম ... আমি কেবল "উত্স" লিঙ্কটি লক্ষ্য করেছি: এই পুরো পোস্টটি একটি মেলিং তালিকার সরাসরি উক্তি, এবং সম্ভবত এটি আরও পরিষ্কার করার জন্য সম্পাদনা করা উচিত, কারণ মূল লেখক স্পষ্ট করার জন্য উপলভ্য নয়।
জেসন এস

11
"জাভাস্ক্রিপ্টে নাল একটি বস্তু।", এটি আসলে সত্য নয় এবং সম্ভবত, এই ভুল ধারণাটির অপরাধী হ'ল typeofঅপারেটর ( typeof null == 'object')। nullমান একটি হল আদিম মান , যার মধ্যে শুধুমাত্র মান নাল টাইপ
সিএমএস

347

ভেরিয়েবলটি সত্যিকারভাবে পরীক্ষা করার একমাত্র উপায় undefinedনিম্নলিখিতটি করা। মনে রাখবেন, অপরিবর্তিত জাভাস্ক্রিপ্টের একটি বিষয়।

if (typeof someVar === 'undefined') {
  // Your variable is undefined
}

এই থ্রেডের অন্যান্য কয়েকটি সমাধান আপনাকে বিশ্বাস করতে পরিচালিত করবে যে একটি পরিবর্তনশীল নির্ধারিত হলেও সুনির্দিষ্ট নয় (উদাহরণস্বরূপ NULL বা 0 এর মান সহ)।


18
প্রশ্নটি এখানে নির্ধারিত ছিল না কারণ এখানে কিছুটা টাইপ করা উচিত! == 'অপরিজ্ঞাত', তাই না?
ইওমরফ

1
সত্যই, আমি মনে করি না যে অপরিবর্তিত একটি বস্তু, ডকুমেন্টেশন চেক করুন প্রথম বিকাশকারী।
মোজিলা.আর.ইন- ইউএস

2
একমাত্র পরীক্ষা যা উত্পাদন করে না ReferenceError
নস্টালজি.ইও

2
এই কোডটি সঠিক, তবে আমি মনে করি undefinedজাভাস্ক্রিপ্টে একটি বিষয় হ'ল ভুল তথ্য। এই বিবৃতি কি আপনার উত্তরের সাথে সম্পর্কিত? এটি এমন একটি মান undefined, undefinedযা বিশ্বব্যাপী সনাক্তকারীকে নাম দেওয়া হয়েছে undefined
সিম্পলজি

1
এটি এখন একমাত্র উপায় হওয়ার দিক থেকে এটি ভুল। undefinedES5 সাল থেকে কেবল পাঠযোগ্য। আপনি undefined ব্যবহার করার জন্য নিরাপদে পরীক্ষা করতে পারেন if (x === undefined) {...}অথবা এই মত সাধারণভাবে সংক্ষেপে ব্যবহার করছে: if (x === void 0)
স্টিফেন এম ইরভিং

66

প্রযুক্তিগতভাবে, সঠিক সমাধানটি হল (আমি বিশ্বাস করি):

typeof x === "undefined"

আপনি কখনও কখনও অলস এবং ব্যবহার করতে পারেন

x == null

তবে এটি একটি অপরিবর্তিত ভেরিয়েবল এক্স, এবং নালযুক্ত একটি ভেরিয়েবল এক্স উভয়কে সত্যে ফিরে আসতে দেয়।


1
আপনি যদি টাইপ করেন var x;এবং তারপরে typeof x;আপনি "undefined"যেমনটি করেন ঠিক typeof lakjdflkdsjflsj;
তেমনই পাবেন

সুতরাং অপরিজ্ঞাত কিন্তু ঘোষিত ভেরিয়েবলের জন্য চেক করার কোনও উপায় নেই?
মুহাম্মাদ উমর

1
আমি তাই মনে করি না; আপনি কেন চাইবেন তা আমি নিশ্চিত নই।
জেসন এস

উজান্দি-সংজ্ঞায়িত অ্যাপ্লিকেশনগুলির মধ্যে হওয়া উচিত নয়
লোফিল্ড থিওরী

apices বলতে কি বুঝ?
জেসন এস

19

আরও সহজ এবং আরও শর্টহ্যান্ড সংস্করণটি হ'ল:

if (!x) {
   //Undefined
}

অথবা

if (typeof x !== "undefined") {
    //Do something since x is defined.
}

26
যদি কোনও ফাংশন কল থেকে এক্স সেট করা থাকে তবে প্রথম কোড-পিসটি ভুল হতে পারে। মত x = A (); যদি A কিছু না ফেরায়, এটি ডিফল্টরূপে "অপরিজ্ঞাত" ফিরে আসবে। একটি! এক্স করা সত্য হবে যা যুক্তিযুক্তভাবে সঠিক হবে। তবে, যদি A () 0 দেয় তবে! X x = 0 হিসাবে মিথ্যা হওয়া উচিত। তবে জেএসে, 0 0টিও সত্য।
রজত

দ্বিতীয় কোডটি সংক্ষিপ্ত করা যেতে পারে: যদি (! টাইপফ (এক্সএক্স)) {...} অন্য {...}
আলেজান্দ্রো সিলভা

2
@ আলেজান্দ্রোসিলভা দেরী জবাবের জন্য দুঃখিত। টাইপফ একটি স্ট্রিং ফেরত দেওয়ার পরে এটি কাজ করবে না, সুতরাং এটি একটি অপরিজ্ঞাত ভেরিয়েবলের জন্য 'অপরিবর্তিত' ফিরে আসবে, যার ফলস্বরূপ সত্য হিসাবে মূল্যায়ন করা হবে সুতরাং এটি একটি সংজ্ঞায়িত ভেরির মিথ্যা ইতিবাচক দিকে পরিচালিত করবে।
দিমিত্রি ফারকভ 20

5
দয়া করে, প্রথম স্নিপেট পরিত্রাণ পেতে এটা শুধু খারাপ
জুয়ান মেন্ডেস

1
অন্যান্য মন্তব্যগুলি উল্লেখ করেছে যে প্রথম উদাহরণটি খারাপ, তবে কেন তা স্পষ্ট নয়। সুতরাং, যে কোনও নতুন কোডারের জন্য: x এক্সটি নির্ধারিত কিনা তা পরীক্ষা করে না, তবে এটি সত্য কিনা। স্ট্রিংস, বুলিয়ান সত্য এবং ধনাত্মক সংখ্যাগুলি সমস্ত সত্যবাদী (এবং আমি কিছু জিনিস ভুলে যাচ্ছি) তবে অন্যান্য সম্ভাব্য বৈধ মানগুলি 0, বুলিয়ান মিথ্যা এবং খালি স্ট্রিং সত্যবাদী নয়। প্রথম উদাহরণটি সুনির্দিষ্ট ব্যবহারের ক্ষেত্রে কাজ করতে পারে (উদাহরণস্বরূপ, যদি আপনি খালি একই সাথে অপরিজ্ঞাত হিসাবে গণ্য করতে পারেন তবে স্ট্রিংয়ের জন্য পরীক্ষা করা) তবে এটি যেখানে হবে না এমন অনেকের কারণে এটি পরীক্ষা করার ডিফল্ট উপায় হিসাবে বিবেচনা করা উচিত নয়।
সিএফসি

16

আমি প্রায়শই করেছি:

function doSomething(variable)
{
    var undef;

    if(variable === undef)
    {
         alert('Hey moron, define this bad boy.');
    }
}

9
"==" "===" এ পরিবর্তন বিবেচনা করুন। আপনি ডোজ কিছুকে (নাল) কল করলে আপনিও সতর্কতা পাবেন। যদি না আপনি এটি চান না।
জেসন এস

হাঁ। আপনি সমতুল্য বা ঠিক সমান চান কিনা তা আপনাকে সিদ্ধান্ত নিতে হবে। উভয় ক্ষেত্রে একটি ব্যবহার করতে পারে।
জো

1
সহজভাবে এটি পরীক্ষা করুন-> যদি (ভেরিয়েবল নাম টাইপ করুন! == 'অপরিজ্ঞাত') {সতর্কতা (ভেরিয়েবল নাম);
Muhammad

এটি অকেজো কারণ আপনি যে কোনও উপায়ে কোনও
avalanche1

2
অবশ্যই আপনি পারেন। কোনও যুক্তি ছাড়াই একটি ফাংশন কল করার চেষ্টা করুন।
জো

3

আপনি টেরিনারি শর্তসাপেক্ষে অপারেটরও ব্যবহার করতে পারেন:

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পরিবর্তে যদি আপনার এটি পরীক্ষা করা উচিত
Iter Ator

1
প্রশ্ন: একটি সংজ্ঞায়িত ভেরিয়েবল পরীক্ষা করুন ..... এটি অপরিজ্ঞাত ভেরিয়েবল: var x; উপরের কাজটি ত্রুটি ছুঁড়ে ফেলবে
মুহাম্মদ উমার ২

"যদি a = মিথ্যা, তবে এটি" i 'জানি না "" "দেখাবে - সমস্যাটি, প্রশ্নটি এটি সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করা উচিত, এটি সত্য নয় কিনা। যদি একটিকে মিথ্যা হিসাবে সংজ্ঞায়িত করা হয় তবে এটিকে সংজ্ঞায়িত করা হয় না। এটি সেই ক্ষেত্রে ভুল ফলাফল দেয়। এই পদ্ধতিটি কেন কাজ করে না সে সম্পর্কে আরও তথ্যের জন্য আমার মন্তব্য stackoverflow.com/a/858270/2055492 দেখুন।
সিএফসি

কেবল এটির !aজন্যই পরীক্ষা করা হবে না undefined, এটি 0এবং nullএবং এর ক্ষেত্রেও সত্য পরীক্ষা করে false। এটি খুব ভুল এবং এটি সরানো উচিত।
স্টিফেন এম ইরভিং

2

আমি প্রায়শই সহজ উপায় ব্যবহার করি:

var variable;
if (variable === undefined){
    console.log('Variable is undefined');
} else {
    console.log('Variable is defined');
}

সম্পাদনা করুন:

ভেরিয়েবলটি আরম্ভ না করে ব্যতিক্রম ছুঁড়ে ফেলা হবে "আনকচড রেফারেন্স এরিয়ার: ভেরিয়েবল সংজ্ঞায়িত করা হয়নি ..."


2
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
Савичев

2

আর একটি সম্ভাব্য "সমাধান" হ'ল windowঅবজেক্টটি ব্যবহার করা । এটি কোনও ব্রাউজারে থাকা অবস্থায় রেফারেন্স ত্রুটির সমস্যা এড়ায়।

if (window.x) {
    alert('x exists and is truthy');
} else {
    alert('x does not exist, or exists and is falsy');
}

এটি মূল প্রশ্নটি মোটেও সমাধান করে না এবং এটি সম্পূর্ণ অপ্রাসঙ্গিক। কিছু সত্যবাদী বা মিথ্যা হলে কীভাবে পরীক্ষা করতে হয় তা পোস্টার জিজ্ঞাসা করছিলেন না, তিনি কীভাবে পরীক্ষা করবেন তা জানতে চেয়েছিলেন undefined। এটি এটি করবে না।
স্টিফেন এম ইরভিং

2

ত্রুটি আপনাকে বলছে যে xএমনকি নেই! এটি ঘোষিত হয়নি , যা কোনও মূল্য নির্ধারিত হওয়ার চেয়ে আলাদা ।

var x; // declaration
x = 2; // assignment

যদি আপনি ঘোষণা করেন x, আপনি কোনও ত্রুটি পাবেন না। আপনি একটি সতর্কতা পাবেন যা বলবে undefinedযে xউপস্থিত রয়েছে / ঘোষণা করা হয়েছে তবে কোনও মান নির্ধারিত হয়নি।

ভেরিয়েবলটি ঘোষিত হয়েছে কিনা তা পরীক্ষা করতে, আপনি ব্যবহার করতে পারেন typeof, ভেরিয়েবলের উপস্থিতি আছে কিনা তা যাচাইয়ের যে কোনও অন্য পদ্ধতি আপনাকে প্রাথমিকভাবে একই ত্রুটিটি বাড়িয়ে তুলবে।

if(typeof x  !==  "undefined") {
    alert(x);
}

এটি সঞ্চিত মানের ধরণটি পরীক্ষা করছে x। এটা শুধুমাত্র ফিরে আসবে undefinedযখন xঘোষণা করা হয়নি বা যদি এটি করেছে ঘোষিত হয়েছে এবং এখনো নির্ধারিত হয়নি।


ইএস 5 (২০০৯ রিলিজ) হওয়ার পরে অপরিজ্ঞাতটি কেবল পাঠযোগ্য এবং আপনার আর typeofঅপারেটরের দরকার নেই ।
স্টিফেন এম ইরভিং

2

voidঅপারেটর আয় undefinedকোনো আর্গুমেন্ট / প্রকাশের জন্য এটি পাস। যাতে আপনি ফলাফলটির বিরুদ্ধে পরীক্ষা করতে পারেন (আসলে কিছু মিনিফায়ার আপনার কোডটি কয়েক অক্ষর সংরক্ষণ undefinedকরতে পরিবর্তন করে void 0)

উদাহরণ স্বরূপ:

void 0
// undefined

if (variable === void 0) {
    // variable is undefined
}

ডিং ডিং! এটা সঠিক উত্তর. লজ্জা এটি নীচে সমস্ত উপায়। প্রত্যেকে এখনও ততক্ষণ ব্যবহারে ঝুঁকছেন typeofএবং চিন্তাভাবনা undefinedপুনরায় বরাদ্দ করা যেতে পারে যা প্রায় এক দশক ধরে সম্ভব হয়নি।
স্টিফেন এম ইরভিং

এটি ES5 এর আগেও নিরাপদ ছিল কারণ ফিরে এসে আপনি এমনকি পুনরায় বরাদ্দ দিলেও undefined, কারণ God শ্বর কেবল কারণেই জানেন, ব্যবহার void 0সর্বদা undefinedনির্বিশেষে ফিরে আসবে ।
স্টিফেন এম ইরভিং

1

আমরা undefinedনিম্নলিখিত হিসাবে পরীক্ষা করতে পারেন

var x; 

if (x === undefined) {
    alert("x is undefined");
} else {
     alert("x is defined");
}

1

নীচের মতো কিছু করুন:

function isNotDefined(value) {
  return typeof value === "undefined";
}

এবং এটিকে কল করুন:

isNotDefined(undefined); //return true
isNotDefined('Alireza'); //return false

0

গৃহীত উত্তরটি সঠিক। আরও একটি বিকল্প যুক্ত করতে চেয়েছিলেন। আপনি 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ব্লক সম্পর্কে সচেতন থাকুন যা কিছুটা অগোছালো কারণ এটি একটি ব্লক-স্তরীয় সুযোগ তৈরি করে। এবং, অবশ্যই, উদাহরণটি জিজ্ঞাসিত প্রশ্নের উত্তর দেওয়ার জন্য অত্যন্ত সরল করে দেওয়া হয়েছে, এটি ত্রুটি পরিচালনার সেরা অনুশীলনগুলি কভার করে না;)।


0

কোনও ভেরিয়েবল ঘোষণা করা হয়েছে যাচাই করতে আমি একটি ছোট ফাংশন ব্যবহার করি, যা সত্যিই আমার জাভাস্ক্রিপ্ট ফাইলগুলিতে বিশৃঙ্খলার পরিমাণ হ্রাস করে। ভেরিয়েবলটি কেবল বিদ্যমান নয়, এটির জন্য একটি মানও বরাদ্দ করা হয়েছে তা নিশ্চিত করার জন্য আমি মানটির জন্য একটি চেক যোগ করি। দ্বিতীয় শর্তটি ভেরিয়েবলটিও ইনস্ট্যান্ট করা হয়েছে কিনা তা যাচাই করে, কারণ যদি ভেরিয়েবলটি সংজ্ঞায়িত করা হয় তবে তা ইনস্ট্যান্টিয়েটেড হয় না (নীচে উদাহরণ দেখুন), আপনি যদি আপনার কোডটিতে এর মান উল্লেখ করার চেষ্টা করেন তবে এটি ত্রুটি ছুঁড়ে ফেলবে।

তাত্ক্ষণিক নয় - তাত্ক্ষণিক 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 }

1
এখনই আপনার প্রিকিকেট ফিরিয়ে দেবেন না কেন? return typeof el !== "undefined" && typeof el.val() !== "undefined"
স্কুবস্কি 14'19
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.