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

Có bắt buộc định nghĩa kiểu dữ liệu khi khai báo biến JavaScript không?

Không. JavaScript là ngôn ngữ kiểu động (dynamically typed) – biến không gắn liền kiểu dữ liệu. Bạn chỉ khai báo tên biến bằng var/let/const, kiểu được xác định bởi giá trị gán vào tại runtime.

So sánh với ngôn ngữ kiểu tĩnh (Static Typing)

Đặc điểmC/C++, Java, C# (Static)JavaScript (Dynamic)
Khai báo biếnint x;, String s;let x;, const s = ""
Kiểu biếnCố định (int, String...)Không có (biến chỉ là tên)
Gán giá trị sai kiểuCompile errorRuntime: tự ép kiểu hoặc đổi kiểu biến
Kiểm tra kiểuCompile-timeRuntime (typeof, instanceof)

Khai báo biến trong JS


// Chỉ khai báo (giá trị = undefined)
var rank;
let points;
const MAX_LEVEL; // ❌ Lỗi: const bắt buộc khởi tạo

// Khai báo + khởi tạo (gán giá trị)
var name = "Amit";
let rank = 2;
const PI = 3.14159;

// Cùng biến, đổi kiểu giá trị (chỉ var/let)
let value = 100;    // number
value = "hello";    // string - OK
value = true;       // boolean - OK
value = { a: 1 };   // object - OK

Tại sao không cần kiểu?

  • Thiết kế cho scripting nhanh, linh hoạt, prototype-based.
  • Giá trị tự mang theo kiểu (self-describing values).
  • Engine tối ưu hóa nội bộ (hidden classes, inline caching) dựa trên hình dạng object thực tế.

Khi nào CẦN quan tâm kiểu?

  • API boundary (validate input từ user/server).
  • Performance critical (tránh hidden class transition).
  • Đồng đội/dev lớn – dùng TypeScript hoặc JSDoc.

TypeScript: Thêm kiểu tĩnh cho JS


// TypeScript
let age: number = 20;
let name: string = "Amit";
let isActive: boolean = true;
let user: { name: string; age: number } = { name: "Amit", age: 20 };

// Compile ra JS thuần (không còn kiểu)
let age = 20;
let name = "Amit";

JSDoc: Document kiểu không cần compile


/** @type {number} */
let age = 20;

/** @param {string} name @returns {string} */
function greet(name) { return `Hello ${name}`; }

Tóm tắt

  • JS: KHÔNG bắt buộc/khai báo kiểu dữ liệu cho biến.
  • Kiểu thuộc về giá trị, không phải biến.
  • Dùng let/const (ES6+) thay var.
  • Muốn static typing → TypeScript hoặc JSDoc.