Không. Biến JavaScript không có kiểu (untyped). Giá trị (values) mới có kiểu.
Khai báo biến JS
var rank = 5; var name = "John";
Bạn có thể gán lại kiểu khác:
var rank = 5; rank = 'first'; // OK - JS dynamic typing document.write(rank); // "first"
Dynamic Typing (Kiểu động)
JS là ngôn ngữ dynamically typed: kiểu của biến xác định bởi giá trị tại runtime, không phải khai báo compile-time. Điều này linh hoạt nhưng dễ gây bug runtime.
TypeScript - Giải pháp Static Typing
Nếu cần kiểu tĩnh (static typing), dùng TypeScript (superset của JS):
let rank: number = 5;
let name: string = "John";
// rank = "first"; // ❌ Compile error: Type 'string' not assignable to 'number'
// Union types
let id: number | string = 101;
id = "ABC-101"; // OK
TypeScript compile về JS thuần, chạy mọi nơi JS chạy.
Kiểm tra kiểu tại Runtime (Vanilla JS)
typeof 42; // "number"
typeof "hello"; // "string"
typeof true; // "boolean"
typeof undefined; // "undefined"
typeof null; // "object" (bug nổi tiếng JS)
typeof {}; // "object"
typeof []; // "object" (dùng Array.isArray())
typeof function(){}; // "function"
typeof Symbol(); // "symbol"
typeof 123n; // "bigint" (ES2020)
Kết luận
Vanilla JS: không khai báo kiểu cho biến. Kiểu do giá trị quyết định. Muốn static typing → dùng TypeScript.