জাভাস্ক্রিপ্টে কোনও বস্তুর সম্পত্তি কিনা তা যাচাই করার সর্বোত্তম উপায় কী undefined
?
জাভাস্ক্রিপ্টে কোনও বস্তুর সম্পত্তি কিনা তা যাচাই করার সর্বোত্তম উপায় কী undefined
?
উত্তর:
কোনও সম্পত্তির মান বিশেষ মান কিনা তা যাচাই করার স্বাভাবিক উপায় 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`");
}
obj !== undefined
এখনই ব্যবহার করতে পারেন । undefined
পরিবর্তনীয় হতে ব্যবহৃত, মত undefined = 1234
কি আকর্ষণীয় ফলাফল হতে পারে। তবে ইকমাস্ক্রিপ্ট 5 এর পরে এটি আর লেখার যোগ্য নয়, তাই আমরা সহজ সংস্করণটি ব্যবহার করতে পারি। কোড্রেডেবিলিটি.এইচও- টো
আমি বিশ্বাস করি এই বিষয়টির জন্য বেশ কয়েকটি ভুল উত্তর রয়েছে। সাধারণ বিশ্বাসের বিপরীতে, "অপরিবর্তিত" জাভাস্ক্রিপ্টে কোনও কীওয়ার্ড নয় এবং বাস্তবে এটির জন্য একটি মূল্য নির্ধারিত থাকতে পারে।
এই পরীক্ষাটি করার সবচেয়ে শক্তিশালী উপায় হ'ল:
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
মাইওয়ারটি অঘোষিত অবস্থায় রয়েছে এমন একটি ত্রুটি বাড়িয়ে তুলবে।
=== undefined
বিভ্রডিং ব্যবহার না করার জন্য আমি এখানে প্রথম ন্যায়সঙ্গততা পেয়েছি । হ্যাঁ, আপনি দায়িত্ব অর্পণ করতে পারেন undefined
, তবে এটি করার কোনও বৈধ কারণ নেই এবং এটি অনুমানযোগ্য যে এটি করা আপনার কোডটি ভঙ্গ করতে পারে। সি তে আপনি #define true false
এবং পাইথনে আপনি নির্ধারিত করতে পারেন True
এবং False
, কিন্তু লোকেরা এই ভাষায় তাদের কোডটি এমনভাবে ডিজাইন করার প্রয়োজন বোধ করে না যাতে তারা নিজের ইচ্ছাকৃতভাবে নিজের পরিবেশকে অন্য কোথাও কোথাও নাশকতার সম্ভাবনা থেকে রক্ষা করতে পারে code । কেন undefined
এখানে বিবেচনা করা এমনকি মূল্য নির্ধারণের সম্ভাবনা ?
void 0
মানটি করতে পারেন যা undefined
নির্দেশ করে। সুতরাং আপনি করতে পারেন if (myVar === void 0)
। 0
বিশেষ না হয় তবে আপনি আক্ষরিক কোন অভিব্যক্তি লাগাতে পারেন।
undefined
। MDN: অপরিবর্তিত
এখানে অন্যান্য অনেক উত্তর দ্বারা তীব্রভাবে সুপারিশ করা সত্ত্বেও, 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
বোঝায় undefined
। void 0
অন্যথায় বিকল্প ।
undefined
লুকিয়ে রেখে তার নিজস্ব সংজ্ঞা দিতে পারে । যা বেশিরভাগ ব্যবহারিক উদ্দেশ্যে এটি ওভাররাইট করার মতোই প্রভাব ফেলে।
void 0
কিন্তু আবার এর সাথে তুলনা করতে ব্যবহার করতে পারেন - এটি নির্বোধ এবং অতিমাত্রায়।
typeof something === "undefined")
কোডে দেখতে থামাতে চাই
void 0
জন্য (একবারের জন্য) খাটো এবং নিরাপদ উভয়ই ! এটি আমার বইয়ের একটি জয়।
জাভাস্ক্রিপ্ট রয়েছে নাল আরো একীন করে নাও undefined । তাদের বিভিন্ন অর্থ রয়েছে।
মারিজন হ্যাভারবেকে তার নিখরচায়, অনলাইন বই " এলওভারেন্ট জাভাস্ক্রিপ্ট " (জোর দেওয়া খনি) -এ বলেছেন:
একটি অনুরূপ মানও রয়েছে, নাল, যার অর্থ 'এই মানটি সংজ্ঞায়িত করা হয় তবে এর কোনও মান থাকে না'। অপরিজ্ঞাত এবং নাল মধ্যে অর্থ পার্থক্য বেশিরভাগই একাডেমিক এবং সাধারণত খুব আকর্ষণীয় হয় না। ব্যবহারিক প্রোগ্রামগুলিতে, প্রায়শই কোনও কিছুর 'মান আছে' তা যাচাই করা প্রয়োজন। এই ক্ষেত্রে, কিছু == অপরিজ্ঞাত অভিব্যক্তি ব্যবহার করা যেতে পারে, কারণ, যদিও তারা ঠিক একই মান নয়, নাল == অপরিবর্তিত সত্যটি উত্পাদন করবে।
সুতরাং, আমি অনুমান করি যে কোনও কিছুর পূর্বনির্ধারিত ছিল কিনা তা যাচাই করার সর্বোত্তম উপায় হ'ল:
if (something == undefined)
আশাকরি এটা সাহায্য করবে!
সম্পাদনা: আপনার সম্পাদনার প্রতিক্রিয়া হিসাবে, অবজেক্ট বৈশিষ্ট্যগুলি একইভাবে কাজ করা উচিত।
var person = {
name: "John",
age: 28,
sex: "male"
};
alert(person.name); // "John"
alert(person.fakeVariable); // undefined
undefined
কেবলমাত্র একটি পরিবর্তনশীল যা ব্যবহারকারীর দ্বারা পুনরায় বরাদ্দ করা যেতে পারে: লেখার undefined = 'a';
ফলে আপনার কোডটি আপনাকে যা মনে করে তা করবে না। ব্যবহার typeof
করা আরও ভাল এবং ভেরিয়েবলগুলির জন্যও কাজ করে (কেবলমাত্র বৈশিষ্ট্য নয়) যা ঘোষিত হয়নি।
এর অর্থ কী: "অপরিজ্ঞাত অবজেক্ট সম্পত্তি" ?
আসলে এটি দুটি ভিন্ন জিনিস বোঝাতে পারে! প্রথমত, এর অর্থ এমন সম্পত্তির অর্থ হতে পারে যা কখনও অবজেক্টে সংজ্ঞায়িত হয় নি এবং দ্বিতীয়ত, এর অর্থ এমন সম্পত্তি হতে পারে যার একটি অপরিজ্ঞাত মান রয়েছে । আসুন এই কোডটি দেখুন:
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.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
:
undefined
এর মিনিটস obj.prop === undefined
:
undefined
পুরানো ব্রাউজারগুলিতে ওভাররাইড করা যেতে পারেএর ফলস typeof obj.prop == 'undefined'
:
এর মিনিটস typeof obj.prop == 'undefined'
:
'undefned'
( ভুল বানান ) এখানে কেবল একটি স্ট্রিং ধ্রুবক, তাই জাভা স্ক্রিপ্ট ইঞ্জিন আপনাকে সাহায্য করতে পারে না যদি আপনি এটির মতো বানান বানান যেমন আমি ঠিক করেছি।Node.js বিশ্বব্যাপী পরিবর্তনশীল সমর্থন undefined
যেমন global.undefined
(এটা এছাড়াও 'বিশ্বব্যাপী' উপসর্গ ছাড়া ব্যবহার করা যেতে পারে)। সার্ভার-সাইড জাভাস্ক্রিপ্টের অন্যান্য বাস্তবায়ন সম্পর্কে আমি জানি না।
undefined
সদস্য হিসাবে কিছুই বলে না global
। এছাড়াও তন্ন তন্ন console.log(global);
না for (var key in global) { ... }
প্রদর্শন করা হয় না undefined একজন সদস্য হিসেবে বিশ্বব্যাপী । তবে পরীক্ষার মতো 'undefined' in global
বিপরীত দেখান।
[[Enumerable]]
মিথ্যা বলেছে :-)
Minuses of typeof obj.prop == 'undefined'
, এই হিসাবে লিখে এড়ানো যেতে পারে typeof obj.prop == typeof undefined
। এটি একটি খুব সুন্দর প্রতিসাম্য দেয়।
obj.prop === undefined
।
if ('foo' in o
) ... আপনার উত্তরটি সত্যই এখানে প্রথম সঠিক উত্তর। খুব সুন্দর অন্য সবাই কেবল এই বাক্যটির উত্তর দেয়।
ইস্যুটি তিনটি ক্ষেত্রে উত্থিত:
undefined
।undefined
।এটি আমাদের এমন কিছু বলে যা আমি গুরুত্বপূর্ণ বলে মনে করি:
অপরিজ্ঞাত সদস্য এবং একটি সংজ্ঞায়িত মান সহ একটি সংজ্ঞায়িত সদস্যের মধ্যে পার্থক্য রয়েছে।
তবে দুঃখজনকভাবে 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); }
তবে যেমনটি উল্লেখ করা হয়েছে এটি হুবহু এক নয় (তবে আমার প্রয়োজনের জন্য যথেষ্ট ভাল।
if (!("x" in blob)) {}
চারপাশে বন্ধনী দিয়ে বলতে হবে, কারণ! অপারেটরের 'ইন' এর চেয়ে বেশি অগ্রাধিকার রয়েছে। আশা করি যে কাউকে সাহায্য করবে।
a = {b: undefined}
; তারপর typeof a.b === typeof a.c === 'undefined'
কিন্তু 'b' in a
এবং !('c' in a)
।
{ x : undefined }
বা কমপক্ষে এটিকে টেবিলের (২) এর অন্য বিকল্প হিসাবে যুক্ত করব - সেই বিন্দুটি (২.) উপলব্ধি করার জন্য আমাকে কিছু মুহুর্তের জন্য ভাবতে হয়েছিল undefined
(যদিও ) মূল্যায়ন করে (যদিও ) আপনি পরে এটি উল্লেখ)।
if ( typeof( something ) == "undefined")
এটি আমার পক্ষে কাজ করেছিল যখন অন্যরা তা করেনি।
typeof (something == "undefined")
।
(typeof something) === "undefined"
।
আমি নিশ্চিত নই যে এর ===
সাথে ব্যবহারের উত্সটি 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
==
এখনও প্রয়োজন অন্তত একটি টাইপ চেক - অনুবাদক তাদের টাইপ প্রথম জেনে দুই operands তুলনা করতে পারবে না।
==
===
:) এর চেয়ে কম চরিত্রটি হল
সম্পর্কিত প্রশ্ন থেকে আমার উত্তর ক্রসপোস্টিং জাভাস্ক্রিপ্টে "অপরিজ্ঞাত" কীভাবে চেক করবেন?
এই প্রশ্নের নির্দিষ্ট, সঙ্গে পরীক্ষার বিষয় দেখতে 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
যদি তুমি করো
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)
আমি দেখিনি (আশা করি আমি এটি মিস করিনি) যে কেউ সম্পত্তিটির আগে বস্তুটি পরীক্ষা করছে। সুতরাং, এটি সবচেয়ে সংক্ষিপ্ত এবং কার্যকর (যদিও সর্বাধিক পরিষ্কার নয়):
if (obj && obj.prop) {
// Do something;
}
যদি আপত্তি বা অবজেক্ট.প্রপ অপরিজ্ঞাত, নাল, বা "মিথ্যা" থাকে তবে যদি বিবৃতিটি কোড ব্লকটি কার্যকর করে না। এই সাধারণত (জাভাস্ক্রিপ্ট মধ্যে) সবচেয়ে কোড ব্লক বিবৃতি কাঙ্ক্ষিত আচরণ।
var x = obj && obj.prop || 'default';
নিবন্ধে নাল এবং জাভাস্ক্রিপ্ট মধ্যে অনির্দিষ্ট নরক এক্সপ্লোরিং আমি পড়তে যে ভালো অবকাঠামো Underscore.js এই ফাংশন ব্যবহার করুন:
function isUndefined(obj){
return obj === void 0;
}
void 0
এটি কেবল লেখার একটি স্বল্প উপায় undefined
(যেহেতু কোনও অভিব্যক্তি ফিরে আসার পরে তা বাতিল হয়), এটি 3 চার্টার সংরক্ষণ করে। এটিও করতে পারে var a; return obj === a;
তবে এটি আরও একটি চরিত্র। :-)
void
একটি সংরক্ষিত শব্দ, যেখানে ডিফল্ট হিসাবে সমান undefined
হয় না , আপনি যেমন একটি মান নির্ধারণ করতে পারেন । undefined
void 0
undefined
undefined = 1234
isUndefined(obj)
: 16 অক্ষর। obj === void 0
: 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`)
}
আরও> এখানে
সম্ভবত আপনি চান if (window.x)
। এক্সটি ঘোষিত না হলেও এই চেকটি নিরাপদ ( var x;
) - ব্রাউজার কোনও ত্রুটি ছুঁড়ে না ফেলে।
if (window.history) {
history.call_some_function();
}
উইন্ডো এমন একটি বস্তু যা এটির সদস্য হিসাবে সমস্ত বৈশ্বিক পরিবর্তনশীলকে ধারণ করে এবং অ-বিদ্যমান সদস্যকে অ্যাক্সেস করার চেষ্টা করা আইনী legal যদি এক্স ঘোষিত না হয় বা সেট না করা থাকে তবে অনির্ধারিতwindow.x
ফেরত দেয় । (যদি) এটি মূল্যায়ন করে তখন অপরিজ্ঞাত মিথ্যা বাড়ে ।
typeof history != 'undefined'
আসলে উভয় সিস্টেমে কাজ করে।
এটি পড়তে পেরে আমি অবাক হয়েছি আমি এটি দেখিনি। আমি একাধিক অ্যালগরিদম পেয়েছি যা এটির জন্য কাজ করবে।
যদি কোনও সামগ্রীর মান কখনই সংজ্ঞায়িত না হয় 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");
}
if (!obj.prop)
var obj = {foo: undefined}; obj.foo === void 0
-> true
। কীভাবে এটি "কখনই সংজ্ঞায়িত হয় না undefined
"? এটা ভুল.
void 0
তীক্ষ্ণতার জন্য সাথে তুলনা করুন ।
if (foo !== void 0)
এটি হিসাবে ভার্জোজ না if (typeof foo !== 'undefined')
foo
অঘোষিত থাকে তবে এটি একটি রেফারেন্সআরার ফেলে দেবে ।
সমাধানটি ভুল। জাভাস্ক্রিপ্টে,
null == undefined
সত্য ফিরে আসবে, কারণ তারা উভয়ই একটি বুলিয়ান "কাস্ট করা" এবং মিথ্যা। সঠিক উপায় চেক করা হবে
if (something === undefined)
যা পরিচয় অপারেটর ...
===
টাইপ করুন সাম্যতা + (আদিম সমতা | বস্তুর পরিচয়), যেখানে আদিমগুলিতে স্ট্রিং রয়েছে। আমি মনে করি বেশিরভাগ লোক 'abab'.slice(0,2) === 'abab'.slice(2)
যদি ===
পরিচয় অপারেটর হিসাবে বিবেচনা করে তবে তারা অদম্য বিবেচনা করে।
আপনি নিম্নলিখিত কোডটি ব্যবহার করে পাথের সাথে সমস্ত অপরিজ্ঞাত একটি অ্যারে পেতে পারেন।
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
।
এখানে আমার অবস্থা:
আমি একটি রেস্ট কলের ফলাফল ব্যবহার করছি। ফলাফলটি JSON থেকে একটি জাভাস্ক্রিপ্ট অবজেক্টে পার্স করা উচিত।
আমার রক্ষার জন্য একটি ত্রুটি রয়েছে। যদি ব্যবহারকারীরা আরগগুলি ভুল হিসাবে উল্লেখ করে থাকে তবে যদি বাকি কলগুলিতে আরোগুলি ভুল হয় তবে বাকী কলটি মূলত খালি ফিরে আসে।
আমাকে এর বিরুদ্ধে রক্ষা করতে এই পোস্টটি ব্যবহার করার সময়, আমি এটি চেষ্টা করেছি।
if( typeof restResult.data[0] === "undefined" ) { throw "Some error"; }
আমার পরিস্থিতির জন্য, যদি restSesult.data [0] === "অবজেক্ট" হয় তবে আমি বাকী সদস্যদের নিরাপদে পরিদর্শন শুরু করতে পারি। অপরিবর্তিত থাকলে উপরে হিসাবে ত্রুটি নিক্ষেপ করুন।
আমি যা বলছি তা হ'ল আমার পরিস্থিতির জন্য, এই পোস্টে উপরের সমস্ত পরামর্শ কার্যকর হয়নি। আমি বলছি না আমি ঠিক আছি এবং সবাই ভুল। আমি মোটেও জাভাস্ক্রিপ্টের মাস্টার নই, তবে আশা করি এটি কারও সাহায্য করবে।
typeof
গার্ডটি আসলে এমন কোনও কিছু থেকে রক্ষা করে না যা সরাসরি তুলনা করতে পারে না। যদি restResult
অপরিজ্ঞাত বা অঘোষিত হয় তবে এটি এখনও ছুঁড়ে ফেলবে।
if(!restResult.data.length) { throw "Some error"; }
কোনও নতুন ভেরিয়েবলের জন্য একটি সংজ্ঞায়িত সম্পত্তি নির্ধারিত করার জন্য একটি দুর্দান্ত ও মার্জিত উপায় আছে বা যদি এটি অপরিবর্তিত থাকে তবে ফ্যালব্যাক হিসাবে এটির জন্য একটি ডিফল্ট মান নির্ধারণ করে।
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
সমস্ত উত্তর অসম্পূর্ণ। এটি কোনও সম্পত্তি 'অপরিজ্ঞাত হিসাবে সংজ্ঞায়িত' আছে তা জানার সঠিক উপায়:
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
মন্তব্যের মধ্যে দিয়ে যাচ্ছেন, যারা উভয়ই যাচাই করতে চান তাদের জন্য এটি কি সংজ্ঞা বা এর মানটি শূন্য:
//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;
আপনি যদি কৌণিক ব্যবহার করছেন:
angular.isUndefined(obj)
angular.isUndefined(obj.prop)
Underscore.js:
_.isUndefined(obj)
_.isUndefined(obj.prop)
1
পরিবর্তনশীল যুক্ত করব x
? আমার কি অ্যান্ডস্কোর বা jQuery দরকার? (আশ্চর্যজনক যে লোকেরা এমনকি typeof
চেকের মতো প্রাথমিক প্রাথমিক ক্রিয়াকলাপগুলির জন্য গ্রন্থাগারগুলি ব্যবহার করবে )
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
অপরিজ্ঞাত এবং এটি আরম্ভের পরে সংজ্ঞায়িত করা হয়।
যারা অদ্ভুত উত্তর আশা করে তাদের জন্য আমি এখানে তিনটি উপায় সরবরাহ করেছি:
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);
ইনপুট মানটির সম্পত্তি পাওয়ার চেষ্টা করুন, ত্রুটি বার্তাটি উপস্থিত থাকলে তা পরীক্ষা করুন। যদি ইনপুট মানটি সংজ্ঞায়িত করা হয় তবে ত্রুটি বার্তাটি হবে আনকচড টাইপ এরিয়ার অপরিজ্ঞাত বৈশিষ্ট্য 'বি' পড়তে পারে না
সাথে তুলনা করতে ইনপুট মানকে স্ট্রিংয়ে রূপান্তর করুন "undefined"
এবং এটির নেতিবাচক মান নিশ্চিত করুন।
জেএসগুলিতে, ইনপুট মানটি হুবহু যখন alচ্ছিক প্যারামিটার কাজ করে undefined
।
function isUnset(inp) {
return (typeof inp === 'undefined')
}
ভেরিয়েবল সেট করা থাকলে মিথ্যা এবং অপরিজ্ঞাত থাকলে সত্য হয়।
তারপরে ব্যবহার করুন:
if (isUnset(var)) {
// initialize variable here
}
typeof
। আশ্চর্যজনক যে 4 জন এটি আপডাক্ট করেছেন। -1।
undefined
ভেরিয়েবলটি সুরক্ষিত করার জন্য আমি আপনাকে এমন কিছু দেখাতে চাই :
Object.defineProperty(window, 'undefined', {});
এটি কাউকে window.undefined
মান পরিবর্তন করতে বারণ করে তাই সেই ভেরিয়েবলের উপর ভিত্তি করে কোডটি ধ্বংস করে। যদি ব্যবহার করা "use strict"
হয় তবে এর মান পরিবর্তন করার চেষ্টা করা যে কোনও কিছুই ত্রুটিযুক্ত হয়ে যাবে, অন্যথায় এটি নীরবে উপেক্ষা করা হবে।
আপনি প্রক্সিও ব্যবহার করতে পারেন, এটি নেস্টেড কলগুলির সাথে কাজ করবে, তবে একটি অতিরিক্ত চেকের প্রয়োজন হবে:
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
}
লড্যাশ.জেএস থেকে
var undefined;
function isUndefined(value) {
return value === undefined;
}
এটি নামের একটি LOCAL ভেরিয়েবল তৈরি করে undefined
যা ডিফল্ট মান দিয়ে শুরু হয় - আসল undefined
, তারপরে value
ভেরিয়েবলের সাথে তুলনা করে undefined
।
আপডেট 9/9/2019
আমি দেখতে পেয়েছি যে এর প্রয়োগটি আপডেট হয়েছে ash দেখুন আমার সমস্যা এবং কোড ।
বুলেট-প্রুফ হতে, কেবল ব্যবহার করুন:
function isUndefined(value) {
return value === void 0;
}