জাভাস্ক্রিপ্টে কিছু অপরিজ্ঞাত না থাকলে পরীক্ষা করুন


224

আমি পরীক্ষা করছি if(response[0].title !== undefined), কিন্তু আমি ত্রুটি পেয়েছি:

আনকাচড টাইপ এরির: অপরিজ্ঞাতকৃত সম্পত্তি 'শিরোনাম' পড়তে পারে না।


উত্তরটি এখানে স্ট্যাকওভারফ্লোতে দেখুন। stackoverflow.com/questions/858181/…
লুইস ভ্যালেন্সিয়া

উত্তর:


345

response[0] সংজ্ঞায়িত করা হয় না, এটি সংজ্ঞায়িত করা হয়েছে কিনা তা পরীক্ষা করে দেখুন এবং তার পরে তার সম্পত্তির শিরোনাম পরীক্ষা করুন।

if(typeof response[0] !== 'undefined' && typeof response[0].title !== 'undefined'){
    //Do something
}

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

4
@ ব্যাডহর্সি বুঝতে পেরেছি, আমি আপনার মন্তব্যে উত্তরটি আপডেট করেছি।
অ্যামোসিয়েভেরা

1
যদি কোনও ভেরিয়েবল উপস্থিত থাকে এবং সেই স্ট্রিং থাকে যা 'অপরিজ্ঞাত' পড়ে?
TomeeNS

@ বাডহর্সি আপনার যুক্তিটি বোকাস। আমি কেন নতুন করে সংজ্ঞা দেব undefined?
রবার্ট সিমার

@ এমসরিভেরা না, তার মন্তব্যটি কোনও তাৎপর্যপূর্ণ হয়নি। আপনি আপনার উত্তর খারাপ করেছেন।
রবার্ট সিমার

39

অপরিশোধিত কিনা response[0]তা খতিয়ে দেখুন:

if(response[0] !== undefined) { ... }

যদি এখনও আপনার শিরোনাম স্পষ্টভাবে পরীক্ষা করতে হয় তবে প্রাথমিক চেকের পরে এটি করুন:

if(response[0] !== undefined && response[0].title !== undefined){ ... }

35

উপরের অন্যান্য কোড উদাহরণগুলির সাথে আমার সমস্যা হয়েছিল। ক্রোমে, এই শর্তটি আমার জন্য কাজ করেছিল:

typeof possiblyUndefinedVariable !== "undefined"

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


2
একই - আমি পেয়েছিলাম undefinedএকটি স্ট্রিং হতে হবে।
পুনর্বার

এটি অবশ্যই ক্রোমের সাথে নতুন কিছু হবে (আমি উইন ক্রোম 41 এটিএম এ যাচ্ছি)। গ্রহণযোগ্য উত্তর ঠিক কাজ করতে ব্যবহৃত! : পি
জো

13

আসলে আপনার অবশ্যই এটিকে চেষ্টা / ক্যাপ ব্লক দিয়ে ঘিরে রাখা উচিত যাতে আপনার কোড কাজ করা থেকে বিরত না হয়। এটার মত:

try{
    if(typeof response[0].title !== 'undefined') {
        doSomething();
    }
  }catch(e){
    console.log('responde[0].title is undefined'); 
  }

আমি IE 8 এর দিকে চেয়ে ছিলাম এবং চেষ্টা করার চেষ্টা করছিলাম।
RonanOD

1
এই ভাল উপায় আপনি পরীক্ষা যদি একটি ফাংশন undefined হয়
edepperson

অপরিশোধিত চেক করতে ত্রুটি নিক্ষেপ করা ভাল সমাধান নয়। @amosrieda হল সেরা সমাধান।
user3658423

@ user3658423: এটি কোনও ত্রুটি ছুঁচ্ছে না। এটি কেবলমাত্র প্রতিক্রিয়ার অঘোষিত হলে স্ক্রিপ্টটি থামতে বাধা দেয় (কারণ এটি একটি ত্রুটি ছুঁড়ে দেবে)।
আন্দ্রে লুইজ

কখনও কখনও ত্রুটিগুলি সহায়ক হতে পারে। আপনার প্রস্তাবিত সমাধানের সাথে, যদি doSomeoming () ব্যতিক্রম ছুঁড়ে, আপনার কনসোলে যে সমস্ত কিছুই দেখতে পেল তা হল "রেসপন্স [0]। শিরোনামটি পূর্বনির্ধারিত", ফাইল xyz এর "আন-ধরা ব্যতিক্রম @ লাইন 123" সম্পর্কিত দরকারী বার্তার পরিবর্তে .js "। অবশেষে দ্বিতীয় বিকাশকারী সম্ভবত কনসোল.লগ () বিবৃতিটি মন্তব্য করবেন, তৃতীয় বিকাশকারীকে আসা এবং ডসোমিংথিং () এর মধ্যে গভীরভাবে ঘটে যাওয়া একটি বাগ ঠিক করা আরও বেশি জটিল করে তুলবে।
এরিক সাস্টার্যান্ড




0

আপনি response[0]প্রকৃতপক্ষে রয়েছেন কিনা তা পরীক্ষা করুন , ত্রুটিটি মনে হয় এটির উপস্থিতি নেই।


0

আপনাকে অবশ্যই প্রথমে response[0]অপরিশোধিত কিনা তা যাচাই করতে হবে এবং কেবল যদি তা না হয় তবে বাকিদের জন্য পরীক্ষা করে দেখুন। তার মানে আপনার ক্ষেত্রে response[0]এটি অপরিজ্ঞাত।


0

আমি জানি আমি এখানে 7 মাস দেরি করে এসেছি তবে আমি এই প্রশ্নগুলি পেয়েছি এবং এটি আকর্ষণীয় দেখাচ্ছে। আমি আমার ব্রাউজার কনসোলে এটি চেষ্টা করেছি।

try{x,true}catch(e){false}

যদি ভেরিয়েবল এক্স অপরিজ্ঞাত হয়, ত্রুটি ধরা পড়ে এবং এটি মিথ্যা হবে, যদি তা না হয় তবে এটি সত্য হয়ে যাবে। সুতরাং আপনি ভেরিয়েবলের মান সেট করতে আপনি ইভাল ফাংশনটি ব্যবহার করতে পারেন

var isxdefined = eval('try{x,true}catch(e){false}')

1
একটি আকর্ষণীয় পদ্ধতির যদি আমি নিজেই বলতে পারি।
ব্র্যান্ডিটো

0

এই উত্তরের কয়েকটিতে কীভাবে ব্যবহার করবেন সে সম্পর্কে একটি মৌলিক ভুল ধারণা রয়েছে typeof

ত্রুটিপূর্ণ

if (typeof myVar === undefined) {

ঠিক

if (typeof myVar === 'undefined') {

কারণটি typeofএকটি স্ট্রিংটি দেয় returns অতএব, আপনি চেক করা উচিত যে এটা STRING "undefined" বদলে ফিরে undefined(উদ্ধৃতি চিহ্নগুলির সাথে প্রদত্ত নয়), যা নিজেই এক জাভাস্ক্রিপ্ট এর আদিম ধরনেরtypeofঅপারেটর ধরনের একটি মান আর ফেরত আসবে না undefined


অভিযোজ্য বস্তু

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

let undefined = 42;

এবং প্রথম পদ্ধতিটি ভুল প্রমাণ করার জন্য আপনি কীভাবে এটি ব্যবহার করতে পারেন তার একটি উদাহরণ এখানে রয়েছে:

https://jsfiddle.net/p6zha5dm/

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