Silent Errors
জাভাস্ক্রিপ্ট নিঃশব্দে ব্যর্থ হতে পারে।
একটি নীরব ত্রুটি আপনার প্রোগ্রাম বন্ধ করে না. আন্দোলন চলবে।
নীরব ত্রুটির কারণ ঐতিহাসিক:
জাভাস্ক্রিপ্টের প্রথম সংস্করণে ধরা পড়েনি... ব্যতিক্রম চেষ্টা করুন।
দ্রষ্টব্য:
নীরব ত্রুটিগুলি ব্যতিক্রমগুলি ফেলে না বা মৃত্যুদন্ড বন্ধ করে না, তবে এখনও যুক্তির ত্রুটি, অপ্রত্যাশিত আচরণ বা সমস্যা যা ব্যর্থতার কারণ যা মিস করা সহজ।
উদাহরণ
নীরব ত্রুটি আপনার প্রোগ্রাম বন্ধ না.
let x = 1 / 0;
দ্রষ্টব্য:
উপরের কোডটি একটি অসীম মান তৈরি করে, কিন্তু একটি ত্রুটি নিক্ষেপ করে না। এটি একটি নীরব ত্রুটির উদাহরণ।
বরাদ্দ, তুলনা নয়
let result = "সক্রিয় নয়।"; let isActive = মিথ্যা; // ❌ অ্যাসাইনমেন্ট, তুলনা নয় যদি (isActive = true) { let result = "সক্রিয়!"; }
ব্যাখ্যা
(isActive = true) (isActive == সত্য) এর সাথে সমতা পরীক্ষা না করেই, isActive-কে true নির্ধারণ করে।
পরের লাইনটি নিঃশব্দে চলে এবং বলে "সক্রিয়!" এটি প্রিন্ট করে, এমনকি যদি isActive মিথ্যা হয়।
সঠিক পদ্ধতি:
তুলনা করতে === (কঠোর সমতা) বা == (সমতা) অপারেটর ব্যবহার করুন:
// সঠিক: কঠোর সমতা যদি (সক্রিয় === সত্য) { let result = "সক্রিয়!"; } // বা আরও ভাল: যদি (সক্রিয়) { let result = "সক্রিয়!"; }
নীরব ত্রুটি যা NaN তৈরি করে
অনেক সাংখ্যিক ক্রিয়াকলাপ যা ব্যর্থ হয় একটি NaN তৈরি করে (একটি ব্যতিক্রম নয়)।
জাভাস্ক্রিপ্ট ক্র্যাশ হবে না। এটি নীরবে আপনাকে NaN ফেরত দেয় এবং চলতে থাকে।
// NaN - কোন ত্রুটি নেই, শুধু খারাপ ডেটা const ফলাফল = parseInt("abc");
আরও NaN প্রজন্মের উদাহরণ:
// খালি স্ট্রিং থেকে সংখ্যায় রূপান্তর করুন let num1 = Number(""); // 0 (শান্ত!) let num2 = parseInt(""); // NaN let num3 = Number(""); // 0 (শান্ত!) // অনির্ধারিত মান সহ ফাংশন let value1 = undefined + 5; // NaN let value2 = null *10; // 0 (শান্ত!) // ভুল গণিত অপারেশন let calc1 = Math.sqrt(-1); // NaN চলুন calc2 = 0 / 0; // NaN let calc3 = Infinity/Infinity; // NaN
NaN পরীক্ষা:
NaN একটি বিশেষ মান যা সবসময় নিজের সমান হয় না। NaN পরীক্ষা করতে isNaN() বা Number.isNaN() ব্যবহার করুন:
let result = parseInt("abc"); console.log(isNaN(ফলাফল)); // সত্য console.log(Number.isNaN(ফলাফল)); // সত্য console.log(ফলাফল === NaN); // মিথ্যা (সর্বদা মিথ্যা!)
অস্তিত্বহীন বৈশিষ্ট্য অ্যাক্সেস করা
একটি অস্তিত্বহীন সম্পত্তি অ্যাক্সেস করা নিঃশব্দে অনির্ধারিত ফিরে আসে।
const user = {};
let result = user.name;
আরো উদাহরণ:
// মাল্টি-লেয়ার অ্যাট্রিবিউট অ্যাক্সেস const ডেটা = { ব্যবহারকারী: { প্রোফাইল: {} } }; let name = data.user.profile.name; // অনির্ধারিত যাক বয়স = data.user.profile?.age; // ঐচ্ছিক চেইনিং: অনির্ধারিত // অ্যারে অ্যাক্সেস const arr = [1, 2, 3]; যাক আইটেম = arr[10]; // অনির্ধারিত let length = arr.length; // 3 let nonexistent = arr.nonexistentProperty; // অনির্ধারিত // ফাংশন প্যারামিটার ফাংশন শুভেচ্ছা (নাম) { console.log("হ্যালো," + নাম); // নাম অনির্ধারিত হতে পারে } greet(); // "হ্যালো, অনির্ধারিত"
সুরক্ষিত বৈশিষ্ট্য অ্যাক্সেস:
ঐচ্ছিক চেইনিং (?.) এবং নালিশ কোলেসিং (??) অপারেটর ব্যবহার করে নীরব ত্রুটিগুলি এড়িয়ে চলুন:
// Optional chaining
let userName = user?.profile?.name; // undefined if any property is missing
// Nullish coalescing
let displayName = user?.name ?? "Guest"; // "Guest" if user.name is null/undefined
// Default parameters
function getUser(id = 0) {
return users.find(u => u.id === id) ?? {name: "Unknown"};
}
টাইপ রূপান্তর নীরব ত্রুটি
জাভাস্ক্রিপ্ট অপারেটর অনুযায়ী ভিন্ন ধরনের রূপান্তর করে।
টাইপ কনভার্সন ত্রুটি লুকায়। প্রোগ্রাম চলতে থাকে, কিন্তু যুক্তি ভুল.
let result1 = ('5' + '2');
let result2 = ('5' - '2');
বর্ণনা:
console.log('5' + '2'); // "52" ( )
console.log('5' - '2'); // 3 ( )
console.log('5' * '2'); // 10 ( )
console.log('5' / '2'); // 2.5 ( )
console.log('5' == 5); // true ( )
console.log('5' === 5); // false ( )
বিপজ্জনক ধরনের পরিবর্তনের উদাহরণ:
// অপ্রত্যাশিত স্ট্রিং সংযোগ যাক যোগফল = 5 + "2"; // "52" (স্ট্রিং) let diff = 5 - "2"; // 3 (সংখ্যা) // বুলিয়ান রূপান্তর let trueful1 = বুলিয়ান("false"); // সত্য (খালি স্ট্রিং) let trueful2 = বুলিয়ান(0); // মিথ্যা let trueful3 = বুলিয়ান("0"); // সত্য // অপ্রত্যাশিত তুলনা console.log(0 == মিথ্যা); // সত্য console.log('' == মিথ্যা); // সত্য console.log(null == undefined); // সত্য console.log([] == মিথ্যা); // সত্য console.log([0] == মিথ্যা); // সত্য
সর্বোত্তম অনুশীলন:
টাইপ রূপান্তর নীরব ত্রুটি এড়াতে:
// সর্বদা কঠোর সমতা ব্যবহার করুন (===, !==) যদি (মান === 5) { /* ... */ } // স্পষ্ট টাইপ রূপান্তর let num = Number(input); let str = স্ট্রিং(মান); let bool = বুলিয়ান(ডেটা); // parseInt/parseFloat এর জন্য দ্বিতীয় প্যারামিটার ব্যবহার করুন let int = parseInt("123abc", 10); // 123 let float = parseFloat("12.34px"); // 12.34
আরো নীরব ত্রুটি উদাহরণ
ইনফিনিটি ফাংশন
let x = 1 / 0; // Infinity
let y = -1 / 0; // -Infinity
let z = Infinity * 0; // NaN
ইনফিনিটির সাথে ম্যাথ ভুল করে না, কিন্তু NaN বা ইনফিনিটি ফেরত দেয়।
অপারেশনের ভুল ক্রম
let arr = [1, 2, 3];
let item = arr[10]; // undefined
arr[5] = 6; // Creates sparse array
arr.length; // 6
সীমার বাইরে অ্যারে অ্যাক্সেস অনির্ধারিত প্রদান করে, একটি ত্রুটি নয়।
ফাংশন কল
function greet(name) {
return "Hello, " + name;
}
greet(); // "Hello, undefined"
greet(undefined); // "Hello, undefined"
ফাংশন নীরবে অনির্ধারিত ব্যবহার করে যখন কোন আর্গুমেন্ট থাকে না।
নীরব ত্রুটি প্রতিরোধ
আরও দেখুন:
JavaScript Errors
জাভাস্ক্রিপ্ট ত্রুটিগুলি সম্পর্কে জানুন যা ব্যতিক্রমগুলি নিক্ষেপ করে৷
JavaScript Error Statements
ত্রুটি বিবৃতি এবং তাদের সিনট্যাক্স সম্পর্কে জানুন
JavaScript Error Object
জাভাস্ক্রিপ্ট ত্রুটি অবজেক্ট এবং এর বৈশিষ্ট্য সম্পর্কে জানুন
JavaScript Debugging
জাভাস্ক্রিপ্ট ত্রুটিগুলি খুঁজে বের করা এবং ঠিক করার বিষয়ে জানুন৷
জাভাস্ক্রিপ্ট সাইলেন্ট এররস টিউটোরিয়াল
নীরব বাগ সম্পর্কে আপনার জ্ঞান পরীক্ষা করার জন্য এই অনুশীলনটি চেষ্টা করুন।