ການສົງໃສຊີບີເຈັກ

本章指出一些常见的 JavaScript 错误。

意外使用赋值运算符

如果程序员在 if ການປະຕິບັດທີ່ບໍ່ຄາດຫວັງໃນຄຳປະຕິບັດ=)ທີ່ບໍ່ແມ່ນການປະຕິບັດການປະກັນ===),JavaScript 程序可能会产生一些无法预料的结果。

ຄຳປະຕິບັດນີ້ 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");
}

ທ້າທາຍສະແດງ

ການສະຖິຕິແລະການສະຖິຕິຫລັງຈາກຫລັງທີ່ຜິດຫວັງ

ການສະຖິຕິສະຖິຕິຄຳທີ່ສະຖິຕິ

ການສະຖິຕິຫລັງຈາກຫລັງສະຖິຕິຄຳທີ່ສະຖິຕິ

ໃນ JavaScript ທັງສອງການປະຕິບັດຈະໃຊ້ຄົນປະຕິບັດດຽວກັນ + ຄົນປະຕິບັດ

ຍ້ອນນັ້ນຈະມີຄວາມແຕກຕ່າງລະຫວ່າງການສະຖິຕິຈະນັດບາງຄຳທີ່ສະຖິຕິຈະນັດຄຳທີ່ສະຖິຕິຈະນັດຄຳ:

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"

ທ້າທາຍສະແດງ

ຄວາມຜິດພາດຂອງອັດຕານີ

ພວກມັນຈະບັນທຶກໃນ 64 ບຸນບາດໃນ JavaScriptການຄົ້ນຄວ້າຂອງຈຳນວນສະເພາະການກະຈາຍ

ທຸກພະຍານການກົດຫມາຍທຸກຢ່າງໃນ JavaScript

var x = 0.1;
var y = 0.2;
var z = x + y             // z 中的结果并不是 0.3

ທ້າທາຍສະແດງ

ເພື່ອແກ້ໄຂບັນຫານັ້ນ,ກະຕຸ້ນນຳໃຊ້ການກະຕຸ້ນການກະຈາຍ

ຄວາມນັບນິວ

var z = (x * 10 + y * 10) / 10;       // z 中的结果将是 0.3

ທ້າທາຍສະແດງ

ການສະແດງຄືນຄຳສັບການ JavaScript

JavaScript ອະນຸຍາດໃຫ້ຄຳສັ່ງສະແດງຄືນເປັນສອງປະເພດ:

ຕົວຢ່າງ 1

var x =
"Hello World!";

ທ້າທາຍສະແດງ

ແຕ່ວ່າການສະແດງຄືນໃນຄຳສັບການທີ່ຢູ່ບາງບ່ອນບໍ່ຖືກຕ້ອງ

ຕົວຢ່າງ 2

var x = "Hello
World!";

ທ້າທາຍສະແດງ

ຖ້າຕ້ອງສະແດງຄືນໃນຄຳສັບການ

ຕົວຢ່າງ 3

var x = "Hello ",
World!";

ທ້າທາຍສະແດງ

ສັນຍາການສະແດງຄືນທີ່ຜິດທີ່ຕັ້ງຢູ່

ຍ້ອນວ່າມີສັນຍາການສະແດງຄືນທີ່ຜິດ

if (x == 19);
{
     // code block
}

ທ້າທາຍສະແດງ

ການສະແດງຄຳສັ່ງ return

ການປິດຄຳສັ່ງທີ່ທີ່ຫຼັງແມ່ນພົບການປະຕິບັດຄືນຈາກ JavaScript

ຍ້ອນວ່າຕົວຢ່າງດຽວກັນຈະກັບຄືນຕົວຢ່າງດຽວກັນ:

ຕົວຢ່າງ 1

function myFunction(a) {
    var power = 10  
    return a * power
}

ທ້າທາຍສະແດງ

ຕົວຢ່າງ 2

function myFunction(a) {
    var power = 10;
    return a * power;
}

ທ້າທາຍສະແດງ

JavaScript ຈະອະນຸຍາດໃຫ້ຄຳສັ່ງສະແດງຄືນເປັນສອງປະເພດ.

ຍ້ອນວ່າຕົວຢ່າງ 3 ຈະກັບຄືນຕົວຢ່າງດຽວກັນ:

ຕົວຢ່າງ 3

function myFunction(a) {
    var
    power = 10;  
    return a * power;
}

ທ້າທາຍສະແດງ

ແຕ່ຖ້າພົບຫຍັງ return ພົບຫຍັງຖ້າຄຳສັ່ງສະແດງຄືນເປັນສອງປະເພດ?

ຕົວຢ່າງ 4

function myFunction(a) {
    var
    power = 10;  
    return
    a * power;
}

ທ້າທາຍສະແດງ

ການກັບຄືນຂອງຕົວຢ່າງນັ້ນແມ່ນ: undefined

ເປັນຫຍັງ? ຍ້ອນວ່າ JavaScript ພິຈະລະນາວ່າ

ຕົວຢ່າງ 5

function myFunction(a) {
     var
    power = 10;  
    return;
    a * power;
}

ທ້າທາຍສະແດງ

ການອະທິບາຍ

ຖ້າຄຳສັ່ງບໍ່ແມ່ນຄຳສັ່ງທີ່ສົມບູນ:

var

