একটি অনির্ধারিত অবজেক্টের সম্পত্তি সনাক্ত করা


উত্তর:


2678

কোনও সম্পত্তির মান বিশেষ মান কিনা তা যাচাই করার স্বাভাবিক উপায় undefinedহ'ল:

if(o.myProperty === undefined) {
  alert("myProperty value is the special value `undefined`");
}

কোনও বস্তুর আসলে এই জাতীয় সম্পত্তি নেই কিনা তা যাচাই করতে এবং তাই undefinedচেষ্টা করার পরে এটি অ্যাক্সেস করার পরে ডিফল্টরূপে ফিরে আসবে:

if(!o.hasOwnProperty('myProperty')) {
  alert("myProperty does not exist");
}

যদি কোনো শনাক্তকারী সঙ্গে যুক্ত মান বিশেষ মান পরীক্ষা করার জন্য undefined, বা যদি আইডেন্টিফায়ার ঘোষিত হয় নি। দ্রষ্টব্য: প্রাথমিক পদ্ধতিতে ত্রুটি ছাড়াই সনাক্তকারীকে অজ্ঞাত ঘোষিত (দ্রষ্টব্য: এর মান হওয়া থেকে আলাদা undefined) উল্লেখ করার একমাত্র উপায় :

if(typeof myVariable === 'undefined') {
  alert('myVariable is either the special value `undefined`, or it has not been declared');
}

ECMAScript 5 এর পূর্ববর্তী জাভাস্ক্রিপ্টের সংস্করণগুলিতে, বিশ্বব্যাপী অবজেক্টে "অপরিজ্ঞাত" নামক সম্পত্তিটি লেখার যোগ্য ছিল এবং সুতরাং একটি সাধারণ চেক foo === undefinedঅপ্রত্যাশিতভাবে আচরণ করতে পারে যদি এটি দুর্ঘটনাক্রমে পুনরায় সংজ্ঞায়িত হয়ে থাকে। আধুনিক জাভাস্ক্রিপ্টে সম্পত্তি কেবল পঠনযোগ্য।

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

আপনি যদি এই (সম্ভাব্য) প্রান্তের বিষয়টি নিয়ে উদ্বিগ্ন হন তবে আপনি নিজেই বিশেষ মানটি পেতে শূন্য অপারেটরটি ব্যবহার করতে পারেন undefined:

if(myVariable === void 0) {
  alert("myVariable is the special value `undefined`");
}

9
যদি কোনও কিছু নাল হয় তবে এটি সংজ্ঞায়িত করা হয় (নাল হিসাবে), তবে আপনি খুব বেশি চেক সংযোগ করতে পারেন। উপরের কোডটির বিরক্তিকর বিশদটি হ'ল এটি যাচাই করার জন্য আপনি কোনও ফাংশন সংজ্ঞায়িত করতে পারবেন না, আপনি ফাংশনটি সংজ্ঞায়িত করতে পারেন ... তবে এটি ব্যবহার করার চেষ্টা করুন।
নিউ-রাহ

5
@ নিউ-রাহ কেন আপনি একটি ফাংশন লিখতে পারবেন না? কেন এই কাজ কিছু হবে না? এটা আমার জন্য কাজ বলে মনে হচ্ছে। এমন কোন মামলা আছে যা আমি বিবেচনা করছি না? jsfiddle.net/djH9N/6
জ্যাক 21

7
@Zack আপনার পরীক্ষাগুলি isnullorUndefined এর ক্ষেত্রে বিবেচনা করেনি যেখানে আপনি isNullOrUnd परिभाषित (চ) এবং f কে অঘোষিত (যেমন যেখানে "var f" ঘোষণা নেই)।
pnkfelix

109
বেলা, হাজার হাজার ভোট এখন। এটি করা সবচেয়ে খারাপ উপায় way আমি আশা করি পথিকরা এই মন্তব্যটি দেখুন এবং চূড়ান্ত সিদ্ধান্ত নেবেন ... আহেম ... অন্যান্য উত্তরগুলি।
রাই-

17
আপনি obj !== undefinedএখনই ব্যবহার করতে পারেন । undefinedপরিবর্তনীয় হতে ব্যবহৃত, মত undefined = 1234কি আকর্ষণীয় ফলাফল হতে পারে। তবে ইকমাস্ক্রিপ্ট 5 এর পরে এটি আর লেখার যোগ্য নয়, তাই আমরা সহজ সংস্করণটি ব্যবহার করতে পারি। কোড্রেডেবিলিটি.এইচও- টো
ব্রুনো বুকোলো

899

আমি বিশ্বাস করি এই বিষয়টির জন্য বেশ কয়েকটি ভুল উত্তর রয়েছে। সাধারণ বিশ্বাসের বিপরীতে, "অপরিবর্তিত" জাভাস্ক্রিপ্টে কোনও কীওয়ার্ড নয় এবং বাস্তবে এটির জন্য একটি মূল্য নির্ধারিত থাকতে পারে।

সঠিক কোড

এই পরীক্ষাটি করার সবচেয়ে শক্তিশালী উপায় হ'ল:

if (typeof myVar === "undefined")

এটি সর্বদা সঠিক ফলাফলটি ফিরিয়ে দেবে এবং এমন পরিস্থিতিও পরিচালনা করে যেখানে myVarঘোষণা করা হয়নি।

কোড ডিজেনারেট করুন ব্যবহার করবেন না.

var undefined = false;  // Shockingly, this is completely legal!
if (myVar === undefined) {
    alert("You have been misled. Run away!");
}

অতিরিক্ত হিসাবে, myVar === undefinedমাইওয়ারটি অঘোষিত অবস্থায় রয়েছে এমন একটি ত্রুটি বাড়িয়ে তুলবে।


133
তিনি লক্ষ করেন myVar === undefined একটি ত্রুটি বাড়াতে হবে myVar ঘোষণা ছিল না জন্য +1
এনরিক

73
=== undefinedবিভ্রডিং ব্যবহার না করার জন্য আমি এখানে প্রথম ন্যায়সঙ্গততা পেয়েছি । হ্যাঁ, আপনি দায়িত্ব অর্পণ করতে পারেন undefined, তবে এটি করার কোনও বৈধ কারণ নেই এবং এটি অনুমানযোগ্য যে এটি করা আপনার কোডটি ভঙ্গ করতে পারে। সি তে আপনি #define true falseএবং পাইথনে আপনি নির্ধারিত করতে পারেন Trueএবং False, কিন্তু লোকেরা এই ভাষায় তাদের কোডটি এমনভাবে ডিজাইন করার প্রয়োজন বোধ করে না যাতে তারা নিজের ইচ্ছাকৃতভাবে নিজের পরিবেশকে অন্য কোথাও কোথাও নাশকতার সম্ভাবনা থেকে রক্ষা করতে পারে code । কেন undefinedএখানে বিবেচনা করা এমনকি মূল্য নির্ধারণের সম্ভাবনা ?
মার্ক আমেরিকা

19
চিহ্নগুলির মন্তব্যের পাশাপাশি, আমি এটি পাই না: "মাইভার === অপরিজ্ঞাপিত পরিস্থিতি যেখানে মাইভারকে অঘোষিত বলে একটি ত্রুটি বাড়িয়ে তুলবে" " - কেন এই খারাপ? আমি যদি অঘোষিত ভেরিয়েবলগুলি উল্লেখ করছি তবে কেন আমি ত্রুটি করতে চাই না ?
eis

5
এছাড়াও মনে রাখবেন যে আপনি সর্বদা void 0মানটি করতে পারেন যা undefinedনির্দেশ করে। সুতরাং আপনি করতে পারেন if (myVar === void 0)0বিশেষ না হয় তবে আপনি আক্ষরিক কোন অভিব্যক্তি লাগাতে পারেন।
ক্লাদিউ

28
আধুনিক ব্রাউজারগুলিতে (এফএফ 4 +, আই 9 +, ক্রোম অজানা), এটি আর পরিবর্তন করা সম্ভব নয় undefinedMDN: অপরিবর্তিত
ব্যবহারকারী 247702

228

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

var snapshot = …;

if (typeof snaposhot === 'undefined') {
    //         ^
    // misspelled¹ – this will never run, but it won’t throw an error!
}
var foo = …;

if (typeof foo === 'undefned') {
    //                   ^
    // misspelled – this will never run, but it won’t throw an error!
}

সুতরাং যদি না আপনি বৈশিষ্ট্য সনাক্তকরণ করছেন - যেখানে কোনও নির্দিষ্ট নাম সুযোগের মধ্যে থাকবে কিনা তা নিয়ে অনিশ্চয়তা রয়েছে ( typeof module !== 'undefined'যেমন একটি জেনারেল জেএস পরিবেশের সাথে নির্দিষ্ট কোডের পদক্ষেপ হিসাবে পরীক্ষা করা) typeofভেরিয়েবলের ক্ষেত্রে ব্যবহার করা ক্ষতিকারক পছন্দ এবং সঠিক বিকল্পটি মানটি সরাসরি তুলনা করতে:

var foo = …;

if (foo === undefined) {
    
}

