ভেরিয়েবল বিদ্যমান কিনা তা জাভাস্ক্রিপ্ট চেক (সংজ্ঞায়িত / আরম্ভীকৃত)


1762

কোনও ভেরিয়েবল সূচনা করা হয়েছে কিনা তা পরীক্ষা করার কোন পদ্ধতিটি আরও ভাল / সঠিক? (ভেরিয়েবলটি কিছু (স্ট্রিং, ইনট, অবজেক্ট, ফাংশন ইত্যাদি) ধারণ করতে পারে)

if (elem) { // or !elem

অথবা

if (typeof(elem) !== 'undefined') {

অথবা

if (elem != null) {

5
আপনি যদি fooঘোষণা করতে চান কিনা তা জানতে চাইলে typeof foo === 'undefined'অথবাtypeof foo === typeof undefined

1
উচ্চতর আপোভোটেড উত্তরগুলি ঘোষিত ভেরিয়েবলগুলির পক্ষে কাজ করে না তবে এর মান রয়েছে undefined। সঠিক উত্তরটি হ'ল স্ট্যাকওভারফ্লো.com
পল

@Paulpro, সংস্করণ ব্যবহার hasOwnProperty('bar')অন্যদেরও একই ঘাটতি নেই, কিন্তু নোড (প্রতিস্থাপন জন্য কিছু সমন্বয় করতে হবে windowসঙ্গে global)।
অলিগোফ্রেন

@ পলপ্পো প্রকৃতপক্ষে, তবে আপনি জবাব দেওয়ার আগে আমি ভাবছিলাম যে, আসলেই এটি বাস্তবিক সমস্যা নয়। আপনি যখন ব্লক বা ফাংশন স্কোপড ভেরিয়েবলগুলি নিয়ে কাজ করছেন, এটি সাধারণত আপনার নিজের কোড বা লেখার অ্যাক্সেসের কোড থাকে, সুতরাং আপনার কোনও ক্ষেত্রে রানটাইম ত্রুটি হবে যা স্থিরযোগ্য। যদিও ভেরিয়েবলগুলির সাথে স্বাভাবিক সমস্যা সংজ্ঞায়িত বিড করা হয়নি (বিদ্যমান নেই) সাধারণত আপনার নিয়ন্ত্রণের বাইরে কোডে থাকে, তাই এটি সনাক্ত করার জন্য আপনার একটি উপায়ের প্রয়োজন। সুতরাং এটি 80/20 সমাধান।
অলিগোফ্রেন

উত্তর:


3049

যদি আপনি চান অপারেটর । বিশেষ করে:typeof

if (typeof variable !== 'undefined') {
    // the variable is defined
}

35
এটি একটি ভাল সমাধান দেখায়, তবে কেন আপনি এটি ব্যাখ্যা করতে পারেন?
মরগান চেং

46
প্রকৃতপক্ষে, আপনার অবশ্যই যাচাই করা উচিত যে অবজেক্টটি আপনার যা হওয়া দরকার। সুতরাং এটি যদি হয় (টাইপফ কনসোল == 'অবজেক্ট') {// ভেরিয়েবলটি আমার এটির দরকার}
স্ট্যাটিক্সান

59
@ জর্জি চতুর্থ: "শুধু করুন` যদি (পরিবর্তনশীল) "- ওম, না, এটি মিথ্যা এবং 0 এর জন্য ব্যর্থ হয়
জেসন এস

17
'if (পরিবর্তনশীল)' অবজেক্টের বৈশিষ্ট্যগুলির অস্তিত্বের জন্য পরীক্ষা করতেও ব্যর্থ হয়।
স্কটগুলি

54
@ geowa4 আসলে, যদি ভেরিয়েবল অপরিজ্ঞাত হয় তবে এটি একটি ত্রুটি ছুঁড়ে দেবে।
কেভিনজি

856

typeofযদি পরিবর্তনশীল সত্যিই undefined হয় অপারেটর চেক করবে।

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

typeofঅপারেটর, অন্যান্য অপারেটরদের অসদৃশ, একটি নিক্ষেপ না ReferenceError ব্যতিক্রম যখন অঘোষিত পরিবর্তনশীল ব্যবহার করা হয়েছে।

যাইহোক, নোট করুন যে typeof nullফিরে আসবে "object"। পরিবর্তনশীল সূচনা করার ভুলটি এড়াতে আমাদের সতর্ক থাকতে হবে null। সুরক্ষিত থাকার জন্য, আমরা এর পরিবর্তে এটি ব্যবহার করতে পারি:

if (typeof variable === 'undefined' || variable === null) {
    // variable is undefined or null
}

===সাধারণ সাম্যের পরিবর্তে কঠোর তুলনা ব্যবহারের বিষয়ে আরও তথ্যের জন্য ==দেখুন:
জাভাস্ক্রিপ্ট তুলনাতে কোন সমান অপারেটর (== বনাম ===) ব্যবহার করা উচিত?


2
যদি (! পরিবর্তনশীল_ এখানে)) // আপনার কোড এখানে। }; ভেরিয়েবলটি মিথ্যা বা
অপরিজ্ঞাত

5
if(! variable_here)অনেক ক্ষেত্রে বিরতি হবে। চলক 0 বা মিথ্যা হলে এটি ব্যর্থ হবে। আপনি যা চান তা তা নয়।
কোরি ড্যানিয়েলসন

2
এটি ভোট দিতে হবে কিনা সিদ্ধান্ত নিতে পারে না। কঠোরভাবে বলা typeof foo === "undefined"সঠিক এবং শীর্ষে ভোট দেওয়া উত্তরের চেয়ে ভাল, তবে অতিরিক্ত নোটগুলি এই উত্তরটিকে বিভ্রান্তিকর করে তোলে।
Alnitak

1
@ স্টিভেনপেনি সময়রেখা পরীক্ষা করুন। এই উত্তরটি পোস্ট হওয়ার পরে শীর্ষ উত্তরটি অন্য একটি প্রশ্ন থেকে মার্জ করা হয়েছিল
রব

1
এই উত্তর কাজ করে না। এটি এখানে একমাত্র উত্তর যা কাজ করে: stackoverflow.com/a/36432729/772035
পল

221

অনেক ক্ষেত্রে, ব্যবহার করে:

if (elem) { // or !elem

আপনার জন্য কাজটি করবে! ... এটি নীচের ক্ষেত্রেগুলি পরীক্ষা করবে:

  1. অপরিবর্তিত : মানটি যদি সংজ্ঞায়িত না হয় এবং এটি হয়undefined
  2. নাল : যদি এটি নাল হয়, উদাহরণস্বরূপ, যদি কোনও ডিওএম উপাদান উপস্থিত না থাকে ...
  3. খালি স্ট্রিং :''
  4. 0 : সংখ্যা শূন্য
  5. নাএন : একটি সংখ্যা নয়
  6. মিথ্যা

সুতরাং এটি সমস্ত ধরণের কেস কভার করবে, তবে সর্বদা অদ্ভুত ঘটনা রয়েছে যা আমরা পাশাপাশি আচ্ছাদন করতে চাই, উদাহরণস্বরূপ, স্পেসগুলির সাথে একটি স্ট্রিং, এর মতো ' 'এটি জাভাস্ক্রিপ্টে সংজ্ঞায়িত করা হবে কারণ এতে স্ট্রিংয়ের অভ্যন্তরে ফাঁকা স্থান রয়েছে ... উদাহরণস্বরূপ এই ক্ষেত্রে আপনি ট্রিম () ব্যবহার করে আরও একটি চেক যুক্ত করুন, যেমন:

if(elem) {

if(typeof elem === 'string' && elem.trim()) {
///

এছাড়াও, এই চেকগুলি কেবল মানগুলির জন্য , যেহেতু জাভাস্ক্রিপ্টে অবজেক্ট এবং অ্যারে আলাদাভাবে কাজ করে, খালি অ্যারে []এবং খালি বস্তু {}সর্বদা সত্য

উত্তরের একটি দ্রুত সংক্ষিপ্তসারটি দেখানোর জন্য আমি নীচের চিত্রটি তৈরি করেছি:

অপরিবর্তিত, নাল, ইত্যাদি


2
@ আলিরেজা, সুন্দর! আপনার উত্তর সেখানে অনেক লোককে সাহায্য করবে। আমি ইতিমধ্যে এই মিথ্যা মানগুলি মুখস্থ করেছি, কেবলমাত্র আমি যা সম্পর্কে নিশ্চিত নই []]।
থিয়াগো ইওিথি

13
আমি একটি "রেফারেন্সরির:
এলেম

3
@ropo, কারণ এটি এমনকি আপনি কী তা যাচাই করার জন্য এলেমকে সংজ্ঞায়িত করেননি, যদি এটি আপনার ক্ষেত্রে হয় তবে আপনার এটি টাইপফ (এলেম) === "স্ট্রিং" যা আগেই উল্লিখিত আছে তা পরীক্ষা করে দেখতে হবে ...
আলিরেজা

19
তারপরে উত্তরটি বিভ্রান্তিকর হয় যখন এটি if(elem)অনির্ধারিত জন্য পরীক্ষা করে বলে (এটি যখন সংজ্ঞায়িত ত্রুটি দেয় না), তাই না?
ফ্যানকি

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

210

জাভাস্ক্রিপ্টে, একটি পরিবর্তনশীল সংজ্ঞায়িত করা যায় তবে মানটি ধরে রাখা যায় undefined, তাই সর্বাধিক সাধারণ উত্তরটি প্রযুক্তিগতভাবে সঠিক নয় এবং পরিবর্তে নিম্নলিখিতটি সম্পাদন করে:

if (typeof v === "undefined") {
   // no variable "v" is defined in the current scope
   // *or* some variable v exists and has been assigned the value undefined
} else {
   // some variable (global or local) "v" is defined in the current scope
   // *and* it contains a value other than undefined
}

এটি আপনার উদ্দেশ্যে যথেষ্ট হতে পারে। নিম্নলিখিত পরীক্ষায় সরল শব্দার্থবিজ্ঞান রয়েছে, যা আপনার কোডের আচরণের সুনির্দিষ্টভাবে বর্ণনা করা এবং নিজেকে এটি বোঝা সহজ করে তোলে (যদি আপনি এই ধরণের বিষয়ে যত্নশীল হন):

if ("v" in window) {
   // global variable v is defined
} else {
   // global variable v is not defined
}

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


7
এটি কেবলমাত্র বিশ্বব্যাপী ভেরিয়েবল ঘোষণা করা হয়েছে কিনা তা পরীক্ষা করে। আপনি যদি সঠিকভাবে কোডিং করে থাকেন তবে আপনি আপনার বিশ্বব্যাপী সীমাবদ্ধ করছেন। এটি স্থানীয় vars এর জন্য মিথ্যা প্রতিবেদন করবে: (ফাংশন () {var sdfsfs = 10; কনসোল.লগ (উইন্ডোতে "sdfsfs");}) () `
এডি মঙ্গ জুনিয়র

2
এটি সেরা f $ # ^% আইএনএন উত্তর। আমি এই কর্নারের ক্ষেত্রে ঠিক কীভাবে অ্যাকাউন্ট করব তা নির্ধারণের চেষ্টা করার বুদ্ধি শেষ হয়েছিল । উজ্জ্বল। আপনি এই কাজটি করতে পারেন ধারণা ছিল না।
অস্থায়ী_ ব্যবহারকারী_নাম

1
হুঁশিয়ার: আপনার উত্তর থেকে এখানে যাওয়া হয়েছে stackoverflow.com/questions/519145/...
Shog9

কৌণিক ব্যবহারকারীদের জন্য: দুর্ভাগ্যক্রমে, এটি কোনও এনজি-ইফ বিবৃতিতে অনুমোদিত হবে বলে মনে হচ্ছে না।
কিওয়ার্টজগুয়ে

... স্কোপ বরাবর চেকগুলির জন্য নিখুঁত ব্লুপ্রিন্ট। "উইন্ডোতে" বা "(টাইপফের ভেরিয়েবল === 'অপরিবর্তিত' || পরিবর্তনশীল === নাল)" থাকলে আপনার কোনও পারফরম্যান্সের ইঙ্গিত রয়েছে। আসলে আমি একটি হার্ড ফ্যাক্ট টেস্টে আগ্রহী এবং বিতর্কিত সম্ভাব্য যুক্তিতে নয় (যা আমি নিজেই করতে পারি: দ্বিতীয় ধারাটিতে আরও অপারেশন রয়েছে -> খারাপ পারফরম্যান্স)
দ্রুত

119

সর্বাধিক ক্ষেত্রে আপনি ব্যবহার করবেন:

elem != null

একটি সহজ ভিন্ন if (elem), এটা পারবেন 0, false, NaNএবং '', কিন্তু প্রত্যাখ্যান nullবা undefined, এটি একটি ভাল, সাধারণ পরীক্ষা উপার্জন একটি আর্গুমেন্ট উপস্থিতি, বা একটি বস্তুর সম্পত্তি জন্য।


অন্যান্য চেকগুলিও ভুল নয়, তাদের কেবল বিভিন্ন ব্যবহার রয়েছে:

  • if (elem)যদি ব্যবহার করা যাবে elemএকটি বস্তু হতে নিশ্চিত করা হয়, অথবা যদি false, 0, ইত্যাদি বিবেচনা করা হয় (আপনি অত: পর সমতুল্য "ডিফল্ট" মান undefinedবা null)।

  • typeof elem == 'undefined'নির্দিষ্ট ক্ষেত্রে nullঅবিচ্ছিন্ন ভেরিয়েবল বা সম্পত্তির স্বতন্ত্র অর্থ রয়েছে এমন ক্ষেত্রে ব্যবহার করা যেতে পারে ।

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

এর বিরুদ্ধেও কঠোর তুলনা কার্যকর undefined:

if (elem === undefined) ...

তবে, যেহেতু undefinedগ্লোবালটিকে অন্য কোনও মান দিয়ে ওভাররাইড করা যেতে পারে, এটি undefinedব্যবহারের আগে বর্তমান স্কোয়ারে ভেরিয়েবলটি ঘোষণা করা ভাল :

var undefined; // really undefined
if (elem === undefined) ...

বা:

(function (undefined) {
    if (elem === undefined) ...
})();

এই পদ্ধতির একটি গৌণ সুবিধা হ'ল জেএস মিনিফায়ারগুলি undefinedপ্রতিবার আপনার কয়েকটি বাইট সংরক্ষণ করে একক অক্ষরে পরিবর্তনশীল হ্রাস করতে পারে ।


17
আমি হতবাক যে আপনি ওভাররাইড করতে পারেন undefined। আমি উত্তরে এটি উল্লেখযোগ্য মনে করি না। সম্ভবত সমস্ত জাভাস্ক্রিপ্টে একক সবচেয়ে খারাপ গ্রহণযোগ্য চলক নাম।
কোরি ড্যানিয়েলসন

2
এটি একটি ব্যতিক্রম ঘটায় এবং window.বৈশ্বিক প্রসঙ্গে যদি ব্যবহার করা যায় তবে চলকের আগে আপনার ব্যবহার করা প্রয়োজন ... এটি সর্বোত্তম উপায় নয়।
অ্যালেক্স

4
এই ওভাররাইডিং সমস্যার কারণে আপনার void(0)পরিবর্তে সর্বদা ব্যবহার করা উচিত undefined
বার্তোমিয়েজ জালেউস্কি

+1 টি যে এই উত্তর পয়েন্ট থেকে কখনও কখনও আপনি আসলে পারে চান সনাক্ত করতে false, 0অবৈধ মান হিসাবে, ইত্যাদি।
রিনোগো

76

যদি পরীক্ষা করে দেখুন windowhasOwnProperty( " varname" )

typeofউত্তরের আধিক্যের বিকল্প ;

গ্লোবাল স্কোয়ারে একটি var varname = value;বিবৃতি দিয়ে গ্লোবাল ভেরিয়েবলগুলি ঘোষণা করা হয়

উইন্ডো অবজেক্টের বৈশিষ্ট্য হিসাবে অ্যাক্সেস করা যায়।

যেমন, hasOwnProperty()পদ্ধতি, যা

একটি বুলিয়ান প্রদান করে যা নির্দেশ করে যে বস্তুর নিজস্ব সম্পত্তি হিসাবে এটি নির্দিষ্ট সম্পত্তি রয়েছে (এটি উত্তরাধিকার সূত্রে বিপরীতে)

কিনা তা নির্ধারণ করতে ব্যবহার করা যেতে পারে

একটি varএর "VARNAME" বিশ্বব্যাপী ঘোষণা করা হয়েছে অর্থাত একটি সম্পত্তি window

// Globally established, therefore, properties of window
var foo = "whatever", // string
    bar = false,      // bool
    baz;              // undefined
//  window.qux does not exist

console.log( [
    window.hasOwnProperty( "foo" ), // true
    window.hasOwnProperty( "bar" ), // true
    window.hasOwnProperty( "baz" ), // true
    window.hasOwnProperty( "qux" )  // false
] );

কি দুর্দান্ত hasOwnProperty() বিষয়টি এটির কল করার ক্ষেত্রে আমরা এমন একটি পরিবর্তনশীল ব্যবহার করি না যা এখনও অঘোষিত হতে পারে - প্রথমত অর্ধেক সমস্যাটি অবশ্যই।

না হলেও সবসময় নিখুঁত বা আদর্শ সমাধান, কিছু পরিস্থিতিতে, এটা ঠিক কাজ!

মন্তব্য

varউপরেরগুলি ভেরিয়েবল সংজ্ঞায়িত করতে ব্যবহার করার সময় সত্য , letযার বিপরীতে :

একটি ব্লক স্কোপ স্থানীয় ভেরিয়েবল ঘোষণা করে optionচ্ছিকভাবে এটিকে একটি মান দিয়ে শুরু করে।

এর বিপরীতে var , যা বিশ্বব্যাপী একটি পরিবর্তনশীল বা স্থানীয়ভাবে কোনও ব্লক স্কোপ নির্বিশেষে একটি সম্পূর্ণ ফাংশনে সংজ্ঞায়িত করে।

প্রোগ্রাম এবং ফাংশনগুলির শীর্ষ স্তরে let, বৈসাদৃশ্যপূর্ণ var, বৈশ্বিক বস্তুতে কোনও সম্পত্তি তৈরি করে না।

সম্পূর্ণতার জন্য: const ধ্রুবকগুলি সংজ্ঞা অনুসারে আসলে পরিবর্তনশীল নয় (যদিও তাদের সামগ্রীগুলি হতে পারে); আরও প্রাসঙ্গিকভাবে:

গ্লোবাল ধ্রুবকগুলি varভেরিয়েবলের বিপরীতে উইন্ডো অবজেক্টের বৈশিষ্ট্য হয়ে ওঠে না । একটি ধ্রুবক জন্য একটি প্রাথমিককরণ প্রয়োজন; অর্থাৎ, আপনাকে অবশ্যই এটির মানটি একই বিবৃতিতে নির্দিষ্ট করতে হবে যেখানে এটি ঘোষিত হয়েছে।

পুনরায় নিয়োগের মাধ্যমে ধ্রুবকের মান পরিবর্তন করতে পারে না এবং এটি পুনরায় ঘোষিত হতে পারে না।

কনস্টের ঘোষণাটি একটি মানকে কেবল পঠনযোগ্য রেফারেন্স তৈরি করে। এর অর্থ এই নয় যে এটির মানটি অপরিবর্তনীয়, কেবলমাত্র ভেরিয়েবল আইডেন্টিফায়ারকে পুনরায় নিয়োগ দেওয়া যায় না।

যেহেতু letভেরিয়েবল বা constধ্রুবকগুলি কখনই hasOwnProperty()পদ্ধতিতে উত্তরাধিকার সূত্রে প্রাপ্ত কোনও বস্তুর বৈশিষ্ট্য নয়, এটি তাদের অস্তিত্বের জন্য যাচাই করতে ব্যবহার করা যায় না।

এর প্রাপ্যতা এবং ব্যবহার সম্পর্কে hasOwnProperty():

প্রতিটি বস্তু থেকে অবতীর্ণ অবজেক্ট উত্তরাধিকারী hasOwnProperty()পদ্ধতি। [...] inঅপারেটরের বিপরীতে , এই পদ্ধতিটি অবজেক্টের প্রোটোটাইপ চেইনটি পরীক্ষা করে না।


1
এটি একটি দুর্দান্ত বিকল্প এবং এই প্রশ্নের শীর্ষে থাকা উচিত। দয়া করে উত্তর শিরোনামটি কার্যকর কাজের সাথে উদাহরণস্বরূপ করুন true(যেমন window.hasOwnProperty('console')বা var hop = "p";window.hasOwnProperty('hop'))।
সিপিএইচপিথন

2
অবশেষে এমন কিছু যা কোনও সদস্যের অ্যাক্সেসের কারণে ত্রুটি ছুঁড়ে না দেয় যার অস্তিত্ব নেই… সমস্ত typeofউত্তর সহজেই উপেক্ষা করে।
জেলফির কালটস্টল

1
এই উত্তরটি পুরানো - প্রতি স্ট্যান্ডার্ড ইসসিএমএসক্রিপ্ট আপনি letযেখানে ভেরিয়েবলগুলি window[বা অন্য কোনও উপলভ্য] অবজেক্টের বৈশিষ্ট্য হিসাবে উপলব্ধ নয় সেখানে ভেরিয়েবলগুলি সংজ্ঞায়িত করতে পারেন । বৈশিষ্ট্যেরhasOwnProperty উপস্থিতি পরীক্ষা করে , ভেরিয়েবল নয় এবং এভাবে সংজ্ঞায়িত ভেরিয়েবল সনাক্ত করতে ব্যবহার করা যাবে না let
amn

1
@ এ্যামন উত্তরটি ব্যবহারের ক্ষেত্রে সত্যই থেকে যায় varএবং সেই ক্ষেত্রে পুরানো নয়। তবে আমি কীভাবে এর ব্যবহারের ব্যবহার letএবং এর constথেকে আলাদা তার রূপরেখা একটি নোট যুক্ত করেছি var। আপনার অনুপ্রেরণার জন্য ধন্যবাদ; একসাথে আমরা উত্থাপন :)
ফ্রেড গ্যা্যান্ড

1
@ এ্যামন আমি উত্তরটি পুনরায় লিখেছি (আশা করি শেষ বারের জন্য) আরও পরিষ্কার করার জন্য যা hasOwnPropertyকেবলমাত্র varভেরিয়েবলের অস্তিত্ব পরীক্ষা করতে নির্ধারিত পদ্ধতিতে ব্যবহার করা যেতে পারে । এটা আমার কাছে ঠিক আছে।
ফ্রেড গ্যান্ড্ট

68

কোনও ভেরিয়েবলের উপস্থিতি আছে কিনা তা পরীক্ষা করে দেখুন

এটি পরীক্ষার জন্য একটি সুন্দর বুলেটপ্রুফ সমাধান যদি কোনও ভেরিয়েবল উপস্থিত থাকে এবং এটি সূচনা করা হয়:

var setOrNot = typeof variable !== typeof undefined;

কোনও নির্দিষ্ট ভেরিয়েবলটি আরম্ভ না করা হয় তার ক্ষেত্রে এটি একটি ডিফল্ট সেট করার জন্য একটি টার্নারি অপারেটরের সাথে সবচেয়ে বেশি ব্যবহৃত হয়:

var dark = typeof darkColor !== typeof undefined ? darkColor : "black";

এনক্যাপসুলেশন নিয়ে সমস্যা

দুর্ভাগ্যক্রমে, আপনি কেবল কোনও ফাংশনে আপনার চেককে সজ্জিত করতে পারবেন না।

আপনি এই জাতীয় কিছু করার কথা ভাবতে পারেন:

function isset(variable) {
    return typeof variable !== typeof undefined;
}

তবে, আপনি যেমন কল দিলে এটি একটি রেফারেন্স ত্রুটি তৈরি করবে। isset(foo)এবং ভেরিয়েবল fooসংজ্ঞায়িত করা হয়নি, কারণ আপনি কোনও ফাংশনে অ-বিদ্যমান ভেরিয়েবলটি পাশ করতে পারবেন না:

আনকচড রেফারেন্সএরর: foo সংজ্ঞায়িত হয়নি


ফাংশন প্যারামিটারগুলি অপরিশোধিত কিনা তা পরীক্ষা করা হচ্ছে

যদিও আমাদের issetফাংশনটি ভেরিয়েবলের উপস্থিত রয়েছে কিনা তা পরীক্ষার জন্য ব্যবহার করা যাবে না (কারণগুলির জন্য এখানে উপরে ব্যাখ্যা করা হয়েছে), এটি আমাদের কোনও ফাংশনের পরামিতিগুলি অপরিবর্তিত কিনা তা পরীক্ষা করার অনুমতি দেয়:

var a = '5';

var test = function(x, y) {
    console.log(isset(x));
    console.log(isset(y));
};

test(a);

// OUTPUT :
// ------------
// TRUE
// FALSE

yফাংশনটির জন্য কোনও মান পাস না করা সত্ত্বেও test, আমাদের issetফাংশন এই প্রসঙ্গে পুরোপুরি কাজ করে, কারণ yফাংশনে testএকটি undefinedমান হিসাবে পরিচিত ।


41

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

var values = typeof variable !== 'undefined' ? variable : '';

এছাড়াও আপনি যখন রেফারেন্স ভেরিয়েবলের উদাহরণস্বরূপ গ্লোবাল ভেরিয়েবল ঘোষণার চেষ্টা করবেন তখন এটি সহায়ক হবে।

আপনি চেক করতে চেয়েছিলেন পরিবর্তনশীল হতে করা উচিত নয় undefinedবা null। তারপরে নীচে চেক সম্পাদন করুন।

যখন ভেরিয়েবল ঘোষণা করা হয় এবং আপনি যদি মানটি পরীক্ষা করতে চান তবে এটি এমনকি সহজ: এবং এটি সম্পাদন করে undefinedএবং nullএকসাথে চেক করবে ।

var values = variable ? variable : '';

উত্তর ফ্ল্যাট হিসাবে ভুল হিসাবে। টাইপফুল ভেরিয়েবল সর্বদা একটি স্ট্রিং দেয়, এভাবে কখনই মিথ্যা হয় না। যেমন যদি typeof(booooo)হয় "undefined"তারপর typeof(typeof boooooo)হয় "string"এবং typeof boooooo && trueসর্বদা true। @ জন-স্লেজারের উত্তরটি আপনার সংখ্যার মতো সংক্ষিপ্ত আকারে রয়েছে type
এমপ্যাগ

এটি একেবারে সঠিক উত্তরএখানে একটি কর্মরত ফিডল । আপনি কোন দৃশ্যের কথা বলছেন তা আমি জানি না। প্রশ্নগুলি পরিবর্তনশীল অস্তিত্ব পরীক্ষা করার বিষয়ে about
রাজেশকদেব

@mpag ফ্ল্যাটকে ভুল বলবেন না। এটি প্রমাণ করুন । একটি ভুল খুঁজে পাওয়া সত্যই সহজ, পরিবর্তে আপনি এখানে ভাল উত্তর প্রদান করতে পারেন !!!। উত্তরটি যদি ফ্ল্যাট ভুল হয় তবে 28 টি প্রোগ্রামার আমার উত্তরটি যাচাই না করেই ভোট দিয়েছিল না। যেহেতু এখানে অনেক নামী উত্তর রয়েছে তারা তারা আপ-ভোট দিতে পারে, এটি নয়।
রাজেশদেব

প্রকৃতপক্ষে কোডের দ্বিতীয় অংশটি, উপরের শর্তের মতো দেখতে হবে না। আমি ভেবেছিলাম লোকেরা এই লাইন দ্বারা বুঝতে পারবে If you wanted to check variable shouldn't be undefined or null., এই মন্তব্যের মাধ্যমে, এর স্পষ্টভাবে বলা হয়েছে, এটি ভেরিয়েবল ডিক্লেয়ারেশন চেকটি সম্পাদন না করে। যে ভেরিয়েবল মান পরীক্ষা করতে হয়।
রাজেশদেব

1
আপনার 2 য় চেক 0 মান দিয়ে ব্যর্থ হবে
ফারিদ অ্যালামনোউটি

32

একটি ভেরিয়েবল পরীক্ষা করার সংক্ষিপ্ত উপায়টি ঘোষিত হয় না (অপরিবর্তিত নয়)

if (typeof variable === "undefined") {
  ...
}

আমি একটি ব্রাউজারের বাইরে চলমান স্ক্রিপ্ট সনাক্তকরণের জন্য দরকারী ( windowভেরিয়েবল ঘোষণা না করে ) এটি দরকারী বলে মনে করেছি ।


এটি কি "আধ্যাত্মিক উপায়ে" যা বহনযোগ্য?
জেসন

3
এটা ভুল. window.bar=undefinedসংজ্ঞায়িত করা হয় এবং একটি মান সেট করা হয়। আপনার উত্তরটি এর মধ্যে পার্থক্য সনাক্ত করতে ব্যর্থ হয় এবং যদি ভেরিয়েবলটি বিদ্যমান না থাকে। আপনি যদি this.hasOwnProperty('bar')এটি কাজ করতে পারে।
অলিগোফ্রেন

এই কোডটি কাজ করে না এবং আপনি কোনও ব্রাউজার কনসোল ব্যবহার করে এটি যাচাই করতে পারবেন
ha9u63ar

1
বিবেচনা করুন const x = 0; (() => console.log(x, this.hasOwnProperty('x')))();। চলক xসংজ্ঞায়িত করা হলেও
মিথ্যাটি

29

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

প্রকারটি অপরিজ্ঞাত হয়েছে কিনা তা পরীক্ষা করে চলকটি এখনও সংজ্ঞায়িত করা হয়েছে কিনা তা যাচাই করবে।

=== nullবা !== nullকেবল ভেরিয়েবলের মান ঠিক আছে কিনা তা পরীক্ষা করে দেখবে null

== nullঅথবা != nullযদি মান চেক করবে undefinedবা null

if(value)যদি পরিবর্তনশীল চেক করবে undefined, null, 0, অথবা একটি খালি স্ট্রিং।


12

সর্বোচ্চ উত্তর সঠিক, টাইপফ ব্যবহার করুন of

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

এটি পরিচালনা করার "পুরানো" উপায়টি কোনও সম্ভাব্য নিঃশব্দ / ওভার-রাইডিং অফসেট করার জন্য একটি ভার হিসাবে অপরিজ্ঞাতিত ঘোষণা করছিল undefined। তবে, সর্বোত্তম typeofউপায়টি এখনও ব্যবহার করা যায় কারণ এটি undefinedঅন্য কোড থেকে যে কোনও ওভাররাইডিং উপেক্ষা করবে । বিশেষত যদি আপনি বন্যে ব্যবহারের জন্য কোড লিখছেন যেখানে পৃষ্ঠায় আর কী চলছে তা কে জানে ...


1
পয়েন্টটি মোট, কারণ যদি বর্ণনামটি অপরিজ্ঞাত করা হয় তবে varName !== undefinedকেবল একটি রেফারেন্সইরারের কারণ হবে। এর পরিবর্তনের undefinedবিষয়টি বিবেচ্য নয়।
Wutaz

হুঁশিয়ার: আপনার উত্তর থেকে এখানে যাওয়া হয়েছে stackoverflow.com/questions/519145/...
Shog9

1
নতুন জাভাস্ক্রিপ্ট সংস্করণগুলিতে undefinedএকটি পঠনযোগ্য সম্পত্তি। তবে বুলেটপ্রুফ আপনি ব্যবহার করতে পারেন typeof mvVar === typeof void 0। সর্বদা void 0ফিরে আসে undefined
kwarnke

11
if (typeof console != "undefined") {    
   ...
}

বা আরও ভাল

if ((typeof console == "object") && (typeof console.profile == "function")) {    
   console.profile(f.constructor);    
}

সমস্ত ব্রাউজারে কাজ করে


3
পরেরটি আপনার মতে কেন ভাল?
স্কালে

3
@ এস্কলে আমি সম্মতি দিচ্ছি যে উত্তরটি আরও ভাল। এটি সাধারণ কারণ হিসাবে আপনি পরীক্ষা করে থাকেন যে প্রকারগুলি সেগুলি ব্যবহারের আগে আপনি কী চান।
ব্রক্সজিয়ার

হুঁশিয়ার: আপনার উত্তর থেকে এখানে যাওয়া হয়েছে stackoverflow.com/questions/519145/...
Shog9

9

বিতর্কে অবদান রাখার জন্য, যদি আমি জানি যে চলকটি একটি স্ট্রিং বা if (!variable)আইটেম যা আমি সবসময় পছন্দ করি তা হওয়া উচিত , তাই এটির মিথ্যা কিনা তা পরীক্ষা করা। এটি আরও পরিষ্কার কোড আনতে পারে যাতে উদাহরণস্বরূপ:

if (typeof data !== "undefined" && typeof data.url === "undefined") {
    var message = 'Error receiving response';
    if (typeof data.error !== "undefined") {
        message = data.error;
    } else if (typeof data.message !== "undefined") {
        message = data.message;
    }
    alert(message); 
}

..এতে হ্রাস করা উচিত:

if (data && !data.url) {
  var message = data.error || data.message || 'Error receiving response';
  alert(message)
} 


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

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

8

অপরিজ্ঞাত এবং নাল মধ্যে পার্থক্য করা কঠিন। নাল এমন একটি মান যা আপনি ভেরিয়েবলের কাছে নির্ধারিত করতে পারেন যখন আপনি উল্লেখ করতে চান যে ভেরিয়েবলটির কোনও নির্দিষ্ট মান নেই। অপরিজ্ঞাত একটি বিশেষ মান যা আনসাইন করা ভেরিয়েবলের ডিফল্ট মান।


var _undefined;
var _null = null;

alert(_undefined); 
alert(_null); 
alert(_undefined == _null);
alert(_undefined === _null);


1
প্রতিটি সতর্কতার আউটপুট ইনলাইন দেখাতে সহায়ক হবে।
2'15 এ 6'17

@ ডেমিসেক্স সম্মত হয়েছেন, তবে সম্পাদনার পরামর্শ দেওয়ার পরিবর্তে, কেন এটি কেবল তৈরি করবেন না? বিকল্প কারণ আছে। কেউ কেউ একে অসভ্য বিবেচনা করতে পারে; আমি এটিকে দক্ষ বিবেচনা করি - সুতরাং উত্তরটি নিজেই সম্পাদনা করেছি (পর্যালোচনা মুলতুবি)।
ফ্রেড গ্যান্ট

1
@ ফ্রেড - আমি সম্পাদনার ইতিহাসের দিকে নজর দিয়েছিলাম এবং অনুমান করতে পারি যে কেন আপনার সম্পাদনাগুলি প্রত্যাখ্যান করা হয়েছিল ... আউটপুটটি কী হবে তা প্রদর্শন করার জন্য কেবল লাইন যুক্ত না করে, ডেমিসেক্সের পরামর্শ অনুসারে, আপনি জিত পোস্ট করেছেন তা উল্লেখযোগ্যভাবে পরিবর্তন করেছেন।
স্টিফেন পি

8

নাল জাভাস্ক্রিপ্ট এবং একটি মান typeof nullরিটার্ন"object"

অতএব, আপনি যদি নাল মানগুলি পাস করেন তবে গৃহীত উত্তর কার্যকর হবে না। যদি আপনি নাল মানগুলি পাস করেন তবে আপনাকে নাল মানগুলির জন্য একটি অতিরিক্ত চেক যুক্ত করতে হবে:

if ((typeof variable !== "undefined") && (variable !== null))  
{
   // the variable is defined and not null
}

7

সর্বাধিক শক্তিশালী 'এটি সংজ্ঞায়িত' চেক টাইপফোর সাথে রয়েছে

if (typeof elem === 'undefined')

যদি আপনি কেবল একটি ডিফল্ট বরাদ্দ করতে একটি সংজ্ঞায়িত ভেরিয়েবলের সন্ধান করে থাকেন তবে একটি লাইনার পড়ার পক্ষে সহজেই আপনি এটি করতে পারেন:

elem = elem || defaultElem;

এটি ব্যবহার করা প্রায়শই জরিমানা, দেখুন: জাভাস্ক্রিপ্টে ডিফল্ট মান সেট করার জন্য আইডোমেটিক উপায়

টাইপফ কীওয়ার্ড ব্যবহার করে এই একটি লাইনারও রয়েছে :

elem = (typeof elem === 'undefined') ? defaultElem : elem;

7

আপনি ব্যবহার করতে পারেন typeof অপারেটর ।

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

var dataSet;

alert("Variable dataSet is : " + typeof dataSet);

উপরে কোড স্নিপেট যেমন আউটপুট ফেরত দেয়

পরিবর্তনশীল ডেটাসেটটি হ'ল: অপরিজ্ঞাত।


1
হুঁশিয়ার: আপনার উত্তর থেকে এখানে যাওয়া হয়েছে stackoverflow.com/questions/519145/...
Shog9

7

কোনও ভেরিয়েবল ঘোষিত / সেট হয়েছে কিনা তা পরীক্ষা করতে আমি এই নোংরা কৌশলটি করেছি did

এমনকি কোনও ফাংশনে কোড বের করার কোনও উপায় আমি খুঁজে পাইনি eval

"use strict";

// var someVar;

var declared;
try {
  someVar;
  declared = true;
} catch(e) {
  declared = false;
}

if (declared) {
  console.log("someVar is declared; now has the value: " + someVar);
} else {
  console.log("someVar is not declared");
}

"কোনও ফাংশনে কোড এক্সট্রাক্ট" বলতে কী বোঝ?
মেলাব

7

এই উত্তরগুলি (ফ্রেড গ্যান্ডেট সমাধান বাদে) সমস্তই হয় ভুল বা অসম্পূর্ণ।

ধরুন আমার variableName;কোনও undefinedমূল্য বহন করার দরকার আছে , এবং তাই এটি এমনভাবে ঘোষণা করা হয়েছে var variableName;যার অর্থ এটি ইতিমধ্যে আরম্ভ করা হয়েছে ; - এটি ইতিমধ্যে ঘোষিত হয়েছে কিনা তা আমি কীভাবে পরীক্ষা করব?

বা আরও ভাল - আমি কীভাবে তাত্ক্ষণিকভাবে চেক করব যদি "Book1.chapter22.para অনুচ্ছেদ" "একটি একক কলের সাথে উপস্থিত রয়েছে তবে একটি রেফারেন্স ত্রুটি বাড়ছে না?

আমরা সবচেয়ে শক্তিশালী JasvaScript অপারেটর, ব্যবহার করে এটি কি মধ্যে অপারেটর .:

"[variable||property]" in [context||root] 
>> true||false

এজেএক্স জনপ্রিয়তা অর্জনের সময়ে আমি একটি পদ্ধতি লিখেছি (পরে নামকরণ করা হয়েছে) isns () যা "স্পেসিফিকেশন 22.1 অনুচ্ছেদ 22" যেমন আরও অনেক কিছু হিসাবে সম্পত্তি নামের গভীর পরীক্ষা সহ নেমস্পেস বিদ্যমান কিনা তা নির্ধারণ করতে সক্ষম।

তবে এটি আগে প্রকাশিত হয়েছে এবং এর তাত্পর্যপূর্ণ গুরুত্বের কারণে এটি একটি আলাদা থ্রেডে প্রকাশের দাবিদার আমি এটিকে এখানে পোস্ট করব না তবে কীওয়ার্ডগুলি ( জাভাস্ক্রিপ্ট + আইএসএনএস ) সরবরাহ করব যা আপনাকে সমস্ত কোডের সাহায্যে উত্স কোড সনাক্ত করতে সহায়তা করবে প্রয়োজনীয় ব্যাখ্যা।


1
inঅপারেটর শুধুমাত্র সম্পত্তি অস্তিত্বের পরীক্ষা, এবং সব ভেরিয়েবল সম্পত্তি - constএবং letঘোষণা না (এবং constএমনকি, ভাল, হয় ভেরিয়েবল )।
amn

1
constএবং letECMAScript 2015 এর সাথে মানক করা হয়েছিল, যা 3 বছরেরও বেশি আগে প্রকাশিত হয়েছিল এবং তখন থেকে সাধারণ সন্দেহভাজনদের দ্বারা ভাল গ্রহণযোগ্যতা পেয়েছে এবং আজকে বরং ব্যাপকভাবে ব্যবহার করা হয়েছে, আমি সাহস করে বলি - গিথুবের "কনস্ট" এর 2 মিলিয়নেরও বেশি সংঘটন রয়েছে জেএস ফাইলগুলিতে
amn

হ্যাঁ, "পরিবর্তনশীল" - হুবহু। এই কারণেই আমি আপনার উত্তরে মন্তব্য করেছিলাম, এটি উল্লেখ করে যে আপনি কোনও চলক বিদ্যমান কিনা তা পরীক্ষা করার জন্য অপারেটরটি ব্যবহার করতে পারবেন না , কারণ "কনস্ট এবং লেট [বৈশিষ্ট্য] নয়" - যদিও বলা যেতে পারে যে একটি স্থির রেফারেন্স প্রবর্তন করা যেতে পারে অন্যদিকে, একটি পরিবর্তনশীল রেফারেন্সের বিপরীতে , আসলে একটি পরিবর্তনশীল রেফারেন্স প্রবর্তন করে - এটি অন্য কথায়, কোনও পরিমাপের দ্বারা, একটি ভেরিয়েবল এবং আপনার উত্তরটি বোঝাতে ভুল হয় যে আপনি পরীক্ষা করতে পারবেন যে কোনও ভেরিয়েবলের সাথে সংজ্ঞা দেওয়া আছে কিনা অপারেটর ব্যবহার করে - আপনি পারবেন না। inconstletletin
amn

ECMAScript 6 স্পেসিফিকেশন জাভাস্ক্রিপ্ট ভাষা সংজ্ঞায়িত করে, আপনি বা ওয়েব ব্রাউজারকে নয়। এ কারণেই এটিকে একটি স্পেসিফিকেশন বলা হয় - এটি নির্বিঘ্নে ভাষা নির্দিষ্ট করে। আপনার উত্তরটি সর্বোপরি পুরানো, সবচেয়ে খারাপ এটি ইচ্ছাকৃতভাবে আপনি যা অপ্রাসঙ্গিক বলে মনে করেন তা বাদ দেয় , যদিও এটি অত্যন্ত প্রাসঙ্গিক। লিঙ্কযুক্ত স্পেসের উদ্ধৃতি দিয়ে, "আসুন এবং কনস্ট্যানশন ঘোষণাগুলি ভেরিয়েবল সংজ্ঞায়িত করুন"। এই কনস্ট্রাক্টসগুলি windowঅবজেক্টের বৈশিষ্ট্য হিসাবে অ্যাক্সেসযোগ্য নয় , কীভাবে আপনার কাছে এটি আরও পরিষ্কার করা যায় তা আমি জানি না।
am

উত্তরটি ভেরিয়েবলের সমস্ত ক্ষেত্রে কভার করে না। বিশেষত, এটি letকীওয়ার্ডের সাথে সংজ্ঞায়িত ভেরিয়েবলগুলি কভার করে না । এটাই আমি নির্দেশ করছিলাম।
amn

6

প্রশ্নে বর্ণিত বিশেষ পরিস্থিতিতে,

typeof window.console === "undefined"

অনুরূপ

window.console === undefined

আমি সংক্ষিপ্ততর হওয়ার পর থেকে পছন্দ করি।

দয়া করে নোট করুন যে আমরা consoleকেবলমাত্র বিশ্বব্যাপী স্কোপ (যা windowসমস্ত ব্রাউজারে একটি বিষয়) সন্ধান করি। এই বিশেষ পরিস্থিতিতে এটি কাম্য। আমরা চাই নাconsole অন্য কোথাও সংজ্ঞায়িত ।

@ ব্রায়ানকেলি তার দুর্দান্ত উত্তরে প্রযুক্তিগত বিবরণ ব্যাখ্যা করেছেন। আমি কেবল উপসংহারের অভাব যুক্ত করেছি এবং এটি পড়ার সহজ কিছুতে হজম করেছি।


হুঁশিয়ার: আপনার উত্তর থেকে এখানে যাওয়া হয়েছে stackoverflow.com/questions/519145/...
Shog9

2
মিথ্যা। দ্বিতীয়টি আমার কনসোলে একটি ব্যতিক্রম ছুঁড়ে।
জন কেটেজিক

6

আমি বস্তুর উপর নির্ভর করে দুটি ভিন্ন উপায় ব্যবহার করি।

if( !variable ){
  // variable is either
  // 1. '';
  // 2. 0;
  // 3. undefined;
  // 4. null;
  // 5. false;
}

কখনও কখনও আমি খালি স্ট্রিংটিকে মিথ্যা হিসাবে মূল্যায়ন করতে চাই না, তাই আমি এই কেসটি ব্যবহার করি

function invalid( item ){
  return (item === undefined || item === null);
}

if( invalid( variable )){
  // only here if null or undefined;
}

যদি আপনার বিপরীতে প্রয়োজন হয়, তবে প্রথম উদাহরণে! ভেরিয়েবল !! পরিবর্তনশীল হয়ে যায়, এবং অবৈধ ক্রিয়ায় === হয়ে যায়! = এবং ফাংশনটির নামগুলি নন-অকার্ডে পরিবর্তিত হয়।


5

আমার পছন্দ typeof(elem) != 'undefined' && elem != null

তবে আপনি চয়ন করেন, চেকটি ঠিক তেমন কোনও ফাংশনে রাখা বিবেচনা করুন

function existy (x) {
    return typeof (x) != 'undefined' && x != null;
}

যদি আপনি জানেন না যে ভেরিয়েবলটি ঘোষিত হয় তবে চালিয়ে যান typeof (x) != 'undefined' && x != null;

আপনি যেখানে জানেন যে পরিবর্তনশীল ঘোষিত হয়েছে কিন্তু অস্তিত্ব থাকতে পারে না, আপনি ব্যবহার করতে পারেন

existy(elem) && doSomething(elem);

আপনি যে ভেরিয়েবলটি পরীক্ষা করছেন তা কখনও কখনও নেস্টেড সম্পত্তি হতে পারে। আপনি প্রপ ব্যবহার করতে পারেন || question question প্রশ্নের মধ্যে থাকা সম্পত্তির চূড়ান্ত উপস্থিতিটি পরীক্ষা করে দেখার জন্য:

var exists = ((((existy(myObj).prop1||{}).prop2||{}).prop3||{})[1]||{}).prop4;

প্রতিটি সম্পত্তি ব্যবহারের পরে (... '|| {}')। পরেরপ্রপ যাতে কোনও অনুপস্থিত সম্পত্তি ত্রুটি না ফেলে দেয়।

অথবা আপনি যেমন অস্তিত্ব ব্যবহার করতে পারে existy(o) && existy(o.p) && existy(o.p.q) && doSomething(o.p.q)


আপনি যদি এটি কোনও ফাংশনে রাখেন তবে এটি অনর্থক। ঘোষিত হওয়ার typeof (x) != 'undefined' && x != nullসমতুল্য । x != nullx
রাই-

3

এটা পরিস্থিতির উপর নির্ভর করে। যদি আপনি এমন কোনও কিছুর সন্ধান করছেন যা আপনার কোডের বাইরে বিশ্বব্যাপী সংজ্ঞায়িত হতে পারে বা নাও হতে পারে (যেমন jQuery এর মত) আপনি চান:

if (typeof(jQuery) != "undefined")

(সেখানে কঠোর সাম্যের প্রয়োজন নেই, টাইপফ সবসময় একটি স্ট্রিং ফেরত দেয়)) তবে আপনার যদি কোনও ক্রিয়াকলাপের সাথে যুক্তি থাকতে পারে যা উত্তীর্ণ হতে পারে বা না পারে তবে সেগুলি সর্বদা সংজ্ঞায়িত হবে, তবে বাদ দিলে নਾਲ।

function sayHello(name) {
    if (name) return "Hello, " + name;
    else return "Hello unknown person";
}
sayHello(); // => "Hello unknown person"

3

ধরার চেষ্টা কর

যদি ভেরিয়েবলটি মোটেই সংজ্ঞায়িত না করা হয় তবে ট্রাই-ক্যাচ ব্লকটি ব্যবহার করে ব্রেক কোড কার্যকর করা ছাড়াই এটি পরীক্ষা করে দেখতে পারেন (আপনার use strictমোডের দরকার নেই )

বোনাস: (অন্যান্য উত্তর উল্লেখ করে) কেন ( উত্স ) এর ===চেয়ে বেশি স্পষ্ট?==

যদি (a == খ)

এখানে চিত্র বিবরণ লিখুন

যদি (a === খ)

এখানে চিত্র বিবরণ লিখুন


1
এফওয়াইআই, (a == খ) গেম অফ লাইফ গ্রিডে রাখা মোটেও আকর্ষণীয় ছিল না।
জনস্নেলগুলি

0

আমি অবাক হয়েছি এখনও এর উল্লেখ করা হয়নি ...

এখানে ব্যবহার করে বেশ কয়েকটি অতিরিক্ত প্রকরণ রয়েছে this['var_name']

এই পদ্ধতিটি ব্যবহারের সুবিধা যা এটি ভেরিয়েবল সংজ্ঞায়িত করার আগে ব্যবহার করা যেতে পারে।

if (this['elem']) {...}; // less safe than the res but works as long as you're note expecting a falsy value
if (this['elem'] !== undefined) {...}; // check if it's been declared
if (this['elem'] !== undefined && elem !== null) {...}; // check if it's not null, you can use just elem for the second part

// these will work even if you have an improper variable definition declared here
elem = null; // <-- no var here!! BAD!

এটা ভুল. window.bar=undefinedসংজ্ঞায়িত করা হয় এবং একটি মান সেট করা হয়। আপনার উত্তরটি এর মধ্যে পার্থক্য সনাক্ত করতে ব্যর্থ হয় এবং যদি ভেরিয়েবলটি বিদ্যমান না থাকে। আপনি যদি this.hasOwnProperty('bar')এটি কাজ করতে পারে।
অলিগোফ্রেন
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.