জাভাস্ক্রিপ্টে বস্তুটি বিদ্যমান কিনা তা পরীক্ষা করুন


312

আমি কীভাবে জাভাস্ক্রিপ্টে কোনও বস্তুর অস্তিত্ব যাচাই করব?

নিম্নলিখিত কাজগুলি:

if (!null)
   alert("GOT HERE");

তবে এটি একটি ত্রুটি ছুড়ে ফেলে:

if (!maybeObject)
   alert("GOT HERE");

ভূল:

maybeObject সংজ্ঞায়িত করা হয় নি.

উত্তর:


577

আপনি typeofঅপরিশোধিত ভেরিয়েবলগুলিতে নিরাপদে অপারেটরটি ব্যবহার করতে পারেন ।

যদি এটি নাল সহ কোনও মান নির্ধারিত হয়ে থাকে তবে টাইপফ সংজ্ঞায়িত ব্যতীত অন্য কোনও কিছু ফিরিয়ে দেবে। টাইপফ সর্বদা একটি স্ট্রিং প্রদান করে।

অতএব

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

73
যদি এটি সর্বদা একটি স্ট্রিং থাকে তবে আপনি !==তুলনা করার জন্য সত্যই করতে পারেন (হওয়া উচিত) ।
মীখা

9
যেহেতু এটি একটি মূল জাভাস্ক্রিপ্ট বৈশিষ্ট্য, তাই এটি লজ্জাজনক যে বিল্ট-ইন আরও ভাল এবং কম ত্রুটি-প্রবণ নেই। স্ট্রিং তুলনা কম্পাইলারকে 100% থেকে বাধা দেয় আমাদের নির্ভরযোগ্যভাবে বলুন যখন আমরা এই ধরণের চেকগুলিতে একটি ছোট ভুল (টাইপের মতো) করি।
ডোমি

আমার ক্ষেত্রে, আমি এই অবজেক্টটির সন্ধানের জন্য খুঁজছি, সুতরাং এটি সাহায্য করবে না। আমি একটি সমাধান চাই যা আমি ওয়েলস হিসাবে কনসোলে ব্যবহার করতে পারি, দেখার জন্য কোনও বস্তু কোনও ক্লিকারি ছাড়াই কোথাও ডম্ট্রিতে আছে কিনা ..
ব্লেম

@ টিজে ক্রাউডার এই উদাহরণগুলি আর অ্যাক্সেসযোগ্য বলে মনে হয় না।
স্টিফান ভ্যান ড্যান আকার

1
@ স্টেফানভান্ডেনএক্কার: খারাপ উদাহরণের লিঙ্কটি jsbin.com/ibeho3/1 হওয়া উচিত । ভাল উদাহরণটি ভাল ছিল: jsbin.com/ibeho3/2 । (দুঃখের সাথে জেএসবিন সাম্প্রতিকতম দিকে পুনঃনির্দেশ করেছেন এবং লোকেরা তার জীবনের এক ইঞ্চির মধ্যেও এটি সম্পাদনা করে আসছে))
টিজে ক্রোডার

48

এখানে অনেকগুলি অর্ধ-সত্য রয়েছে, তাই আমি ভেবেছিলাম যে আমি কিছু জিনিস পরিষ্কার করব।

আসলে কোনও ভেরিয়েবল উপস্থিত রয়েছে কিনা তা আপনি সঠিকভাবে বলতে পারবেন না (যদি না আপনি প্রতিটি দ্বিতীয় লাইনকে চেষ্টা-ধরার ব্লকে আবদ্ধ করতে চান)।

কারণটি হচ্ছে জাভাস্ক্রিপ্টটির এই কুখ্যাত মান রয়েছে undefinedযার উল্লেখযোগ্যভাবে অর্থ এই নয় যে চলকটি সংজ্ঞায়িত করা হয়নি, বা এটি বিদ্যমান নেই thatundefined !== not defined

var a;
alert(typeof a); // undefined (declared without a value)
alert(typeof b); // undefined (not declared)

সুতরাং বিদ্যমান একটি ভেরিয়েবল এবং অন্যটি যা আপনাকে টাইপটির প্রতিবেদন করতে পারে না undefined

@ কেভিনের ভুল ধারণা, null == undefined ,। এটি জবরদস্তি টাইপ করার কারণে, এবং ক্রকফোর্ড এই ধরণের জিনিস সম্পর্কে অনিশ্চিত সবাইকে ===সম্ভাব্য নকল মানগুলির জন্য পরীক্ষা করার জন্য কঠোর সমতা অপারেটরটি সর্বদা ব্যবহার করার জন্য বলে রাখার মূল কারণ । null !== undefinedআপনি আশা করতে পারেন কি আপনাকে দেয়। এছাড়াও দয়া করে মনে রাখবেন, যে foo != nullযদি একটি পরিবর্তনশীল কিনা চেক করতে একটি কার্যকর উপায় হতে পারে তন্ন তন্ন undefinedনাnull । অবশ্যই আপনি স্পষ্ট হতে পারেন, কারণ এটি পাঠযোগ্যতার জন্য সহায়তা করতে পারে।

