Tên biến (identifier) trong JavaScript tuân theo quy tắc Unicode (Unicode Identifier Grammar). Dưới đây là quy tắc chi tiết và ví dụ.
Quy tắc Syntax (Bắt buộc)
- Ký tự đầu tiên: Phải là
UnicodeIDStart– chữ cái (a-z, A-Z, Unicode letter),_(underscore), hoặc$(dollar sign). Không được bắt đầu bằng số (0-9). - Ký tự tiếp theo:
UnicodeIDContinue– bao gồm ký tự đầu + số (0-9),\u200C(ZWNJ),\u200D(ZWJ). - Không được trùng Reserved Words:
class,function,let,const,await... (xem danh sách reserved words). - Phân biệt chữ hoa/thường:
name≠Name≠NAME. - Không giới hạn độ dài (thực tế engine limit ~2^30).
Ví dụ HỢP LỆ
// ASCII cơ bản
var name;
var _private;
var $element;
var userName;
var user_name;
var user123;
var _123test;
// Unicode (ES6+)
var 名前 = "Japanese";
var переменная = "Russian";
var переменная123 = "OK";
// Dấu $ phổ biến trong library (jQuery: $, Angular: $$)
var $ = "jQuery alias";
var $$ = "Angular";
// Dấu _ cho private convention
var _internal = "hidden";
Ví dụ KHÔNG HỢP LỆ
var 2name; // ❌ Bắt đầu bằng số
var user-name; // ❌ Dấu gạch ngang
var my var; // ❌ Khoảng trắng
var class; // ❌ Reserved word
var export; // ❌ Reserved word
var await; // ❌ Reserved (module)
var let; // ❌ Reserved
var const; // ❌ Reserved
var 你好世界; // ❌ Ký tự CJK không phải ID_Start (cần chữ cái đầu)
Kiểm tra identifier hợp lệ (Programmatic)
// Cách 1: Function constructor (an toàn, không eval)
function isValidIdentifier(str) {
try {
new Function(`var ${str} = 1;`);
return true;
} catch {
return false;
}
}
console.log(isValidIdentifier("myVar")); // true
console.log(isValidIdentifier("2name")); // false
console.log(isValidIdentifier("class")); // false
console.log(isValidIdentifier("我的变量")); // true
// Cách 2: Regex (xấp xỉ, không cover full Unicode)
const identifierRegex = /^[$A-Z_a-z][$\w]*/u; // \w bao gồm Unicode letter/number/underscore
Quy ước đặt tên (Naming Conventions)
| Loại | Convention | Ví dụ |
|---|---|---|
| Biến, hàm, tham số, property | camelCase | userName, getUser() |
| Class, Constructor, Component | PascalCase | UserAccount, Button |
| Hằng số toàn cục | UPPER_SNAKE_CASE | MAX_SIZE, API_URL |
| Private/Internal (convention) | _camelCase | _cache, _calcTotal() |
| Boolean | is/has/can/should + PascalCase | isActive, hasError |
Lưu ý đặc biệt
$và_thường dùng cho: library globals (jQuery$), private convention, generated code, template placeholders.- Tránh dùng
$làm tên biến đơn lẻ (var $ = 1) – gây nhầm lẫn với jQuery. - Unicode identifier: Hỗ trợ đầy đủ từ ES6, nhưng team nên thống nhất dùng ASCII để dễ đọc/tìm kiếm.
- Keywords contextual (
await,yield,static,async) có thể dùng làm property name:obj.await = 1OK, nhưngvar await = 1lỗi trong module.