জেভাস্ক্রিপ্ট সামান্য ত্রুটি
- পূর্ববর্তী পৃষ্ঠা JS শ্রেষ্ঠ প্রয়োগ
- পরবর্তী পৃষ্ঠা JS কার্যকারিতা
এই চাপটি কিছু সাধারণ জেভাস্ক্রিপ্ট ত্রুটি উল্লেখ করে
অপসাংখ্যিক এসসিন্ট অপারেটর ব্যবহার করা হয়
যখন if
বাক্সে অপসাংখ্যিক এসসিন্ট অপারেটর ব্যবহার করা হয়=
), যেটি তুলনা অপারেটর নয়===
), তারপর জেভাস্ক্রিপ্ট প্রোগ্রাম অপ্রত্যাশিত ফলাফল উৎপন্ন করতে পারে
এই if
বাক্স ফিরে দেয় false
যেমন প্রত্যাশা করা হয়েছিল, কারণ x 10-এর সঙ্গে সমান নয়
var x = 0; if (x == 10)
এই if
বাক্স ফিরে দেয় true
যেমন প্রত্যাশা করা হয়নি, কারণ 10 true হয়
var x = 0; if (x = 10)
এই if
বাক্স ফিরে দেয় false
যেমন প্রত্যাশা করা হয়নি, কারণ 0 false হয়
var x = 0; if (x = 0)
অনুকূল বোঝানো হয়
আশা করা হয় লাঙ্ঘনীয় তুলনা
সাধারণ তুলনায়, ডাটা টাইপ অত্যন্ত গুরুত্বপূর্ণ নয় if
বাক্স ফিরে দেয় true
:
var x = 10; var y = '10';; if (x == y)
সুস্পষ্ট তুলনায়, ডাটা টাইপ তাৎপর্যপূর্ণ if
বাক্স ফিরে দেয় false
:
var x = 10; var y = '10';; if (x === y)
একটি সাধারণ ত্রুটি হল যখন switch
বাক্সে সত্যাপন করা হয়:
এই switch
বার্তাবাহক বাক্স দেখায়:
var x = 10; switch(x) { case 10: alert("Hello"); }
এই switch
বার্তাবাহক বাক্স দেখায় না:
var x = 10; switch(x) { case "10": alert("Hello"); }
ভ্রমণকারী যোগ এবং ক্যাটেনেশন
যোগযোগসংখ্যা。
ক্যাটেনেশন (Concatenation)যোগস্ট্রিং。
জেভাস্ক্রিপ্টে, এই দুইটি অপারেশনকেও একই +
অপারেটর
এই কারণে, সংখ্যা হিসাবে যোগ করা এবং সংখ্যা হিসাবে যোগ করা, ভিন্ন ফলাফল উৎপন্ন করতে পারে:
var x = 10 + 5; // x-এর ফলাফল 15 var x = 10 + '5'; // x-এর ফলাফল '105'
যদি দুটি বিন্যাস যোগ করা হয়, তবে ফলাফল অগ্রাহ্য হতে পারে:
var x = 10; var y = 5; var z = x + y; // z-এর ফলাফল 15 var x = 10; var y = '5';; var z = x + y; // z-এর ফলাফল '105'
ভ্রমণকারী ফ্লোটিং পয়েন্ট
জেভাস্ক্রিপ্টের সব সংখ্যা ৬৪ বিটের হিসাবে সংরক্ষিত হয়ফ্লোটিং (ফ্লোটস)}。
সমস্ত প্রোগ্রামিং ল্যাঙ্গুয়েজ, জেভাস্ক্রিপ্টও সহ, ফ্লোটিং পয়েন্ট হ্যান্ডলিংকে সমস্যা রয়েছে
ভ্যার এক্স = ০.১; ভ্যার ওয়ার = ০.২; ভ্যার জে = এক্স + ওয়ার // জেতে ফলাফল ০.৩ নয়
এই সমস্যা সমাধান করতে, গুণ-ভাগ করে ব্যবহার করুন:
প্রয়োগ
ভ্যার জে = (এক্স * ১০ + ওয়ার * ১০) / ১০; // জেতে ফলাফল ০.৩ হবে
জেভাস্ক্রিপ্ট স্ট্রিংকে বাক্রান্ত করা
জেভাস্ক্রিপ্ট একটি স্টেটমেন্টকে দুটি লাইনে ভাগ করতে অনুমতি দেয়
উদাহরণ 1
ভ্যার এক্স = "হেলো ওর্ল্ড!";
কিন্তু, স্ট্রিংকে মধ্যে বাক্রান্ত করা ভুল
উদাহরণ 2
ভ্যার এক্স = "হেলো ওর্ল্ড!";
যদি একটি স্ট্রিংকে বাক্রান্ত করতে হয়, তবে একটি রিভার্স স্ক্রোল ব্যবহার করতে হবে:
উদাহরণ 3
ভ্যার এক্স = "হেলো ", ওর্ল্ড!";
ভুল স্থানে সেকান্ড
একটি ভুল সেকান্ড কারণে, এই কোড ব্লক এক্সের মান কোনও কিছুই না মাথায় চলেছে
ইফ(এক্স == ১৯); { // কোড ব্লক }
রিটার্ন স্টেটমেন্টকে বাক্রান্ত করা
একটি লাইনের শেষে স্বয়ংক্রিয়ভাবে স্টেটমেন্টকে বন্ধ করা জেভাস্ক্রিপ্টের ডিফল্ট হার্ডওয়ার্ড
এই কারণে, নিচের দুটি উদাহরণও একই ফলাফল রিটার্ন করবে:
উদাহরণ 1
ফাংশন মাইফাংশন(এ) { ভ্যার পাওয়ার = 10 রিটার্ন এ * পাওয়ার }
উদাহরণ 2
ফাংশন মাইফাংশন(এ) { ভ্যার পাওয়ার = 10; রিটার্ন এ * পাওয়ার; }
জেভাস্ক্রিপ্ট একটি স্টেটমেন্টকে দুটি লাইনে ভাগ করতে অনুমতি দেয়
এই কারণে, উদাহরণ 3ও একই ফলাফল রিটার্ন করবে:
উদাহরণ 3
ফাংশন মাইফাংশন(এ) { ভ্যার পাওয়ার = 10; রিটার্ন এ * পাওয়ার; }
কিন্তু, যদি রিটার্ন
একটি স্টেটমেন্টকে দুটি লাইনে ভাগ করলে কী হবে?
উদাহরণ 4
ফাংশন মাইফাংশন(এ) { ভ্যার পাওয়ার = 10; রিটার্ন এ * পাওয়ার; }
এই ফাংশন একটি স্কোর রিটার্ন করবে undefined
!
কেন? কারণ জেভাস্ক্রিপ্ট আপনার ইচ্ছা হিসাবে বিবেচনা করে:
উদাহরণ 5
ফাংশন মাইফাংশন(এ) { ভ্যার পাওয়ার = 10; রিটার্ন; এ * পাওয়ার; }
ব্যাখ্যা
যদি একটি স্টেটমেন্ট অসম্পূর্ণ হয়:
ভ্যার
জেভাস্ক্রিপ্ট একটি পরবর্তী লাইনকে পড়ে এই স্টেটমেন্টকে সম্পূর্ণ করবে:
পাওয়ার = 10;
কিন্তু এই স্টেটমেন্টকে একটি সম্পূর্ণ স্টেটমেন্ট হিসাবে বিবেচনা করা হয়:
রিটার্ন
জেভাস্ক্রিপ্ট একটি স্টেটমেন্টকে স্বয়ংক্রিয়ভাবে বন্ধ করবে:
রিটার্ন;
এই ঘটনা হয়েছে কারণ, জেভাস্ক্রিপ্টে, একটি স্টেটমেন্টকে সমাপ্ত করতে সেকান্ড অপশনাল
জেভাস্ক্রিপ্ট একটি লাইনের শেষে বন্ধ হয় রিটার্ন
একটি সম্পূর্ণ স্টেটমেন্ট বলেই হয়
কোনও স্টেটমেন্টকে কখনও নিয়ে আসতে পারেন না রিটার্ন
একটি স্টেটমেন্ট নিয়ে বাক্রান্ত করা
একটি নামকৃত ইনডেক্স দ্বারা আর্রেইজ পরিবর্তন করা
অনেক প্রোগ্রামিং ভাষা নামগত নিয়ন্ত্রক বিশিষ্ট আকারকে সমর্থন করে।
নামগত নিয়ন্ত্রক বিশিষ্ট আকারকে সংযুক্ত আকার (বা হ্যাশ) বলা হয়
JavaScript সমর্থিত নয়নামগত নিয়ন্ত্রক বিশিষ্ট আকার
জেভাস্ক্রিপ্টে,আকারব্যবহার করুননম্বর নিয়ন্ত্রক:
প্রয়োগ
var person = []; person[0] = "Bill"; person[1] = "Gates"; person[2] = 46; var x = person.length; // person.length 3 ফলাফল দেবে var y = person[0]; // person[0] "Bill" ফলাফল দেবে
জেভাস্ক্রিপ্টে,অবজেক্টব্যবহার করুননামগত নিয়ন্ত্রক。
যদি আপনি নামগত নিয়ন্ত্রক ব্যবহার করেন, তবে JavaScript-এর আকার নিয়ন্ত্রককে স্বতঃস্ফূর্ত প্রতিশব্দ হিসাবে পরিবর্তন করবে:
স্বয়ংক্রিয়ভাবে পুনর্নির্ধারণ পরে, আকার পদ্ধতি এবং বৈশিষ্ট্যগুলি অসম্মানিত বা অসঠিক ফলাফল উৎপন্ন করতে পারে:
প্রয়োগ
var person = []; person["firstName"] = "Bill"; person["lastName"] = "Gates"; person["age"] = 46; var x = person.length; // person.length 0 ফলাফল দেবে var y = person[0]; // person[0] অসম্মানিত ফলাফল দেবে
পশ্চাত্তর কমা ব্যবহার করে নির্ধারণ শেষ করুন
অবজেক্ট এবং আকার নির্ধারণগুলিতের পশ্চাত্তর কমা ECMAScript 5-এ বৈধ:
অবজেক্ট ইনস্ট্যান্স:
person = {firstName:"Bill", lastName:"Gates", age:62,};
আকার ইনস্ট্যান্স:
points = [35, 450, 2, 7, 30, 16,];
সতর্কতা !!
ইন্টারনেট এক্সপ্লোরার 8 ভাঙ্গা হতে পারে।
JSON-এর পশ্চাত্তর কমা নিষিদ্ধ:
JSON:
person = {firstName:"Bill", lastName:"Gates", age:62};
JSON:
points = [35, 450, 2, 7, 30, 16];
অসম্মানিত নাল খালি নয়
JavaScript অবজেক্ট, বদলগুলি, বৈশিষ্ট্য এবং পদ্ধতিগুলি অসম্মানিত হতে পারে।
এছাড়া, খালি JavaScript অবজেক্টের মান হতে পারে: null
。
এটা পরীক্ষামূলক বস্তুটি কিনা খালি হওয়ার বিষয়টি কমই কঠিন করতে পারে।
আপনি পরীক্ষা করতে পারেন যে, সময়টির ধরন কী হতে পারে: undefined
، কিনা পরীক্ষামূলক বস্তু সম্ভব হতে পারে পরীক্ষা করুন:
প্রয়োগ
if (typeof myObj === "undefined")
কিন্তু আপনি অবজেক্টটি কি undefined না হয় তা পরীক্ষা করতে পারেন না: null
،কারণ যদি অবজেক্ট নালক্ষণ হয়, একটি ত্রুটি ফেলে যাবে:
ভুল
if (myObj === null)
এই সমস্যা সমাধান করতে, অবজেক্টটি কি null হয় না তা পরীক্ষা করতে হবে: null
,নালক্ষণের পরিবর্তে
কিন্তু এটা তবুমাত্র একটি ত্রুটি উত্থাপন করবে:
ভুল
if (myObj !== null && typeof myObj !== "undefined")
তাই, নল কোনও নালক্ষণ প্রতিক্ষা করার আগে, এটা প্রথমে পরীক্ষা করা উচিত:
সঠিক
if (typeof myObj !== "undefined" && myObj !== null)
ব্লক স্কোপকে প্রত্যাশা করে না
JavaScript কিন্তুপ্রত্যেক কোড ব্লক এর জন্য একটি নতুন স্কোপ তৈরি করে
অনেক প্রোগ্রামিং ভাষা এমনই করে, কিন্তু JavaScript এটা ভুল。
এই কোডটি যে ফলাফল দেবে বলে undefined
,এটা একজন নতুন JavaScript ডেভেলপারের সাধারণ ত্রুটি হয়:
প্রয়োগ
for (var i = 0; i < 10; i++) { // কোড ব্লক } return i;
- পূর্ববর্তী পৃষ্ঠা JS শ্রেষ্ঠ প্রয়োগ
- পরবর্তী পৃষ্ঠা JS কার্যকারিতা