Như các bạn thấy đó, Javascript là một ngôn ngữ cực kỳ thân thiện đối với các lập trình viên. Nó rất dễ viết, dễ hiểu, free-typed nên các bạn không cần định nghĩa trước các biến và kiểu dữ liệu. Nếu bạn đang lập trình trên Java hoặc C++, đảm bảo các bạn sẽ bắt đầu cực nhanh với Javascript.
Javascript có rất nhiều gotchas rất thú vị. Khi lập trình Javascript, các bạn sẽ gặp các vấn đề rất hài hước sau đây:
Return
Trả về giá trị trong ngôn ngữ Javascript sẽ như thế này này:
return
{
me: "Jam"
}
// cách trả về sai. Javascript không trả về thế này!
Cách làm đúng thế này:
// cách làm đúng
return "A";
return { mode: "driver"};
// hoặc
return [
"me", "you", "we"
];
Switch và break
Không giống như các ngôn ngữ khác, khi bạn lập trình với Javascript thì chú ý các điều sau đây:
// sai
switch ( condition ) {
case 0: text = "A";
case 1: text = "B";
}
Như thế này mới đúng:
// sai
switch ( condition ) {
case 0: text = "A"; break;
case 1: text = "B"; break;
default: text = "C";
}
parseInt
Hàm này convert một kiểu string sang kiểu số. Tuy nhiên hàm này có biến số nên các bạn cần để ý, IE9 và một số trình duyệt cũ sẽ cho ra kết quả khác nhau:
// sai
parseInt("010"); // ra 10
parseInt("010"); // IE 9 ra 8
Đúng
parseInt("010", 10); // cùng ra kết quả 10
Hàm Date()
Giống như Java, hàm Date() trả về một cơ số Object nhưng ngày thì bắt đầu bằng số 1, còn tháng lại bắt đầu bằng 0:
var date = new Date(2021, 2, 15);
date.getDate(); // 15
date.getDay(); // 1
date.getMonth(); // 1
date.getFullYear(); // 2021
Điều kỳ cục đây này, các bạn chú ý nhá:
var day = day.getDate(); // ngày
var month = day.getMonth() + 1; // tháng
Phép toán làm khó Java và Javascript
Có một cái phép toán làm khó cả hai ngôn ngữ lập trình này, kaka:
var total = 0.1 + 0.2;
console.info(total); // ra 0.3000000000000004
Để correct được phép toán này thì có nhiều cách, các bạn có thể làm dài dòng thế này:
parseFloat( (0.1 + 0.2).toPrecision(5) );
Phiền phức chưa 😀
NaN là một số
NaN là một số, NaN là viết tắt của Not A Number. Sao nó lại là một số nhỉ?
typeof NaN === 'number'; // true
Và nếu bạn compare thế này thì nó luôn trả về false:
NaN == NaN; // false
NaN === NaN; // false
parseInt("Chào") === parseInt("Chào"); // false
Cách tốt nhất để kiểm tra có phải nó là một số hay không bằng hàm này:
if ( isNaN("Chào") ) {} // true
Cẩn thận với phép cộng
1 + "2" = 12; // ối dồi ôi
123 + [456] = 123456; // haha
{} + {} = NaN;
{} + [] = 0;
[] + {} = "object Object";
Null và Undefined
Chú ý Null là một giá trị, còn Undefined là chưa xác định. Khi compare hai giá trị này các bạn cần lưu ý:
Null == Undefined; // true
Null === Undefined; // false
Mảng trong Javascript, thêm element vào mảng
Javascript không giống PHP hoặc một vài ngôn ngữ khác. Bạn không thể thêm vào mảng bằng cách này:
var AR = ["A", "B"];
AR[3] = "C"; // hỏng: ["A", "B", undefined, "C"]
AR[1] = "C"; // ["A", "C"]
Muốn thêm Element vào trong một mảng?
AR.push("Mì");
Trong Javascript, typeof array là object
Javascript, bạn cần phải check nếu là mảng bằng hàm Array.isArray(); không dùng typeof được!
typeof [] = "object";
typeof {} = "object"; // haha!
let, var và const
let khai báo một biến, cho phép gán lại nhưng không định nghĩa lại.
var thì thoải mái, khai báo lại, ghi đè, gán giá trị …
const: Không gán lại, không ghi đè…
let vat = "VAT";
vat = "CH"; // OKAY
var vat = "C"; // ERROR
----------------
const vay = "VAC";
vay = "VAK"; // lỗi
Còn gì nữa mà khi lập trình với Javascript các bạn vướng mắc nhỉ? Comment nha!
À mà, Javascript là ngôn ngữ free-typed nên khó làm các dự án lớn. Các bạn có thể tham khảo thêm bài học TypeScript để có thể xài Javascript như một ngôn ngữ Strong Typed. Phê lắm nhá!