typeof

Toán tử typeof trả về một chuỗi đại diện cho kiểu dữ liệu của toán hạng chưa được tính toán.

Cú pháp

typeof operand;

Tham số

Tham sốMô tả
operandMột biểu thức đại diện cho đối tượng hoặc giá trị nguyên thủy, kiểu dữ liệu của nó sẽ được trả về

Giá trị trả về

Bảng dưới đây tóm tắt các giá trị trả về có thể của typeof.

Để biết thêm thông tin về kiểu dữ liệu và giá trị nguyên thủy, bạn có thể xem trang JS Data Types.

Kiểu dữ liệuKết quả
Undefined'undefined'
Null'object'
Boolean'boolean'
Number'number'
String'string'
Symbol'symbol'
Đối tượng chủ thểPhụ thuộc vào việc triển khai
Đối tượng hàm'function'
Bất kỳ đối tượng khác'object'

Ví dụ

Ví dụ mã

Number

typeof 37 === 'number';
typeof 3.14 === 'number';
typeof Math.LN2 === 'number';
typeof Infinity === 'number';
 
typeof NaN === 'number';
// Mặc dù NaN là viết tắt của "Not-A-Number"
 
typeof Number(1) === 'number';
// Nhưng không nên sử dụng hình thức này!

String

typeof '' === 'string';
typeof 'bla' === 'string';
 
typeof typeof 1 === 'string';
// typeof luôn trả về một chuỗi
 
typeof String('abc') === 'string';
// Nhưng không nên sử dụng hình thức này!

Boolean

typeof true === 'boolean';
typeof false === 'boolean';
typeof Boolean(true) === 'boolean';
// Nhưng không nên sử dụng hình thức này!

Symbol

typeof Symbol() === 'symbol';
typeof Symbol('foo') === 'symbol';
typeof Symbol.iterator === 'symbol';

Undefined

typeof undefined === 'undefined';
typeof declaredButUndefinedVariable === 'undefined';
typeof undeclaredVariable === 'undefined';

Object

typeof { a: 1 } === 'object';
 
// Sử dụng Array.isArray hoặc Object.prototype.toString.call
// để phân biệt mảng và đối tượng thông thường
typeof [1, 2, 4] === 'object';
 
typeof new Date() === 'object';
 
// Các ví dụ dưới đây có thể gây nhầm lẫn, không nên sử dụng!
typeof new Boolean(true) === 'object';
typeof new Number(1) === 'object';
typeof new String('abc') === 'object';

Function

typeof function () {} === 'function';
typeof class C {} === 'function';
typeof Math.sin === 'function';
typeof new Function() === 'function';

Trường hợp đặc biệt null

typeof null === 'object';
// Điều này đã được xác định từ đầu khi JavaScript được triển khai

Trong phiên bản ban đầu của JavaScript, giá trị trong JavaScript được biểu diễn bằng một nhãn đại diện cho kiểu dữ liệu và giá trị dữ liệu thực tế. Nhãn kiểu dữ liệu cho đối tượng là 0. Vì null đại diện cho con trỏ null (trên hầu hết các nền tảng, giá trị là 0x00), nên nhãn kiểu dữ liệu của null cũng là 0, và typeof null trả về sai lầm "object".

ECMAScript đã đề xuất một bản sửa chữa (thông qua opt-in), nhưng đã bị từ chối. Điều này dẫn đến typeof null === 'object'.