jsrosetta

Cơ bản

Biến và hằng

const, let trong Node.js tương ứng với gì ở Go, Rust, Swift và Java.

Trong JavaScript bạn quen với hai từ khoá: const (không gán lại được) và let (gán lại được). Hầu hết các ngôn ngữ khác cũng tách hai khái niệm này, chỉ khác tên gọi và mặc định.

Khai báo cơ bản

const name = "neko"; // không gán lại được
let count = 0;       // gán lại được
count += 1;
 
console.log(name, count);
Node.js Go Rust Swift Java
const const (chỉ giá trị compile-time) let let final
let var / := let mut var biến thường / var

Hằng số compile-time

const trong JavaScript chỉ chặn việc gán lại, còn giá trị có thể được tính lúc chạy. Các ngôn ngữ khác thường có thêm một loại hằng được tính lúc biên dịch.

const MAX_USERS = 100;
const startedAt = Date.now(); // vẫn hợp lệ: tính lúc chạy

Giá trị mặc định khi chưa gán

JavaScript cho undefined. Go gán zero value theo kiểu. Các ngôn ngữ còn lại bắt bạn gán trước khi dùng.

let title;
console.log(title); // undefined

const không có nghĩa là bất biến

Trong JavaScript, const chỉ khoá tham chiếu. Object bên trong vẫn sửa được. Ngôn ngữ khác xử lý chuyện này rất khác nhau:

const user = { name: "neko" };
user.name = "tama"; // hợp lệ
Object.freeze(user); // muốn khoá thật phải freeze

Tham khảo: github.com/miguelmota/golang-for-nodejs-developers#variables