জেভাস্ক্রিপ্ট সামান্য ত্রুটি

এই চাপটি কিছু সাধারণ জেভাস্ক্রিপ্ট ত্রুটি উল্লেখ করে

অপসাংখ্যিক এসসিন্ট অপারেটর ব্যবহার করা হয়

যখন 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;

স্বয়ংক্রিয় চেষ্টা করুন