যদি আপনি কোনও বিষয় উপস্থিত রয়েছে কিনা তা পরীক্ষা করতে যদি প্রশ্নটি সীমাবদ্ধ করে থাকেন, typeof o == "object" তবে আপনি যদি অ্যারে অবজেক্টগুলি বিবেচনা না করেন তবে ব্যতীত এটি একটি ভাল ধারণা হতে পারে, কারণ এটি আপনাকে objectকিছুটা বিভ্রান্ত করতে পারে বলেও জানানো হবে । এটি উল্লেখ না করা যা typeof nullআপনাকে দেয় objectযা কেবল ভুল।

আদিম যেখানে আপনি কি সত্যিই সম্পর্কে সতর্কতা অবলম্বন করা উচিত typeof, undefined, null, unknownএবং অন্যান্য misteries হোস্ট বস্তু। তাদের বিশ্বাস করা যায় না। তারা চাইলেই যে কোনও নোংরা কাজ করতে নির্দ্বিধায়। সুতরাং তাদের সাথে সাবধানতা অবলম্বন করুন, পারলে কার্যকারিতা পরীক্ষা করুন, কারণ এমন বৈশিষ্ট্যটি ব্যবহারের একমাত্র নিরাপদ উপায় যা এমনকি অস্তিত্বহীন।


5
কেবলমাত্র করছেন foo!=nullএকটি ReferenceError উত্পাদন করা হবে যদি fooসংজ্ঞায়িত করা হয় না। সুতরাং, typeofআপনি ব্যতিক্রমটি ধরার পরিকল্পনা না করেই এটি ব্যবহার করা ভাল ।
জাল

