console.log
মানসম্মত নয়, সুতরাং আচরণটি বরং অপরিজ্ঞাত, এবং বিকাশকারী সরঞ্জামগুলির প্রকাশ থেকে মুক্তি থেকে সহজেই পরিবর্তন করা যায়। আপনার বইটি সম্ভবত পুরানো হতে পারে, সম্ভবত আমার উত্তর শীঘ্রই।
আমাদের কোডে এটি console.log
অ্যাসিঙ্ক হোক বা না থাকায় কোনও পার্থক্য হয় না, এটি কোনও ধরণের কলব্যাক সরবরাহ করে না; এবং আপনি যে মানগুলি পাস করেছেন সেগুলি আপনি ফাংশনটি কল করার সময় সর্বদা রেফারেন্স এবং গণনা করা হয়।
তারপরে কী ঘটেছিল তা আমরা সত্যিই জানি না (ফায়ারব্যাগ, ক্রোম ডেভটোলস এবং অপেরা ড্রাগনফ্লাই সমস্ত ওপেন সোর্স)। কনসোলটির লগ করা মানগুলি কোথাও সঞ্চয় করতে হবে এবং এটি সেগুলি স্ক্রিনে প্রদর্শিত হবে। রেন্ডারিং নিশ্চিত হওয়ার জন্য অবিচ্ছিন্নভাবে ঘটবে (রেট-সীমা আপডেটে থ্রোলডড হওয়া), যেমন কনসোলে লগ-ইন করা অবজেক্টের সাথে ভবিষ্যতের মিথস্ক্রিয়া হবে (বস্তুর বৈশিষ্ট্য বাড়ানোর মতো)।
সুতরাং কনসোলটি আপনি যে লগইন করেছেন এমন পরিবর্তনীয় বস্তুগুলি ক্লোন (সিরিয়ালাইজ) করতে পারে, বা এটি তাদের কাছে রেফারেন্স সংরক্ষণ করবে। প্রথমটি গভীর / বৃহত অবজেক্টগুলির সাথে ভালভাবে কাজ করে না। এছাড়াও, কমপক্ষে কমপক্ষে প্রাথমিক রেন্ডারিং সম্ভবত অবজেক্টের "বর্তমান" অবস্থা প্রদর্শন করবে, যেমন এটি লগ হওয়ার পরে একটি - আপনার উদাহরণে আপনি দেখতে পাচ্ছেন Object {}
।
যাইহোক, আপনি যখন বস্তুটির বৈশিষ্ট্যগুলি আরও তদন্তের জন্য প্রসারিত করবেন তখন সম্ভবত কনসোলটি কেবলমাত্র আপনার অবজেক্ট এবং এর বৈশিষ্ট্যগুলির জন্য একটি রেফারেন্স সঞ্চিত করে রেখেছিল এবং এখনই এটি প্রদর্শিত হলে তাদের বর্তমান (ইতিমধ্যে রূপান্তরিত) অবস্থা প্রদর্শিত হবে। আপনি যদি ক্লিক করেন তবে আপনার উদাহরণটিতে সম্পত্তিটি +
দেখতে পারা উচিত bar
।
এখানে একটি স্ক্রিনশট যা বাগ রিপোর্টে তাদের "ফিক্স" ব্যাখ্যা করতে পোস্ট করা হয়েছিল :
সুতরাং, কিছু মানগুলি লগ-ইন করার অনেক পরে উল্লেখ করা যেতে পারে এবং এর মূল্যায়ন বরং অলস ("যখন প্রয়োজন")। এই বিচ্ছিন্নতার সবচেয়ে বিখ্যাত উদাহরণটি প্রশ্নটিতে পরিচালিত হয় ক্রমের জাভাস্ক্রিপ্ট কনসোলটি অ্যারেগুলি মূল্যায়ন করার ক্ষেত্রে কী অলস?
একটি কাজের ভিত্তি হ'ল সর্বদা আপনার বস্তুর সিরিয়ালযুক্ত স্ন্যাপশটগুলি লগ করা নিশ্চিত করা, যেমন করে console.log(JSON.stringify(obj))
। এটি কেবলমাত্র বিজ্ঞপ্তিবিহীন এবং ছোট ছোট বস্তুর জন্য কাজ করবে। আরও দেখুন কীভাবে আমি সাফারিতে কনসোল.লগের ডিফল্ট আচরণটি পরিবর্তন করতে পারি? ।
ডিবাগিংয়ের জন্য ব্রেকপয়েন্টগুলি ব্যবহার করা আরও ভাল সমাধান, যেখানে কার্যকরভাবে বন্ধ হয়ে যায় এবং আপনি প্রতিটি বিন্দুতে বর্তমান মানগুলি পরীক্ষা করতে পারেন। কেবল সিরিয়্যাল এবং অপরিবর্তনীয় ডেটা দিয়ে লগিং ব্যবহার করুন।