JavaScript ຈະສະໜອງຄຳສັ່ງນັ້ນດ້ວຍການອ່ານປະເພດປະຈຳຈົນກັນ

power = 10;

ແຕ່ຍ້ອນຄຳສັ່ງນັ້ນເປັນຄຳສັ່ງທີ່ສົມບູນ:

return

JavaScript ຈະປິດຄຳສັ່ງນັ້ນອອກໂດຍອົງການຕອບສະໜອງ

return;

ການເກີດຂອງຄຳສັ່ງນັ້ນເປັນຍ້ອນວ່າໃນ JavaScript

JavaScript ຈະປິດຄຳສັ່ງທີ່ທີ່ຫຼັງ return ຄຳສັ່ງນັ້ນເອງແມ່ນຄຳສັ່ງທີ່ສົມບູນ

ແຕ່ບໍ່ຕ້ອງການກັບ return ຄຳສັ່ງສະແດງຄືນ

ການເຂົ້າເຖິງອາກາດດ້ວຍບັນທານຊື່

ຫຼາຍວິທະຍາສາດນຳໃຊ້ Array ທີ່ມີບັນດາຄຳສິນຊື່

Array ທີ່ມີບັນດາຄຳສິນຊື່ເອີ້ນວ່າ Array Associated (ຫຼື Hash)

JavaScript ບໍ່ສາມາດນຳໃຊ້Array ທີ່ມີບັນດາຄຳສິນຊື່

ໃນ JavaScriptArrayນຳໃຊ້ບັນດາຄຳສິນທີ່ເປັນຈຳນວນ:

ຄວາມນັບນິວ

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"

ທ້າທາຍສະແດງ

ໃນ JavaScriptObjectນຳໃຊ້ບັນດາຄຳສິນຊື່

ຖ້າທ່ານນຳໃຊ້ບັນດາຄຳສິນຊື່ໃນການເຂົ້າຫາວັດສະດຸແບບສະເພາະຈະເຮັດໃຫ້ JavaScript ປ່ຽນຊະນວນວັດສະດຸເປັນວັດສະດຸແບບເປັນປະເພດເອກະສານ

ຫຼັງຈາກການປ່ຽນຊະນວນຄືນຢ່າງອັດຕະພາບໃນການນຳໃຊ້ວິທີການຫຼືບັນດາລະບຽບຂອງວັດສະດຸຈະສ້າງຄື "undefined" ຫຼື "incorrect"

ຄວາມນັບນິວ

var person = [];
person["firstName"] = "Bill";
person["lastName"] = "Gates";
person["age"] = 46;
var x = person.length;         // person.length ຈະກັບຄື 0
var y = person[0];              // person[0] ຈະກັບຄື "undefined"

ທ້າທາຍສະແດງ

ນຳໃຊ້ຄຳສິນທີ່ສິນຫຼັງເພື່ອສິ້ນສຸດການອະທິບາຍ

ຄຳສິນຫຼັງພາຍໃນການອະທິບາຍ Object ແລະ Array ແມ່ນຖືກອະນຸຍາດໃນ ECMAScript 5

ຄວາມຍັງມີຢ່າງດັ່ງກ່າວ

person = {firstName:"Bill", lastName:"Gates", age:62,}

ຄວາມຍັງມີຢ່າງດັ່ງກ່າວ

points = [35, 450, 2, 7, 30, 16,];

ເຕືອນ !!

Internet Explorer 8 ຈະລົ້ມ

JSON ບໍ່ອະນຸຍາດຄຳສິນທີ່ສິນຫຼັງ

JSON:

person = {firstName:"Bill", lastName:"Gates", age:62}

JSON:

points = [35, 450, 2, 7, 30, 16];

Undefined ບໍ່ແມ່ນ Null

JavaScript Object, Variable, Property, Method ສາມາດບໍ່ມີຄວາມຈິງ

ຍັງມີຄວາມສາມາດສຳລັບບັນດາວັດສະດຸ JavaScript ທີ່ບໍ່ມີຄວາມຈິງ null

ນີ້ອາດຈະເຮັດໃຫ້ການທົດລອງວ່າບັນດາວັດສະດຸມີຢູ່ຫຼືບໍ່ຈະມີຍາກຫຼາຍ

ທ່ານສາມາດທົດລອງວ່າປະເພດມີ undefinedການທົດລອງວ່າບັນດາວັດສະດຸມີຢູ່ຫຼືບໍ່

ຄວາມນັບນິວ

if (typeof myObj === "undefined")

ທ້າທາຍສະແດງ

ມັນບໍ່ສາມາດທົດສອບວ່າວັດຖຸມີອາການຫນັງໄວ້ຫຼືບໍ່: nullຍ້ອນວ່າຖ້າວັດຖຸບໍ່ມີອາການຫນັງໄວ້ຈະປະກາດຄຳຜິດພາດ:

ທີ່ບໍ່ຖືກຕ້ອງ:

if (myObj === null)

ເພື່ອແກ້ໄຂບັນຫານີ້ຕ້ອງທົດສອບວ່າວັດຖຸມີອາການຫນັງໄວ້ຫຼືບໍ່: nullບໍ່ແມ່ນ undefined.

ດ້ວຍນັ້ນຈະມີຄວາມຜິດພາດດັ່ງກ່າວ:

ທີ່ບໍ່ຖືກຕ້ອງ:

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;

ທ້າທາຍສະແດງ