1
আমি আবার তোমার জন্য লিখে: undefined !== not defined&&foo != null can be an effective way to check if a variable is neither 'undefined' nor 'null' । আমি বলিনি != nullএটি উপস্থিত আছে কিনা তা যাচাই করার জন্য ভাল। আপনি এটিকে প্রসঙ্গের বাইরে নিয়ে যাচ্ছেন। (আমি আরও উল্লেখ করেছি যে এটি একটি
সিডেনোট

2
আপনি আবার শব্দটি ধরণের সাথে সংজ্ঞায়িত না করে বিভ্রান্ত করেন undefined। তারা একই নয়। (note) it can be used !== you should use। পড়ার সময় সাধারণ জ্ঞান ব্যবহার করুন। যখন ভেরিয়েবলটি ঘোষিত হয় (প্যারামিটারের তালিকা বা অন্য কোথাও) এবং আপনি এটির কোনও মূল্য পেয়েছে কিনা তা পরীক্ষা করতে চান, !=নাল পুরোপুরি নিরাপদ। ওপি যা চেয়েছিল তার চেয়ে এটি আলাদা ইউজকেস, সে কারণেই আমি এটিকে একটি নোট হিসাবে পরিচয় করিয়ে দিয়েছি। পুরো অনুচ্ছেদটি @ কেভিনের পোস্ট এবং টাইপ জোর বিটিডব্লিউ সম্পর্কে। আপনি মনোযোগ সহকারে পড়েন কিনা খেয়াল করতে পারেন হিসাবে।
gblazex

@ জাল আপনি যে অংশটি মিস করছেন তা ব্যবহার করে != nullআপনি কোনও ত্রুটির ঝুঁকি নিচ্ছেন না যখন আপনি জানেন যে ভেরিয়েবলটি ঘোষণা করা হয়েছে। এটি ফাংশন আর্গুমেন্টগুলি পরীক্ষা করার জন্য খুব দরকারী, বিবেচনা করুন:var hasValue = function(foo) {return foo != null}
tybro0103

@ tybro0103 এটি সত্য, তবে পুরো বিষয়টি "আমি জাভাস্ক্রিপ্টে কোনও বস্তুর অস্তিত্ব কীভাবে যাচাই করব?"। আপনি যদি নিশ্চিত হন যে এটি ঘোষণা করা হয়েছে, তবে এটি ভিন্ন পরিস্থিতি।
জাল


8

দুটি উপায়.

স্থানীয় ভেরিয়েবলের জন্য টাইপ

আপনি টাইপফ ব্যবহার করে কোনও স্থানীয় অবজেক্টের জন্য পরীক্ষা করতে পারেন:

if (typeof object !== "undefined") {}

গ্লোবাল ভেরিয়েবলের জন্য উইন্ডো

উইন্ডো অবজেক্টটি পর্যবেক্ষণ করে আপনি একটি বিশ্বব্যাপী অবজেক্টের (বৈশ্বিক স্কোপে সংজ্ঞায়িত একটি) পরীক্ষা করতে পারেন:

if (window.FormData) {}

7

যদি এটি কোনও বিশ্বব্যাপী অবজেক্ট হয় তবে আপনি এটি ব্যবহার করতে পারেন if (!window.maybeObject)


আমি খুঁজে পেয়েছি window.hasOwnProperty('maybeObject')আরও কিছুটা পাঠযোগ্য, যদি এটি কোনও বিশ্বব্যাপী অবজেক্ট হয়
নাথানিয়েল রজার্স

5

আপনি "টাইপফ" ব্যবহার করতে পারেন।

if(typeof maybeObject != "undefined")
    alert("GOT HERE");

4

থ্রেডটি বেশ কিছুদিন আগে খোলা হয়েছিল। আমি মনে করি ইতিমধ্যে কোনও টেরিনারি অপারেটরের ব্যবহার সবচেয়ে সহজ বিকল্প:

maybeObject ? console.log(maybeObject.id) : ""

হ্যাঁ, কিছু লাইন ধরে কিছু আছে var maybeObject = typeof maybeObject !== "undefined" ? Chart:false;কিনা তা পরীক্ষা করুন false
Hmerman6006

3

আমি if(maybeObject)আমার জাভাস্ক্রিপ্টগুলিতে নাল চেক হিসাবে ব্যবহার করতাম।

if(maybeObject){
    alert("GOT HERE");
}

সুতরাং শুধুমাত্র যদি maybeObject- একটি অবজেক্ট হয়, সতর্কতা প্রদর্শিত হবে। আমার সাইটে আমার একটি উদাহরণ রয়েছে।

https://sites.google.com/site/javaerrorsandsolutions/home/javascript-dynamic-checkboxes


সমস্যাটি হ'ল যদি অবজেক্টটি ঘোষণা না করা হয় তবে এটি ত্রুটি ছুঁড়ে ফেলবে
জুয়ানমা মেনেনডেজ

যদি maybeObject হয় 0, 0.0, or "", এটা অসত্য হিসাবে চেক
alejandrociatti

3

আমি উপরে থেকে কেবলমাত্র টাইপআর উদাহরণগুলি পরীক্ষা করেছি এবং কোনওটিই আমার পক্ষে কাজ করেনি, সুতরাং পরিবর্তে আমি এটি ব্যবহার করেছি:

    btnAdd = document.getElementById("elementNotLoadedYet");
    if (btnAdd) {
       btnAdd.textContent = "Some text here";
    } else {
      alert("not detected!");
    }


1

অবজেক্ট / ভেরিয়েবলের অস্তিত্ব যাচাই করা ছাড়াও আপনি একটি "সবচেয়ে খারাপ ক্ষেত্রে" আউটপুট সরবরাহ করতে পারেন বা কমপক্ষে একটি সতর্কতার মধ্যে ফাঁদে ফেলতে পারেন যাতে এটি নজরে না যায়।

ফাংশনের উদাহরণ যা পরীক্ষা করে, বিকল্প সরবরাহ করে এবং ত্রুটিগুলি ধরা দেয়।

function fillForm(obj) {
  try {
    var output;
    output = (typeof obj !== 'undefined') ? obj : '';
    return (output);
  } 
  catch (err) {
    // If an error was thrown, sent it as an alert
    // to help with debugging any problems
    alert(err.toString());
    // If the obj doesn't exist or it's empty 
    // I want to fill the form with ""
    return ('');
  } // catch End
} // fillForm End

আমি এটিও তৈরি করেছি কারণ আমি যে অবজেক্টটিতে এটি পাঠাচ্ছি তা x, xm, xm [z] এবং টাইপফ xm [z] হতে পারে যদি xm উপস্থিত না থাকে তবে একটি ত্রুটিযুক্ত হয়ে যেতে পারে।

আমি আসা করি এটা সাহায্য করবে. (বিটিডাব্লু, আমি জেএসের সাথে নবজাতক)


1

আমার জন্য এটি একটি ডোম-অবজেক্টের জন্য কাজ করেছে:

if(document.getElementsById('IDname').length != 0 ){
   alert("object exist");
}

1

যদি আপনি কেবল তার অস্তিত্ব সম্পর্কে চিন্তা করেন (এটি কি ঘোষণা করা হয়েছে?), অনুমোদিত উত্তরটি যথেষ্ট:

if (typeof maybeObject != "undefined") {
   alert("GOT THERE");
}

যদি আপনি এটির প্রকৃত মান রাখার বিষয়ে চিন্তা করেন তবে আপনার যুক্ত করা উচিত:

if (typeof maybeObject != "undefined" && maybeObject != null ) {
   alert("GOT THERE");
}

যেমন typeof( null ) == "object"

যেমন bar = { x: 1, y: 2, z: null}

typeof( bar.z ) == "object" 
typeof( bar.not_present ) == "undefined" 

এই ভাবে আপনি চেক করুন যে এটা ত্ত এর nullবা undefinedএবং যেহেতু typeofযদি মান প্লাস অস্তিত্ব নেই ত্রুটি না &&শর্ট সার্কিট, আপনি একটি রান-টাইম ভুল পান করব না।

ব্যক্তিগতভাবে, আমি কোথাও কোনও সহায়তা সহায়ক যুক্ত করার পরামর্শ দেব (এবং আসুন আমরা বিশ্বাস করি না typeof()):

function exists(data){
   data !== null && data !== undefined
}

if( exists( maybeObject ) ){
    alert("Got here!"); 
}

0
if (n === Object(n)) {
   // code
}

5
যদিও এই কোড ব্লকটি ওপি-র প্রশ্নের উত্তর দিতে পারে, আপনি যদি ব্যাখ্যা করেন যে এই কোডটি এই প্রশ্নের কোড থেকে কীভাবে আলাদা, আপনি কী পরিবর্তন করেছেন, কেন আপনি এটি পরিবর্তন করেছেন এবং কেন এটি সমস্যার সমাধান করে explain অন্যের পরিচয় না দিয়ে।
মাইফেট


-1

ডিভ অ্যালাইনমেন্ট ট্যাবড প্যানেল ব্যবহার করে পাঠ্যবক্স মানকে একটি ফ্রেমে ইনলাইন ফ্রেমে সেট করুন। সুতরাং সর্বোপরি, মান নির্ধারণের আগে আমাদের নির্বাচিত ট্যাবড প্যানেলগুলির ফ্রেম চেক করা দরকার যা নিম্নলিখিত কোডগুলি ব্যবহার করছে না:

জাভাস্ক্রিপ্ট কোড:

/////////////////////////////////////////
<script>

function set_TextID()
            {
                try
                    {
                        if(!parent.frames["entry"])
                            {
                            alert("Frame object not found");    
                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["entry"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["education"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["education"].document.getElementById("form_id").value=setText;
                            }
                            if(!parent.frames["contact"])
                            {
                            alert("Frame object not found");    

                            }
                            else
                            {
                                var setText=document.getElementById("formx").value;
                                parent.frames["contact"].document.getElementById("form_id").value=setText;
                            }

                        }catch(exception){}
                }

</script>

-1

শূন্য এবং নাল অন্তর্নিহিত পয়েন্টার হয়। আপনি যদি গাণিতিক, তুলনা বা স্ক্রিনে '0' মুদ্রণ না করে থাকেন তবে আসলে এটি টাইপ করার দরকার নেই। এটি অন্তর্নিহিত। যেমন নিহিত টাইপফও একই কারণে প্রয়োজন হয় না। ঘড়ি.

যদি (আপত্তি) কনসোল.লগ ("বিদ্যমান");

আমি অনুরোধটি দেখতে পাইনি বা অন্যথায় এটির জন্য অন্তর্ভুক্ত নেই। আমি যতটা অতিরিক্ত বিষয়বস্তু পছন্দ করি যা প্রশ্নের সাথে খাপ খায় না। এটি সহজ রাখা যাক।


আমি প্রশ্নের মধ্যে একটি না দেখতে পাচ্ছি : if (!maybeObject)- তবে প্রকৃতপক্ষে, শিরোনাম বিপরীতটি চেয়েছে।
আরমালি

-4

এটি এর মতো সহজ মনে হয়

if(myobject_or_myvar)
    alert('it exists');
else
   alert("what the hell you'll talking about");

-10

অথবা, আপনি তার পরিবর্তে আমার একচেটিয়া বিদ্যমান () পদ্ধতিটি ব্যবহার করতে শুরু করতে পারেন এবং অসম্ভব হিসাবে বিবেচিত জিনিসগুলি করতে সক্ষম হতে পারেন। অর্থাৎ,

জিনিসগুলি: exists("blabla")বা এমনকি: exists("foreignObject.guessedProperty.guessNext.propertyNeeded")এটিও সম্ভব ...


4
আর সেই পদ্ধতিটি কোথায়?
v010dya
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.