Computer >> Hướng Dẫn Máy Tính >  >> Lập Trình >> JavaScript

Các ký tự hợp lệ cho tên biến JavaScript

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)

  1. 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).
  2. Ký tự tiếp theo: UnicodeIDContinue – bao gồm ký tự đầu + số (0-9), \u200C (ZWNJ), \u200D (ZWJ).
  3. Không được trùng Reserved Words: class, function, let, const, await... (xem danh sách reserved words).
  4. Phân biệt chữ hoa/thường: name ≠ Name ≠ NAME.
  5. 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ạiConventionVí dụ
Biến, hàm, tham số, propertycamelCaseuserName, getUser()
Class, Constructor, ComponentPascalCaseUserAccount, Button
Hằng số toàn cụcUPPER_SNAKE_CASEMAX_SIZE, API_URL
Private/Internal (convention)_camelCase_cache, _calcTotal()
Booleanis/has/can/should + PascalCaseisActive, 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 = 1 OK, nhưng var await = 1 lỗi trong module.