এ সম্পর্কে কিছু সাধারণ ভুল ধারণা অন্তর্ভুক্ত:

  • যে একটি "অবিচ্ছিন্ন" ভেরিয়েবল ( var foo) বা পরামিতি ( function bar(foo) { … }যা বলা হয় bar()) ব্যর্থ হবে। এটি কেবল সত্য নয় - সুস্পষ্ট সূচনা ব্যতীত ভেরিয়েবলগুলি এবং মানগুলি দেওয়া হয়নি এমন পরামিতিগুলি সর্বদা হয়ে যায় undefinedএবং সর্বদা সুযোগে থাকে।

  • যে undefinedওভাররাইট হতে পারে। এটি আরও অনেক কিছু আছে। undefinedজাভাস্ক্রিপ্টে কোনও কীওয়ার্ড নয়। পরিবর্তে, এটি অনির্ধারিত মান সহ গ্লোবাল অবজেক্টের সম্পত্তি। তবে, ES5 সাল থেকে এই সম্পত্তিটি কেবল পঠনযোগ্য এবং অ-কনফিগারযোগ্য । কোনও আধুনিক ব্রাউজার undefinedসম্পত্তিটি পরিবর্তনের অনুমতি দেবে না এবং 2017 সালের হিসাবে এটি দীর্ঘকাল ধরে এটি ছিল। কঠোর মোডের অভাব undefinedহয় এর আচরণকেও প্রভাবিত করে না - এটি কেবল undefined = 5নিক্ষেপের পরিবর্তে কিছুই করার মতো বিবৃতি দেয় না। যেহেতু এটি কোনও কীওয়ার্ড নয়, তবে আপনি নামের সাথে ভেরিয়েবলগুলি ঘোষণা করতে পারেন undefinedএবং সেই পরিবর্তনগুলি পরিবর্তিত হতে পারে এবং এটি একক-সাধারণ প্যাটার্ন তৈরি করে:

    (function (undefined) {
        // …
    })()

    গ্লোবাল ব্যবহারের চেয়ে বেশি বিপজ্জনক undefined। আপনার যদি ES3- সামঞ্জস্যপূর্ণ হতে হয় তবে এর undefinedসাথে প্রতিস্থাপন করুন void 0- অবলম্বন করবেন না typeof। ( voidসর্বদা একটি ইউনিারি অপারেটর যা কোনও অপারেন্ডের জন্য অপরিবর্তিত মানকে মূল্যায়ন করে)

ভেরিয়েবলগুলি কীভাবে কাজ করে তার সাথে, আসল প্রশ্ন: অবজেক্টের বৈশিষ্ট্যগুলির সমাধান করার সময়। typeofবস্তুর বৈশিষ্ট্যগুলির জন্য কখনও ব্যবহার করার কোনও কারণ নেই । বৈশিষ্ট্য সনাক্তকরণ সম্পর্কিত পূর্বের ব্যতিক্রমগুলি এখানে প্রযোজ্য নয় - typeofকেবলমাত্র ভেরিয়েবলগুলির উপর বিশেষ আচরণ রয়েছে এবং রেফারেন্স অবজেক্টের বৈশিষ্ট্যগুলি ভেরিয়েবল নয়।

এই:

if (typeof foo.bar === 'undefined') {
    
}

হয় সবসময় ঠিক সমতুল্য this³ করুন:

if (foo.bar === undefined) {
    
}

এবং আপনি কেন ব্যবহার করছেন তা নিয়ে বিভ্রান্তিকর পাঠকদের এড়ানোর জন্য উপরের পরামর্শটি আমলে নেওয়া typeof, কারণ ===সাম্যের জন্য এটি যাচাই করার জন্য এটি সবচেয়ে সার্থকতা তৈরি করে, কারণ এটি পরে কোনও ভেরিয়েবলের মান পরীক্ষা করার ক্ষেত্রে পুনরুদ্ধার করা যেতে পারে, কারণ এটি কেবল সরল আরও ভাল দেখাচ্ছে, আপনার === undefinedএখানে সর্বদা ব্যবহার করা উচিত

বস্তুগত বৈশিষ্ট্যগুলির বিষয়টি বিবেচনা করার মতো অন্য কিছু হ'ল আপনি কি সত্যই আদৌ পরীক্ষা করতে চান কিনা undefined। প্রদত্ত সম্পত্তির নাম কোনও অবজেক্টে অনুপস্থিত থাকতে পারে ( undefinedপড়ার সময় মান উত্পাদন করা ), মানের সাথে অবজেক্টের সাথে undefinedউপস্থিত, মান সহ বস্তুর প্রোটোটাইপে undefinedউপস্থিত থাকতে পারে বা অ-মানযুক্ত উভয়ের মধ্যে উপস্থিত থাকতে undefinedপারে। 'key' in objকোনও কী কী কোনও অবজেক্টের প্রোটোটাইপ শৃঙ্খলে রয়েছে Object.prototype.hasOwnProperty.call(obj, 'key')কিনা তা আপনাকে জানিয়ে দেবে এবং আপনাকে জানাবে যে এটি সরাসরি অবজেক্টে রয়েছে কিনা। প্রোটোটাইপ এবং স্ট্রিং-কিড ম্যাপ হিসাবে বস্তুগুলি ব্যবহার সম্পর্কে আমি এই উত্তরে বিশদে যাব না, যদিও এটি মূলত মূল প্রশ্নের সম্ভাব্য ব্যাখ্যা নির্বিশেষে অন্যান্য উত্তরগুলিতে সমস্ত খারাপ পরামর্শের বিরুদ্ধে লড়াই করার উদ্দেশ্যে। উপর পড়ুনআরও জন্য MDN এ অবজেক্ট প্রোটোটাইপ !

Vari উদাহরণ পরিবর্তনশীল নামের অস্বাভাবিক পছন্দ? এটি ফায়ারফক্সের নোস্ক্রিপ্ট এক্সটেনশান থেকে আসল ডেড কোড।
Ass অনুমান করবেন না যে সুযোগে কী রয়েছে তা না জানা যদিও সাধারণভাবে ঠিক। গতিশীল সুযোগের অপব্যবহারের কারণে বোনাস দুর্বলতা: প্রকল্প জিরো 1225
³ আবারও একটি ES5 + পরিবেশ ধরে এবং এটি বিশ্বব্যাপী বস্তুর সম্পত্তি undefinedবোঝায় undefinedvoid 0অন্যথায় বিকল্প ।


@ BenjaminGruenbaum সত্য কিন্তু সম্পূর্ণ বিভ্রান্তিকর। যে কোনও অ-ডিফল্ট প্রসঙ্গ ডিফল্টটিকে undefinedলুকিয়ে রেখে তার নিজস্ব সংজ্ঞা দিতে পারে । যা বেশিরভাগ ব্যবহারিক উদ্দেশ্যে এটি ওভাররাইট করার মতোই প্রভাব ফেলে।
ব্লগটি

23
@blgt এটি ব্যবহারিক কোনও কিছুর জন্য মায়াময় এবং অপ্রাসঙ্গিক। প্রতিটি প্রসঙ্গ কনসোল.লগকে ওভাররাইড করতে পারে, অ্যারে প্রোটোটাইপ পদ্ধতিগুলি পুনরায় সংজ্ঞায়িত করতে পারে এবং এমনকি ফাংশন.প্রোটোটাইপ.ক্যাল` হুকিংকে ওভাররাইড করতে পারে এবং আপনি যখনই জাভাস্ক্রিপ্টে কোনও ফাংশন কল করবেন তখনই পরিবর্তন করতে পারবেন। এর বিরুদ্ধে রক্ষা করা অত্যন্ত বেহায়া এবং মূর্খ। আমি যেমন (এবং মিনিটেক) বলেছি, আপনি অপরিজ্ঞাত void 0কিন্তু আবার এর সাথে তুলনা করতে ব্যবহার করতে পারেন - এটি নির্বোধ এবং অতিমাত্রায়।
বেনিয়ামিন গ্রুইনবাউম

19
আমি চাই আমি দিতে একাধিক upvote ছিল। এটি সবচেয়ে সঠিক উত্তর। আমি typeof something === "undefined") কোডে দেখতে থামাতে চাই
সাইমন বাউমগার্ট-ওল্যান্ডার

@ বেনজামিন গ্রুয়েনবাউম অলস প্রোগ্রামারদের void 0জন্য (একবারের জন্য) খাটো এবং নিরাপদ উভয়ই ! এটি আমার বইয়ের একটি জয়।
wizzwizz4

4
এটি সত্যই গ্রহণযোগ্য উত্তর হওয়া উচিত। এটি সবচেয়ে পুঙ্খানুপুঙ্খ এবং আপ টু ডেট।
প্যাট্রিক মাইকেলসেন

161

জাভাস্ক্রিপ্ট রয়েছে নাল আরো একীন করে নাও undefined । তাদের বিভিন্ন অর্থ রয়েছে।

  • অপরিজ্ঞাত অর্থ ভেরিয়েবলের মান নির্ধারণ করা হয়নি; মানটি কী তা জানা যায়নি।
  • নাল মানে ভেরিয়েবলের মান নির্ধারিত হয় এবং নালতে সেট হয় (কোনও মান নেই)।

মারিজন হ্যাভারবেকে তার নিখরচায়, অনলাইন বই " এলওভারেন্ট জাভাস্ক্রিপ্ট " (জোর দেওয়া খনি) -এ বলেছেন:

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

সুতরাং, আমি অনুমান করি যে কোনও কিছুর পূর্বনির্ধারিত ছিল কিনা তা যাচাই করার সর্বোত্তম উপায় হ'ল:

if (something == undefined)

আশাকরি এটা সাহায্য করবে!

সম্পাদনা: আপনার সম্পাদনার প্রতিক্রিয়া হিসাবে, অবজেক্ট বৈশিষ্ট্যগুলি একইভাবে কাজ করা উচিত।

var person = {
    name: "John",
    age: 28,
    sex: "male"
};

alert(person.name); // "John"
alert(person.fakeVariable); // undefined

42
যদি (কিছু == অপরিবর্তিত) আরও ভাল লেখা থাকে যেন (কিছু === অপরিবর্তিত)
সেবাস্তিয়ান রিটাউ

59
এটি উল্লেখ করা উচিত যে এটি সম্পূর্ণ নিরাপদ নয়। undefinedকেবলমাত্র একটি পরিবর্তনশীল যা ব্যবহারকারীর দ্বারা পুনরায় বরাদ্দ করা যেতে পারে: লেখার undefined = 'a';ফলে আপনার কোডটি আপনাকে যা মনে করে তা করবে না। ব্যবহার typeofকরা আরও ভাল এবং ভেরিয়েবলগুলির জন্যও কাজ করে (কেবলমাত্র বৈশিষ্ট্য নয়) যা ঘোষিত হয়নি।
গাব মোথার্ট

7
যদি কোনও কিছু অপরিজ্ঞাত গ্লোবাল ভেরিয়েবল হয়, (কিছু == অপরিজ্ঞাত) জাভাস্ক্রিপ্ট ত্রুটি নিয়ে আসে।
মরগান চেং

8
এটির সাথে সমস্যাটি হ'ল যদি var a = নাল হয় তবে a == অপরিবর্তিত সত্যকে মূল্যায়ন করে, যদিও এটিকে অবশ্যই সুনির্দিষ্টভাবে সংজ্ঞায়িত করা হয়।
অ্যান্ড্রু

6
"স্বতন্ত্র জাভাস্ক্রিপ্ট" মন্তব্যটির এই ব্যাখ্যাটি পিছিয়ে রয়েছে । আপনি যদি সত্যিই কেবল অপরিজ্ঞাত জন্য যাচাই করতে চান তবে প্রস্তাবিত কোডটি কাজ করবে না (এটি শর্তটি সংজ্ঞায়িতও করবে কিন্তু কোনও মান এখনও প্রদান করা হয়নি [ienull]) একটি নাল মান। প্রস্তাবিত কোড "যদি (কিছু == অপরিবর্তিত) ..." অপরিজ্ঞাত এবং নাল উভয় (কোনও মান সেট নেই) যাচাই করে , অর্থাত এটি "যদি (কিছু অপরিবর্তিত থাকে) বা (কিছু নাল হয়) ..." হিসাবে ব্যাখ্যা করা হয় ... " কি লেখক বলছে প্রায়ই কি যে সত্যিই চান তাদের জন্য চেক করা হল উভয় অনির্ধারিত এবং নাল।
চক কলার্স

125

এর অর্থ কী: "অপরিজ্ঞাত অবজেক্ট সম্পত্তি" ?

আসলে এটি দুটি ভিন্ন জিনিস বোঝাতে পারে! প্রথমত, এর অর্থ এমন সম্পত্তির অর্থ হতে পারে যা কখনও অবজেক্টে সংজ্ঞায়িত হয় নি এবং দ্বিতীয়ত, এর অর্থ এমন সম্পত্তি হতে পারে যার একটি অপরিজ্ঞাত মান রয়েছে । আসুন এই কোডটি দেখুন:

var o = { a: undefined }

অপরিবর্তিত o.a? হ্যাঁ! এর মান নির্ধারিত। অপরিবর্তিত o.b? নিশ্চিত! 'বি' তেমন কোনও সম্পত্তি নেই! ঠিক আছে, এখন উভয় পরিস্থিতিতে বিভিন্ন পদ্ধতির আচরণ করে তা দেখুন:

typeof o.a == 'undefined' // true
typeof o.b == 'undefined' // true
o.a === undefined // true
o.b === undefined // true
'a' in o // true
'b' in o // false

আমরা স্পষ্টভাবে দেখতে পাচ্ছি typeof obj.prop == 'undefined'এবং obj.prop === undefinedএটি সমান এবং তারা এই বিভিন্ন পরিস্থিতিতে পৃথক করে না। এবং 'prop' in objপরিস্থিতিটি সনাক্ত করতে পারে যখন কোনও সম্পত্তি মোটেও সংজ্ঞায়িত করা হয়নি এবং সম্পত্তি মূল্য যা অপরিজ্ঞাত হতে পারে সেদিকে মনোযোগ দেয় না।

তো এখন কি করা?

1) আপনি জানতে চান যে কোনও সম্পত্তি প্রথম বা দ্বিতীয় অর্থ (সর্বাধিক সাধারণ পরিস্থিতি) দ্বারা অপরিবর্তিত রয়েছে কিনা।

obj.prop === undefined // IMHO, see "final fight" below

2) আপনি কেবল জানতে চান যে কোনও জিনিসের কোনও সম্পত্তি রয়েছে এবং এর মূল্য সম্পর্কে যত্ন নেই।

'prop' in obj

মন্তব্য:

  • আপনি একই সাথে কোনও জিনিস এবং তার সম্পত্তি পরীক্ষা করতে পারবেন না। উদাহরণস্বরূপ, x x.a === undefinedবা সংজ্ঞা না দেওয়া থাকলে এটি বা এটি typeof x.a == 'undefined'উত্থাপন করে ReferenceError: x is not defined
  • পরিবর্তনশীল undefinedএকটি বিশ্বব্যাপী পরিবর্তনশীল (তাই আসলে এটি window.undefinedব্রাউজারগুলিতে থাকে)। এটি ECMAScript 1 ম সংস্করণ এবং ECMAScript 5 সাল থেকে এটি কেবল পঠিত থেকে সমর্থনযোগ্য । সুতরাং আধুনিক ব্রাউজারগুলিতে এটি সত্যের সাথে নতুন সংজ্ঞা দেওয়া যায় না কারণ অনেক লেখকই আমাদের ভীতি প্রদর্শন করতে পছন্দ করেন তবে এটি পুরানো ব্রাউজারগুলির ক্ষেত্রে এখনও সত্য।

চূড়ান্ত লড়াই: obj.prop === undefinedবনামtypeof obj.prop == 'undefined'

এর ফলস obj.prop === undefined:

  • এটি কিছুটা খাটো এবং কিছুটা সুন্দর দেখাচ্ছে t
  • জাভাস্ক্রিপ্ট ইঞ্জিন যদি আপনি ভুল বানান করে থাকে তবে আপনাকে একটি ত্রুটি দেবে undefined

এর মিনিটস obj.prop === undefined:

  • undefined পুরানো ব্রাউজারগুলিতে ওভাররাইড করা যেতে পারে

এর ফলস typeof obj.prop == 'undefined':

  • এটা আসলে সর্বজনীন! এটি নতুন এবং পুরানো ব্রাউজারগুলিতে কাজ করে।

এর মিনিটস typeof obj.prop == 'undefined':

  • 'undefned'( ভুল বানান ) এখানে কেবল একটি স্ট্রিং ধ্রুবক, তাই জাভা স্ক্রিপ্ট ইঞ্জিন আপনাকে সাহায্য করতে পারে না যদি আপনি এটির মতো বানান বানান যেমন আমি ঠিক করেছি।

আপডেট (সার্ভার-সাইড জাভাস্ক্রিপ্টের জন্য):

Node.js বিশ্বব্যাপী পরিবর্তনশীল সমর্থন undefinedযেমন global.undefined(এটা এছাড়াও 'বিশ্বব্যাপী' উপসর্গ ছাড়া ব্যবহার করা যেতে পারে)। সার্ভার-সাইড জাভাস্ক্রিপ্টের অন্যান্য বাস্তবায়ন সম্পর্কে আমি জানি না।


@ বার্গি আপনার মন্তব্যের জন্য আপনাকে ধন্যবাদ। আমি আমার উত্তর সংশোধন করেছি। আমার প্রতিরক্ষার সাথে আমি বলতে পারি যে বর্তমানে (v.0.10.18 হিসাবে) অফিসিয়াল নোড.জেএস ডকুমেন্টেশন এরundefined সদস্য হিসাবে কিছুই বলে না global। এছাড়াও তন্ন তন্ন console.log(global);না for (var key in global) { ... }প্রদর্শন করা হয় না undefined একজন সদস্য হিসেবে বিশ্বব্যাপী । তবে পরীক্ষার মতো 'undefined' in globalবিপরীত দেখান।
কনস্ট্যান্টিন স্মোলিয়ানিন

4
এটি অতিরিক্ত নথিপত্রের প্রয়োজন নেই কারণ এটি ইকামাস্ক্রিপ্ট অনুচ্ছেদে রয়েছে , যা এটিও [[Enumerable]]মিথ্যা বলেছে :-)
বার্গি

5
সম্পর্কিত Minuses of typeof obj.prop == 'undefined', এই হিসাবে লিখে এড়ানো যেতে পারে typeof obj.prop == typeof undefined। এটি একটি খুব সুন্দর প্রতিসাম্য দেয়।
hlovdal

3
@ হ্লোভডাল: এটি সম্পূর্ণ অর্থহীন বনাম obj.prop === undefined
রাই-

1
যখন আমরা প্রথম শব্দের "( অপরিজ্ঞাত সম্পত্তিটি সনাক্তকরণ ") প্রশ্নের শিরোনামের সাথে সত্য হয়ে থাকি ("অপরিবর্তিত কিনা তা পরীক্ষা করুন ...") আপনি উত্তর দিন if ('foo' in o) ... আপনার উত্তরটি সত্যই এখানে প্রথম সঠিক উত্তর। খুব সুন্দর অন্য সবাই কেবল এই বাক্যটির উত্তর দেয়।
ফ্রাঙ্ক নোক

70

ইস্যুটি তিনটি ক্ষেত্রে উত্থিত:

  1. বস্তুর সম্পত্তি আছে এবং তার মান নয় undefined
  2. বস্তুর সম্পত্তি রয়েছে এবং এর মান undefined
  3. বস্তুর সম্পত্তি নেই।

এটি আমাদের এমন কিছু বলে যা আমি গুরুত্বপূর্ণ বলে মনে করি:

অপরিজ্ঞাত সদস্য এবং একটি সংজ্ঞায়িত মান সহ একটি সংজ্ঞায়িত সদস্যের মধ্যে পার্থক্য রয়েছে।

তবে দুঃখজনকভাবে typeof obj.fooআমাদের জানায় না যে আমাদের তিনটি মামলার কোনটি রয়েছে। তবে "foo" in objকেসগুলি আলাদা করতে আমরা এটির সাথে একত্রিত করতে পারি ।

                               |  typeof obj.x === 'undefined' | !("x" in obj)
1.                     { x:1 } |  false                        | false
2.    { x : (function(){})() } |  true                         | false
3.                          {} |  true                         | true

এটি গুরুত্বপূর্ণ যে এই পরীক্ষাগুলিও nullএন্ট্রিগুলির জন্য একই

                               |  typeof obj.x === 'undefined' | !("x" in obj)
                    { x:null } |  false                        | false

আমি যুক্তি দিয়েছি যে কিছু ক্ষেত্রে সম্পত্তিটি আছে কিনা তা যাচাই করার চেয়ে এটি অপরিজ্ঞাত রয়েছে কিনা তা পরীক্ষা করার চেয়ে আরও স্পষ্ট করে তোলে (এবং আরও পরিষ্কার), এবং এই চেকটি কেবল আলাদা হবে এমন একমাত্র ক্ষেত্রে ক্ষেত্রে 2, বিরল ক্ষেত্রে একটি অনির্ধারিত মান সহ অবজেক্টে আসল প্রবেশ entry

উদাহরণস্বরূপ: আমি সবেমাত্র একটি সংখ্যক কোডের রিফেক্টর করছি যাতে কোনও বস্তুর প্রদত্ত সম্পত্তি ছিল কিনা তা যাচাই করে নিচ্ছে।

if( typeof blob.x != 'undefined' ) {  fn(blob.x); }

অপরিজ্ঞাত জন্য চেক ছাড়া লিখিত ছিল যা পরিষ্কার ছিল।

if( "x" in blob ) { fn(blob.x); }

তবে যেমনটি উল্লেখ করা হয়েছে এটি হুবহু এক নয় (তবে আমার প্রয়োজনের জন্য যথেষ্ট ভাল।


10
হাই মাইকেল দুর্দান্ত পরামর্শ এবং আমি মনে করি এটি জিনিসগুলিকে আরও পরিষ্কার করে তোলে। আমি পেয়েছি যে একটি পেয়েছে, তবে, এটি ব্যবহার করার সময়! "ইন" সহ অপারেটর। আপনার if (!("x" in blob)) {}চারপাশে বন্ধনী দিয়ে বলতে হবে, কারণ! অপারেটরের 'ইন' এর চেয়ে বেশি অগ্রাধিকার রয়েছে। আশা করি যে কাউকে সাহায্য করবে।
সাইমন পূর্ব

দুঃখিত মাইকেল, তবে এটি মূল প্রশ্নের আলোকে ভুল বা অন্তত বিভ্রান্তিকর। 'ইন' কোনও বস্তুর সম্পত্তির টাইপ অপরিজ্ঞাত রয়েছে কিনা তা পরীক্ষা করার পর্যাপ্ত উপায় নয়। : প্রমাণ জন্য, দয়া করে এই বেহালার দেখুন jsfiddle.net/CsLKJ/4
টেক্স

2
এই দুটি কোড পার্ট আলাদা কাজ! বিবেচনা করুন এবং দ্বারা দেওয়া আপত্তি a = {b: undefined}; তারপর typeof a.b === typeof a.c === 'undefined'কিন্তু 'b' in aএবং !('c' in a)
মিগল

3
+1 টি। সম্পত্তিটি বিদ্যমান কিনা এবং এর মূল্য অপরিশোধিত আছে কি না , বা সম্পত্তি নিজেই অপরিশোধিত রয়েছে (অর্থাত্ বিদ্যমান নেই) তা ওপি স্পষ্ট করে না make
রবজি

আমি আপনার প্রথম সারণীতে বিন্দু (২) পরিবর্তন করার পরামর্শ দেব { x : undefined }বা কমপক্ষে এটিকে টেবিলের (২) এর অন্য বিকল্প হিসাবে যুক্ত করব - সেই বিন্দুটি (২.) উপলব্ধি করার জন্য আমাকে কিছু মুহুর্তের জন্য ভাবতে হয়েছিল undefined(যদিও ) মূল্যায়ন করে (যদিও ) আপনি পরে এটি উল্লেখ)।
মুচাহো

46
if ( typeof( something ) == "undefined") 

এটি আমার পক্ষে কাজ করেছিল যখন অন্যরা তা করেনি।



12
তবে তারা যা যাচাই করা হচ্ছে তা পরিষ্কার করে দেয়। অন্যথায় এটি হিসাবে পড়া হতে পারে typeof (something == "undefined")
অভি বেকার্ট

আপনার যদি প্রথম বন্ধনীর প্রয়োজন হয় তবে আপনার জেএস-তে অপারেটর অগ্রাধিকারটি শিখতে হবে: বিকাশকারী.মোজিলা.আর.ইন-
ইয়ান

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

27
প্যারেনথেসিস জিনিস পরিষ্কার করতে দরকারী are তবে এই ক্ষেত্রে তারা কেবল অপারেটরটিকে কোনও ফাংশনের মতো দেখায়। কোনও সন্দেহ নেই যে এটি প্রোগ্রামারের উদ্দেশ্যকে স্পষ্ট করে। তবে আপনি যদি অপারেটর প্রাধান্য সম্পর্কে অনিশ্চিত হন তবে আপনার এটি বরং লেখা উচিত (typeof something) === "undefined"
রবার্ট

42

আমি নিশ্চিত নই যে এর ===সাথে ব্যবহারের উত্সটি typeofকোথা থেকে এসেছে, এবং একটি কনভেনশন হিসাবে আমি এটি দেখতে অনেক লাইব্রেরিতে ব্যবহার করেছি তবে টাইপফোর অপারেটর একটি স্ট্রিংকে আক্ষরিক প্রত্যাবর্তন করে, এবং আমরা তা সামনে জানি, আপনি কেন টাইপ করতে চান? এটাও পরীক্ষা করে দেখুন?

typeof x;                      // some string literal "string", "object", "undefined"
if (typeof x === "string") {   // === is redundant because we already know typeof returns a string literal
if (typeof x == "string") {    // sufficient

দুর্দান্ত পয়েন্ট এরিক। পরীক্ষা করার ধরণ থেকেও কোনও পারফরম্যান্স হিট হচ্ছে?
সাইমন পূর্ব

5
@ সিমন: একেবারে বিপরীত - '===' ক্ষেত্রে জোর করে এড়ানো থেকে কেউ সামান্য পারফরম্যান্সের আশা করতে পারে expect দ্রুত এবং নোংরা পরীক্ষাটি এফএফ 5.0.1 এর আওতায় '===' '==' এর চেয়ে 5% বেশি দ্রুতগতিতে দেখিয়েছে
অ্যান্টনি হ্যাচকিন্স

5
আরও পুঙ্খানুপুঙ্খ পরীক্ষায় দেখা গেছে যে এফএফ, আই এবং ক্রোমের অধীনে '==' '===' (5-10%) এর চেয়ে কম বা বেশি দ্রুত এবং অপেরা কোনও পার্থক্য করে না: jsperf.com/triple- সমান-বনাম-দ্বিগুণ-সমান / 6
অ্যান্টনি হ্যাচকিন্স

3
ব্যবহার ==এখনও প্রয়োজন অন্তত একটি টাইপ চেক - অনুবাদক তাদের টাইপ প্রথম জেনে দুই operands তুলনা করতে পারবে না।
Alnitak

7
=====:) এর চেয়ে কম চরিত্রটি হল
এসভিডজেন

25

সম্পর্কিত প্রশ্ন থেকে আমার উত্তর ক্রসপোস্টিং জাভাস্ক্রিপ্টে "অপরিজ্ঞাত" কীভাবে চেক করবেন?

এই প্রশ্নের নির্দিষ্ট, সঙ্গে পরীক্ষার বিষয় দেখতে someObject.<whatever>


বিভিন্ন উত্তরের ফলাফল চিত্রিত করে এমন কিছু পরিস্থিতি: http://jsfiddle.net/drzaus/UVjM4/

(নোট করুন যে কোনও স্কোপযুক্ত মোড়কে varরাখার সময় inপরীক্ষাগুলির ব্যবহারের ক্ষেত্রে একটি পার্থক্য রয়েছে)

রেফারেন্সের জন্য কোড:

(function(undefined) {
    var definedButNotInitialized;
    definedAndInitialized = 3;
    someObject = {
        firstProp: "1"
        , secondProp: false
        // , undefinedProp not defined
    }
    // var notDefined;

    var tests = [
        'definedButNotInitialized in window',
        'definedAndInitialized in window',
        'someObject.firstProp in window',
        'someObject.secondProp in window',
        'someObject.undefinedProp in window',
        'notDefined in window',

        '"definedButNotInitialized" in window',
        '"definedAndInitialized" in window',
        '"someObject.firstProp" in window',
        '"someObject.secondProp" in window',
        '"someObject.undefinedProp" in window',
        '"notDefined" in window',

        'typeof definedButNotInitialized == "undefined"',
        'typeof definedButNotInitialized === typeof undefined',
        'definedButNotInitialized === undefined',
        '! definedButNotInitialized',
        '!! definedButNotInitialized',

        'typeof definedAndInitialized == "undefined"',
        'typeof definedAndInitialized === typeof undefined',
        'definedAndInitialized === undefined',
        '! definedAndInitialized',
        '!! definedAndInitialized',

        'typeof someObject.firstProp == "undefined"',
        'typeof someObject.firstProp === typeof undefined',
        'someObject.firstProp === undefined',
        '! someObject.firstProp',
        '!! someObject.firstProp',

        'typeof someObject.secondProp == "undefined"',
        'typeof someObject.secondProp === typeof undefined',
        'someObject.secondProp === undefined',
        '! someObject.secondProp',
        '!! someObject.secondProp',

        'typeof someObject.undefinedProp == "undefined"',
        'typeof someObject.undefinedProp === typeof undefined',
        'someObject.undefinedProp === undefined',
        '! someObject.undefinedProp',
        '!! someObject.undefinedProp',

        'typeof notDefined == "undefined"',
        'typeof notDefined === typeof undefined',
        'notDefined === undefined',
        '! notDefined',
        '!! notDefined'
    ];

    var output = document.getElementById('results');
    var result = '';
    for(var t in tests) {
        if( !tests.hasOwnProperty(t) ) continue; // bleh

        try {
            result = eval(tests[t]);
        } catch(ex) {
            result = 'Exception--' + ex;
        }
        console.log(tests[t], result);
        output.innerHTML += "\n" + tests[t] + ": " + result;
    }
})();

এবং ফলাফল:

definedButNotInitialized in window: true
definedAndInitialized in window: false
someObject.firstProp in window: false
someObject.secondProp in window: false
someObject.undefinedProp in window: true
notDefined in window: Exception--ReferenceError: notDefined is not defined
"definedButNotInitialized" in window: false
"definedAndInitialized" in window: true
"someObject.firstProp" in window: false
"someObject.secondProp" in window: false
"someObject.undefinedProp" in window: false
"notDefined" in window: false
typeof definedButNotInitialized == "undefined": true
typeof definedButNotInitialized === typeof undefined: true
definedButNotInitialized === undefined: true
! definedButNotInitialized: true
!! definedButNotInitialized: false
typeof definedAndInitialized == "undefined": false
typeof definedAndInitialized === typeof undefined: false
definedAndInitialized === undefined: false
! definedAndInitialized: false
!! definedAndInitialized: true
typeof someObject.firstProp == "undefined": false
typeof someObject.firstProp === typeof undefined: false
someObject.firstProp === undefined: false
! someObject.firstProp: false
!! someObject.firstProp: true
typeof someObject.secondProp == "undefined": false
typeof someObject.secondProp === typeof undefined: false
someObject.secondProp === undefined: false
! someObject.secondProp: true
!! someObject.secondProp: false
typeof someObject.undefinedProp == "undefined": true
typeof someObject.undefinedProp === typeof undefined: true
someObject.undefinedProp === undefined: true
! someObject.undefinedProp: true
!! someObject.undefinedProp: false
typeof notDefined == "undefined": true
typeof notDefined === typeof undefined: true
notDefined === undefined: Exception--ReferenceError: notDefined is not defined
! notDefined: Exception--ReferenceError: notDefined is not defined
!! notDefined: Exception--ReferenceError: notDefined is not defined

21

যদি তুমি করো

if (myvar == undefined )
{ 
    alert('var does not exists or is not initialized');
}

এটি পরিবর্তনশীল যখন ব্যর্থ হবে myvar উপস্থিত না থাকলে , কারণ মাইভার সংজ্ঞায়িত হয়নি, সুতরাং স্ক্রিপ্টটি নষ্ট হয়ে গেছে এবং পরীক্ষার কোনও প্রভাব নেই।

উইন্ডো অবজেক্টটির কোনও ফাংশনের বাইরে একটি বিশ্বব্যাপী স্কোপ (ডিফল্ট অবজেক্ট) থাকার কারণে উইন্ডো অবজেক্টের সাথে একটি ঘোষণা 'সংযুক্ত' হবে।

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

var myvar = 'test';

বিশ্বব্যাপী পরিবর্তনশীল myvar হিসাবে একই window.myvar বা জানালা [ 'myvar']

যখন বৈশ্বিক চলক উপস্থিত থাকে তখন পরীক্ষা করার জন্য ত্রুটিগুলি এড়াতে আপনি আরও ভাল ব্যবহার করুন:

if(window.myvar == undefined )
{ 
    alert('var does not exists or is not initialized');
}

যদি ভেরিয়েবলটি সত্যই উপস্থিত থাকে তবে প্রশ্নটির কোনও গুরুত্ব নেই its অন্যথায়, অনির্ধারিত সাথে পরিবর্তনশীল সূচনা করা নির্বোধ, এবং এটি আরম্ভ করার জন্য ভ্যালুটি ভাল ব্যবহার করা use আপনি যখন জানেন যে আপনার ঘোষিত সমস্ত ভেরিয়েবলগুলি মিথ্যা দিয়ে শুরু করা হয়েছে, আপনি কেবল এর প্রকারটি যাচাই করতে পারেন বা এর !window.myvarযথাযথ / বৈধ মান আছে কিনা তা পরীক্ষা করতে নির্ভর করতে পারেন। তাই, এমনকি যখন পরিবর্তনশীল তারপর সংজ্ঞায়িত করা হয় না !window.myvarজন্য একই myvar = undefinedবা myvar = falseবা myvar = 0

আপনি যখন একটি নির্দিষ্ট ধরণের আশা করেন, ভেরিয়েবলের ধরণটি পরীক্ষা করুন। শর্তটি পরীক্ষা করার জন্য আপনি আরও ভাল করতে পারেন:

if( !window.myvar || typeof window.myvar != 'string' )
{
    alert('var does not exists or is not type of string');
}

প্রথম এবং সরল শর্তটি সত্য হলে দোভাষী পরবর্তী পরীক্ষাগুলি এড়িয়ে যান।

ভেরিয়েবলের উদাহরণ / অবজেক্টটি বৈধ মান পেয়েছে কিনা তা যাচাই করার জন্য সর্বদা ভাল। এটি আরও স্থিতিশীল এবং প্রোগ্রামিংয়ের একটি ভাল উপায়।

(Y)


19

আমি দেখিনি (আশা করি আমি এটি মিস করিনি) যে কেউ সম্পত্তিটির আগে বস্তুটি পরীক্ষা করছে। সুতরাং, এটি সবচেয়ে সংক্ষিপ্ত এবং কার্যকর (যদিও সর্বাধিক পরিষ্কার নয়):

if (obj && obj.prop) {
  // Do something;
}

যদি আপত্তি বা অবজেক্ট.প্রপ অপরিজ্ঞাত, নাল, বা "মিথ্যা" থাকে তবে যদি বিবৃতিটি কোড ব্লকটি কার্যকর করে না। এই সাধারণত (জাভাস্ক্রিপ্ট মধ্যে) সবচেয়ে কোড ব্লক বিবৃতি কাঙ্ক্ষিত আচরণ।


2
আপনি যদি জানতে চান কেন এটি কাজ করে: জাভাস্ক্রিপ্ট: লজিকাল অপারেটর এবং সত্য / মিথ্যা
এমবি 21

যদি আপনি কোনও ভেরিয়েবলের সম্পত্তি নির্ধারণ করতে চান, যদি এটি সংজ্ঞায়িত হয়, নাল নয় এবং মিথ্যা নয়, অন্যথায় কিছু ডিফল্ট মান ব্যবহার করেন তবে আপনি এটি ব্যবহার করতে পারেন: var x = obj && obj.prop || 'default';
স্টিজন ডি উইট

আমি বিশ্বাস করি প্রশ্নটি স্পষ্টভাবে অপরিবর্তিত বিরুদ্ধে পরীক্ষা করার জন্য। জেএসের সমস্ত মিথ্যা মানগুলির বিরুদ্ধে আপনার শর্ত পরীক্ষা করে।
নিকো কিরিয়াকিড

15

নিবন্ধে নাল এবং জাভাস্ক্রিপ্ট মধ্যে অনির্দিষ্ট নরক এক্সপ্লোরিং আমি পড়তে যে ভালো অবকাঠামো Underscore.js এই ফাংশন ব্যবহার করুন:

function isUndefined(obj){
    return obj === void 0;
}

3
void 0এটি কেবল লেখার একটি স্বল্প উপায় undefined(যেহেতু কোনও অভিব্যক্তি ফিরে আসার পরে তা বাতিল হয়), এটি 3 চার্টার সংরক্ষণ করে। এটিও করতে পারে var a; return obj === a;তবে এটি আরও একটি চরিত্র। :-)
রবজি

2
voidএকটি সংরক্ষিত শব্দ, যেখানে ডিফল্ট হিসাবে সমান undefinedহয় না , আপনি যেমন একটি মান নির্ধারণ করতে পারেন । undefinedvoid 0undefinedundefined = 1234
ব্রায়ান এম হান্ট

isUndefined(obj): 16 অক্ষর। obj === void 0: 14 অক্ষর। 'নাফ বলল।
স্টিজন ডি উইট

14

কেবল জাভাস্ক্রিপ্টে কোনও কিছুর সংজ্ঞা দেওয়া হয়নি, অপরিজ্ঞাত করা হয়েছে , এটি কোনও বিষয় / অ্যারের অভ্যন্তরের সম্পত্তি বা কেবল একটি সাধারণ ভেরিয়েবল হিসাবে গুরুত্বপূর্ণ নয় ...

জাভাস্ক্রিপ্ট রয়েছে typeofযা একটি অনির্ধারিত ভেরিয়েবল সনাক্ত করা খুব সহজ করে।

কেবল পরীক্ষা করুন typeof whatever === 'undefined'এবং এটি একটি বুলিয়ান ফিরে আসবে কিনা ।

isUndefined()AngularJs v.1x এর বিখ্যাত ফাংশনটি এভাবে লেখা হয়:

function isUndefined(value) {return typeof value === 'undefined';} 

আপনি যেমন ফাংশনটি দেখেন কোনও মান প্রাপ্ত হয়, যদি সেই মানটি সংজ্ঞায়িত করা হয় তবে তা ফিরে আসবে false, অন্যথায় অপরিজ্ঞাত মানগুলির জন্য, ফিরে আসবে true

সুতরাং আসুন আমরা একবার নীচের মত বস্তুর বৈশিষ্ট্য সহ মানগুলি পাস করার পরে ফলাফলগুলি কী হতে পারে তা একবার দেখে নেওয়া যাক, এটি আমাদের রয়েছে ভেরিয়েবলগুলির তালিকা:

var stackoverflow = {};
stackoverflow.javascipt = 'javascript';
var today;
var self = this;
var num = 8;
var list = [1, 2, 3, 4, 5];
var y = null;

এবং আমরা নীচের হিসাবে সেগুলি পরীক্ষা করে নিই, আপনি তাদের সামনে ফলাফলটি একটি মন্তব্য হিসাবে দেখতে পাবেন:

isUndefined(stackoverflow); //false
isUndefined(stackoverflow.javascipt); //false
isUndefined(today); //true
isUndefined(self); //false
isUndefined(num); //false
isUndefined(list); //false
isUndefined(y); //false
isUndefined(stackoverflow.java); //true
isUndefined(stackoverflow.php); //true
isUndefined(stackoverflow && stackoverflow.css); //true

আপনি দেখতে পাচ্ছেন যে আমরা আমাদের কোডটিতে এরকম কিছু ব্যবহার করে যাচাই করতে পারি, উল্লিখিত হিসাবে আপনি কেবল typeofআপনার কোডটি ব্যবহার করতে পারেন , তবে আপনি যদি বারবার ব্যবহার করে থাকেন তবে কৌণিক নমুনার মতো একটি ফাংশন তৈরি করুন যা আমি ভাগ করি এবং এটি পুনরায় ব্যবহার করতে থাকি নিম্নলিখিত DRY কোড প্যাটার্ন

আরও একটি বিষয়, একটি বাস্তব অ্যাপ্লিকেশনটিতে কোনও সামগ্রীর সম্পত্তি যাচাই করার জন্য যা আপনি নিশ্চিত না যে এমনকি বস্তুটি রয়েছে কি না, পরীক্ষা করুন যে বস্তুটি আগে উপস্থিত রয়েছে কিনা।

আপনি যদি কোনও সামগ্রীতে কোনও সম্পত্তি পরীক্ষা করেন এবং অবজেক্টটি উপস্থিত না থেকে থাকে তবে একটি ত্রুটি ছুঁড়ে ফেলবে এবং পুরো অ্যাপ্লিকেশনটি চলমান বন্ধ করবে।

isUndefined(x.css);
VM808:2 Uncaught ReferenceError: x is not defined(…)

এত সহজ আপনি নীচের মত একটি বিবৃতি ভিতরে মোড়ানো করতে পারেন:

if(typeof x !== 'undefined') {
  //do something
}

যা কৌণিক 1.x তেও সংজ্ঞায়িত ...

function isDefined(value) {return typeof value !== 'undefined';}

আন্ডারস্কোরের মতো অন্যান্য জাভাস্ক্রিপ্ট ফ্রেমওয়ার্কগুলিতেও অনুরূপ সংজ্ঞায়িত চেক রয়েছে, তবে আমি typeofইতিমধ্যে যদি আপনি কোনও ফ্রেমওয়ার্ক ব্যবহার না করেন তবে আপনাকে ব্যবহার করার পরামর্শ দিচ্ছি ।

আমি এমডিএন থেকে এই বিভাগটিও যুক্ত করব যা টাইপফ, অপরিজ্ঞাত এবং শূন্য (0) সম্পর্কে দরকারী তথ্য পেয়েছে।

কঠোর সাম্যতা এবং অপরিজ্ঞাত
আপনি কোনও পরিবর্তনশীলের কোনও মান আছে কিনা তা নির্ধারণ করতে অপরিজ্ঞাত এবং কঠোর সাম্যতা এবং অসমতা অপারেটরগুলি ব্যবহার করতে পারেন। নিম্নলিখিত কোডে ভেরিয়েবল এক্স সংজ্ঞায়িত করা হয় নি, এবং if স্টেটমেন্টটি সত্য হিসাবে মূল্যায়ন করে।

var x;
if (x === undefined) {
   // these statements execute
}
else {
   // these statements do not execute
}

দ্রষ্টব্য: স্ট্যান্ডার্ড ইক্যুয়ালিটি অপারেটরের পরিবর্তে কঠোর সাম্য অপারেটরটি অবশ্যই এখানে ব্যবহার করা উচিত, কারণ x == অপরিবর্তিত এছাড়াও এক্স নাল কিনা তাও পরীক্ষা করে, যখন কঠোর সাম্যতা থাকে না। নাল অপরিজ্ঞাত সমতুল্য নয়। বিশদ জন্য তুলনা অপারেটর দেখুন।


টাইপ অফ অপারেটর এবং অপরিজ্ঞাত
বিকল্পভাবে, টাইপফ ব্যবহার করা যেতে পারে:

var x;
if (typeof x === 'undefined') {
   // these statements execute
}

টাইপফ ব্যবহার করার একটি কারণ হ'ল ভেরিয়েবলটি ঘোষণা না করা হলে এটি ত্রুটি ছুঁড়ে না ফেলে।

// x has not been declared before
if (typeof x === 'undefined') { // evaluates to true without errors
   // these statements execute
}

if (x === undefined) { // throws a ReferenceError

}

তবে এ জাতীয় কৌশল এড়ানো উচিত। জাভাস্ক্রিপ্ট হ'ল স্ট্যাটিক্যালি স্কোপড ল্যাঙ্গুয়েজ, সুতরাং কোনও ভেরিয়েবল ঘোষিত হয়েছে কিনা তা জেনেও এটি কোনও আবদ্ধ প্রসঙ্গে ঘোষণা করা হয়েছে কিনা তা দেখে পড়া যায়। একমাত্র ব্যতিক্রম বিশ্বব্যাপী সুযোগ, তবে বৈশ্বিক সুযোগটি বিশ্বব্যাপী অবজেক্টের সাথে আবদ্ধ, সুতরাং বৈশ্বিক প্রসঙ্গে বৈকল্পের অস্তিত্ব যাচাই করা যায় বৈশ্বিক অবজেক্টে কোনও সংস্থার অস্তিত্ব পরীক্ষা করে (অপারেটর ব্যবহার করে, এই ক্ষেত্রে).


অকার্যকর অপারেটর এবং অপরিজ্ঞাত

শূন্য অপারেটর একটি তৃতীয় বিকল্প।

var x;
if (x === void 0) {
   // these statements execute
}

// y has not been declared before
if (y === void 0) {
   // throws a ReferenceError (in contrast to `typeof`)
}

আরও> এখানে


13

' if (উইন্ডো.এক্স) {} ' ত্রুটি নিরাপদ

সম্ভবত আপনি চান if (window.x)। এক্সটি ঘোষিত না হলেও এই চেকটি নিরাপদ ( var x;) - ব্রাউজার কোনও ত্রুটি ছুঁড়ে না ফেলে।

উদাহরণ: আমি জানতে চাই যে আমার ব্রাউজারটি ইতিহাসের এপিআই সমর্থন করে কিনা

if (window.history) {
    history.call_some_function();
}

এটি কীভাবে কাজ করে:

উইন্ডো এমন একটি বস্তু যা এটির সদস্য হিসাবে সমস্ত বৈশ্বিক পরিবর্তনশীলকে ধারণ করে এবং অ-বিদ্যমান সদস্যকে অ্যাক্সেস করার চেষ্টা করা আইনী legal যদি এক্স ঘোষিত না হয় বা সেট না করা থাকে তবে অনির্ধারিতwindow.x ফেরত দেয় । (যদি) এটি মূল্যায়ন করে তখন অপরিজ্ঞাত মিথ্যা বাড়ে ।


তবে নোডে দৌড়ালে কী হবে? typeof history != 'undefined'আসলে উভয় সিস্টেমে কাজ করে।
স্টিজন ডি উইট

13

এটি পড়তে পেরে আমি অবাক হয়েছি আমি এটি দেখিনি। আমি একাধিক অ্যালগরিদম পেয়েছি যা এটির জন্য কাজ করবে।

কখনই সংজ্ঞায়িত হয়নি

যদি কোনও সামগ্রীর মান কখনই সংজ্ঞায়িত না হয় trueতবে এটি হিসাবে nullবা হিসাবে সংজ্ঞায়িত করা থাকলে এটি ফিরে আসতে বাধা দেবে undefined। মান হিসাবে যদি সেট করা সত্য হিসাবে প্রত্যাবর্তন করতে চান তবে এটি সহায়কundefined

if(obj.prop === void 0) console.log("The value has never been defined");

সংজ্ঞায়িত বা কখনও সংজ্ঞায়িত হিসাবে সংজ্ঞায়িত

যদি আপনি এটির trueমান হিসাবে সংজ্ঞায়িত মানগুলির undefinedবা কখনও সংজ্ঞায়িত ফলাফলগুলির ফলাফল না চান তবে আপনি কেবল ব্যবহার করতে পারেন=== undefined

if(obj.prop === undefined) console.log("The value is defined as undefined, or never defined");

মিথ্যা মান হিসাবে সংজ্ঞায়িত, অপরিজ্ঞাত, নাল, বা কখনই সংজ্ঞায়িত হয়নি।

সাধারণভাবে, মানুষ একটি আলগোরিদিম আমার জিজ্ঞাসা জিনিসটা যদি একটি মান পারেন falsy হয়, undefinedঅথবা null। নিম্নলিখিত কাজ করে।

if(obj.prop == false || obj.prop === null || obj.prop === undefined) {
    console.log("The value is falsy, null, or undefined");
}

4
আমি মনে করি আপনি শেষ উদাহরণটি প্রতিস্থাপন করতে পারবেনif (!obj.prop)
স্টিজন ডি উইট

@ স্টিজেডেভিট, আপনি পারবেন, আমি এটি লেখার সময় আমি বেশ অনভিজ্ঞ ছিলাম এবং আমার ইংরেজিটিও একইভাবে খারাপ বলে মনে হয়েছিল, তবুও, উত্তরে কোনও ভুল নেই
ট্র্যাভিস

3
var obj = {foo: undefined}; obj.foo === void 0-> true। কীভাবে এটি "কখনই সংজ্ঞায়িত হয় না undefined"? এটা ভুল.
প্যাট্রিক রবার্টস

পছন্দ করুন ফেব্রুয়ারী 2015 এ যখন আমি এই উত্তরটি লিখেছিলাম (ইএস 6 এর আগে) আমি যে প্রথম বিকল্পটির উল্লেখ করেছি তা সত্যই কার্যকর হয়েছিল, তবে এটি এখন পুরানো।
ট্র্যাভিস


10

void 0তীক্ষ্ণতার জন্য সাথে তুলনা করুন ।

if (foo !== void 0)

এটি হিসাবে ভার্জোজ না if (typeof foo !== 'undefined')


3
যদি fooঅঘোষিত থাকে তবে এটি একটি রেফারেন্সআরার ফেলে দেবে ।
daniel1426

1
@ ড্যানিয়েল ১৪২ So: সুতরাং যদি আপনার কোডটিতে কোনও ত্রুটি থাকে তবে আপনি এটিকে ঠিক করার পরিবর্তে এটি আড়াল করতে চান? আইএমও, দুর্দান্ত পদ্ধতির নয়।

এটি ত্রুটিগুলি আড়াল করতে ব্যবহৃত হয় না। পলিফিলগুলি সংজ্ঞায়িত করার জন্য এটি পরিবেশের বৈশিষ্ট্যগুলি সনাক্ত করার সাধারণ উপায়। উদাহরণস্বরূপ: যদি (প্রতিশ্রুতি টাইপ করুন === 'অপরিজ্ঞাত') {/ * প্রতিশ্রুতি * / def সংজ্ঞায়িত করুন
অপরিজ্ঞাত def

10

সমাধানটি ভুল। জাভাস্ক্রিপ্টে,

null == undefined

সত্য ফিরে আসবে, কারণ তারা উভয়ই একটি বুলিয়ান "কাস্ট করা" এবং মিথ্যা। সঠিক উপায় চেক করা হবে

if (something === undefined)

যা পরিচয় অপারেটর ...


3
পরিষ্কার হওয়ার জন্য, ===টাইপ করুন সাম্যতা + (আদিম সমতা | বস্তুর পরিচয়), যেখানে আদিমগুলিতে স্ট্রিং রয়েছে। আমি মনে করি বেশিরভাগ লোক 'abab'.slice(0,2) === 'abab'.slice(2)যদি ===পরিচয় অপারেটর হিসাবে বিবেচনা করে তবে তারা অদম্য বিবেচনা করে।
ক্লেক

1
ভুল। ভেরিয়েবলটি তৈরি না করা থাকলে এটি একটি ত্রুটি ফেলে দেয়। ভোট দেওয়া উচিত নয়। পরিবর্তে টাইপফ ব্যবহার করুন।
সাইমন পূর্ব

10

আপনি নিম্নলিখিত কোডটি ব্যবহার করে পাথের সাথে সমস্ত অপরিজ্ঞাত একটি অ্যারে পেতে পারেন।

 function getAllUndefined(object) {

        function convertPath(arr, key) {
            var path = "";
            for (var i = 1; i < arr.length; i++) {

                path += arr[i] + "->";
            }
            path += key;
            return path;
        }


        var stack = [];
        var saveUndefined= [];
        function getUndefiend(obj, key) {

            var t = typeof obj;
            switch (t) {
                case "object":
                    if (t === null) {
                        return false;
                    }
                    break;
                case "string":
                case "number":
                case "boolean":
                case "null":
                    return false;
                default:
                    return true;
            }
            stack.push(key);
            for (k in obj) {
                if (obj.hasOwnProperty(k)) {
                    v = getUndefiend(obj[k], k);
                    if (v) {
                        saveUndefined.push(convertPath(stack, k));
                    }
                }
            }
            stack.pop();

        }

        getUndefiend({
            "": object
        }, "");
        return saveUndefined;
    }

jsFizz লিঙ্ক


যদিও এটি আপনার কোডের মেয়াদকে প্রভাবিত করবে না, আপনি টাইপো পেয়েছেন: getUndefiendহওয়া উচিত getUndefined
অিক্টোফায়

8

এখানে আমার অবস্থা:

আমি একটি রেস্ট কলের ফলাফল ব্যবহার করছি। ফলাফলটি JSON থেকে একটি জাভাস্ক্রিপ্ট অবজেক্টে পার্স করা উচিত।

আমার রক্ষার জন্য একটি ত্রুটি রয়েছে। যদি ব্যবহারকারীরা আরগগুলি ভুল হিসাবে উল্লেখ করে থাকে তবে যদি বাকি কলগুলিতে আরোগুলি ভুল হয় তবে বাকী কলটি মূলত খালি ফিরে আসে।

আমাকে এর বিরুদ্ধে রক্ষা করতে এই পোস্টটি ব্যবহার করার সময়, আমি এটি চেষ্টা করেছি।

if( typeof restResult.data[0] === "undefined" ) { throw  "Some error"; }

আমার পরিস্থিতির জন্য, যদি restSesult.data [0] === "অবজেক্ট" হয় তবে আমি বাকী সদস্যদের নিরাপদে পরিদর্শন শুরু করতে পারি। অপরিবর্তিত থাকলে উপরে হিসাবে ত্রুটি নিক্ষেপ করুন।

আমি যা বলছি তা হ'ল আমার পরিস্থিতির জন্য, এই পোস্টে উপরের সমস্ত পরামর্শ কার্যকর হয়নি। আমি বলছি না আমি ঠিক আছি এবং সবাই ভুল। আমি মোটেও জাভাস্ক্রিপ্টের মাস্টার নই, তবে আশা করি এটি কারও সাহায্য করবে।


আপনার typeofগার্ডটি আসলে এমন কোনও কিছু থেকে রক্ষা করে না যা সরাসরি তুলনা করতে পারে না। যদি restResultঅপরিজ্ঞাত বা অঘোষিত হয় তবে এটি এখনও ছুঁড়ে ফেলবে।

আপনার ক্ষেত্রে আপনি আরও সহজেই পরীক্ষা করতে পারবেন অ্যারেটি খালি আছে কিনা:if(!restResult.data.length) { throw "Some error"; }
হেডব্যাঙ্ক

8

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

var a = obj.prop || defaultValue;

এটি উপযুক্ত যদি আপনার কোনও ফাংশন থাকে যা একটি অতিরিক্ত কনফিগার সম্পত্তি গ্রহণ করে:

var yourFunction = function(config){

   this.config = config || {};
   this.yourConfigValue = config.yourConfigValue || 1;
   console.log(this.yourConfigValue);

}

এখন কার্যকর হচ্ছে

yourFunction({yourConfigValue:2});
//=> 2

yourFunction();
//=> 1

yourFunction({otherProperty:5});
//=> 1

7

সমস্ত উত্তর অসম্পূর্ণ। এটি কোনও সম্পত্তি 'অপরিজ্ঞাত হিসাবে সংজ্ঞায়িত' আছে তা জানার সঠিক উপায়:

var hasUndefinedProperty = function hasUndefinedProperty(obj, prop){
  return ((prop in obj) && (typeof obj[prop] == 'undefined')) ;
} ;

উদাহরণ:

var a = { b : 1, e : null } ;
a.c = a.d ;

hasUndefinedProperty(a, 'b') ; // false : b is defined as 1
hasUndefinedProperty(a, 'c') ; // true : c is defined as undefined
hasUndefinedProperty(a, 'd') ; // false : d is undefined
hasUndefinedProperty(a, 'e') ; // false : e is defined as null

// And now...
delete a.c ;
hasUndefinedProperty(a, 'c') ; // false : c is undefined

খুব খারাপ যে এটি সঠিক উত্তরটি ভুল উত্তরগুলিতে দাফন করা হয়েছে> _ <

সুতরাং, যে কেউ পাশ দিয়ে যাবেন, আমি আপনাকে নিখরচায় অপরিবর্তিত দিবো !!

var undefined ; undefined ; // undefined
({}).a ;                    // undefined
[].a ;                      // undefined
''.a ;                      // undefined
(function(){}()) ;          // undefined
void(0) ;                   // undefined
eval() ;                    // undefined
1..a ;                      // undefined
/a/.a ;                     // undefined
(true).a ;                  // undefined

7

মন্তব্যের মধ্যে দিয়ে যাচ্ছেন, যারা উভয়ই যাচাই করতে চান তাদের জন্য এটি কি সংজ্ঞা বা এর মানটি শূন্য:

//Just in JavaScript
var s; // Undefined
if (typeof s == "undefined" || s === null){
    alert('either it is undefined or value is null')
}

আপনি যদি jQuery লাইব্রেরি ব্যবহার করছেন তবে jQuery.isEmptyObject()উভয় ক্ষেত্রেই যথেষ্ট হবে,

var s; // Undefined
jQuery.isEmptyObject(s); // Will return true;

s = null; // Defined as null
jQuery.isEmptyObject(s); // Will return true;

//Usage
if (jQuery.isEmptyObject(s)) {
    alert('Either variable:s is undefined or its value is null');
} else {
     alert('variable:s has value ' + s);
}

s = 'something'; // Defined with some value
jQuery.isEmptyObject(s); // Will return false;

jQuery বিভিন্ন জাভাস্ক্রিপ্ট এপিআই-এর সাথে যে কোনও ক্রস-ব্রাউজারের সামঞ্জস্যতার সমস্যাগুলির যত্ন নেবে।
হেনরি হেলিন

7

আপনি যদি কৌণিক ব্যবহার করছেন:

angular.isUndefined(obj)
angular.isUndefined(obj.prop)

Underscore.js:

_.isUndefined(obj) 
_.isUndefined(obj.prop) 

2
আমি কীভাবে 1পরিবর্তনশীল যুক্ত করব x? আমার কি অ্যান্ডস্কোর বা jQuery দরকার? (আশ্চর্যজনক যে লোকেরা এমনকি typeofচেকের মতো প্রাথমিক প্রাথমিক ক্রিয়াকলাপগুলির জন্য গ্রন্থাগারগুলি ব্যবহার করবে )
স্টিজন ডি উইট

6

if (this.variable)এটি সংজ্ঞায়িত হলে আমি পরীক্ষার জন্য ব্যবহার করি । সহজ if (variable), উপরে প্রস্তাবিত , আমার জন্য ব্যর্থ। দেখা যাচ্ছে যে এটি তখনই কার্যকর হয় যখন ভেরিয়েবল কোনও বস্তুর ক্ষেত্র হয়, obj.someFieldএটি অভিধানে সংজ্ঞায়িত হয়েছে কিনা তা পরীক্ষা করতে। তবে আমরা ব্যবহার করতে পারি thisবা windowঅভিধানের অবজেক্ট হিসাবে যেহেতু কোনও ভেরিয়েবল বর্তমান উইন্ডোতে একটি ক্ষেত্র, কারণ আমি এটি বুঝতে পারি। সুতরাং এখানে একটি পরীক্ষা

if (this.abc) alert("defined"); else alert("undefined");

abc = "abc";
if (this.abc) alert("defined"); else alert("undefined");

এটি প্রথমে সনাক্ত করে যে পরিবর্তনশীল abcঅপরিজ্ঞাত এবং এটি আরম্ভের পরে সংজ্ঞায়িত করা হয়।


5

যারা অদ্ভুত উত্তর আশা করে তাদের জন্য আমি এখানে তিনটি উপায় সরবরাহ করেছি:

function isUndefined1(val) {
    try {
        val.a;
    } catch (e) {
        return /undefined/.test(e.message);
    }
    return false;
}
function isUndefined2(val) {
    return !val && val+'' === 'undefined';
}
function isUndefined3(val) {
    const defaultVal={};
    return ((input=defaultVal)=>input===defaultVal)(val);
}
function test(func){
    console.group(`test start :`+func.name);
    console.log(func(undefined));
    console.log(func(null));
    console.log(func(1));
    console.log(func("1"));
    console.log(func(0));
    console.log(func({}));
    console.log(func(function () { }));
    console.groupEnd();
}
test(isUndefined1);
test(isUndefined2);
test(isUndefined3);

isUndefined1:

ইনপুট মানটির সম্পত্তি পাওয়ার চেষ্টা করুন, ত্রুটি বার্তাটি উপস্থিত থাকলে তা পরীক্ষা করুন। যদি ইনপুট মানটি সংজ্ঞায়িত করা হয় তবে ত্রুটি বার্তাটি হবে আনকচড টাইপ এরিয়ার অপরিজ্ঞাত বৈশিষ্ট্য 'বি' পড়তে পারে না

isUndefined2:

সাথে তুলনা করতে ইনপুট মানকে স্ট্রিংয়ে রূপান্তর করুন "undefined" এবং এটির নেতিবাচক মান নিশ্চিত করুন।

isUndefined3:

জেএসগুলিতে, ইনপুট মানটি হুবহু যখন alচ্ছিক প্যারামিটার কাজ করে undefined


4
function isUnset(inp) {
  return (typeof inp === 'undefined')
}

ভেরিয়েবল সেট করা থাকলে মিথ্যা এবং অপরিজ্ঞাত থাকলে সত্য হয়।

তারপরে ব্যবহার করুন:

if (isUnset(var)) {
  // initialize variable here
}

5
না। এটা করবেন না। আপনি কোনও কার্যক্রমে কোনও পরীক্ষাকে অর্থপূর্ণভাবে গুটিয়ে রাখতে পারবেন না তা প্রমাণ করতে এটি খুব সাধারণ পরীক্ষা নেয় typeof। আশ্চর্যজনক যে 4 জন এটি আপডাক্ট করেছেন। -1।
স্টিজন ডি উইট

4

undefinedভেরিয়েবলটি সুরক্ষিত করার জন্য আমি আপনাকে এমন কিছু দেখাতে চাই :

Object.defineProperty(window, 'undefined', {});

এটি কাউকে window.undefinedমান পরিবর্তন করতে বারণ করে তাই সেই ভেরিয়েবলের উপর ভিত্তি করে কোডটি ধ্বংস করে। যদি ব্যবহার করা "use strict"হয় তবে এর মান পরিবর্তন করার চেষ্টা করা যে কোনও কিছুই ত্রুটিযুক্ত হয়ে যাবে, অন্যথায় এটি নীরবে উপেক্ষা করা হবে।


4

আপনি প্রক্সিও ব্যবহার করতে পারেন, এটি নেস্টেড কলগুলির সাথে কাজ করবে, তবে একটি অতিরিক্ত চেকের প্রয়োজন হবে:

function resolveUnknownProps(obj, resolveKey) {
  const handler = {
    get(target, key) {
      if (
        target[key] !== null &&
        typeof target[key] === 'object'
      ) {
        return resolveUnknownProps(target[key], resolveKey);
      } else if (!target[key]) {
        return resolveUnknownProps({ [resolveKey]: true }, resolveKey);
      }

      return target[key];
    },
  };

  return new Proxy(obj, handler);
}

const user = {}

console.log(resolveUnknownProps(user, 'isUndefined').personalInfo.name.something.else); // { isUndefined: true }

সুতরাং আপনি এটি ব্যবহার করুন:

const { isUndefined } = resolveUnknownProps(user, 'isUndefined').personalInfo.name.something.else;
if (!isUndefined) {
  // do someting
}

4

লড্যাশ.জেএস থেকে

var undefined;
function isUndefined(value) {
  return value === undefined;
}

এটি নামের একটি LOCAL ভেরিয়েবল তৈরি করে undefinedযা ডিফল্ট মান দিয়ে শুরু হয় - আসল undefined, তারপরে valueভেরিয়েবলের সাথে তুলনা করে undefined


আপডেট 9/9/2019

আমি দেখতে পেয়েছি যে এর প্রয়োগটি আপডেট হয়েছে ash দেখুন আমার সমস্যা এবং কোড

বুলেট-প্রুফ হতে, কেবল ব্যবহার করুন:

function isUndefined(value) {
  return value === void 0;
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.