Mỗi biến trong Javascript có thể chứa bất kì dữ liệu nào. Trong một khoảng thời gian, biến này có thể là dạng chuỗi và lúc khác biến đó nhận được dữ liệu dạng số.

Học Java cơ bản nâng cao cấp tốc

// no error
let message = "hello";
message = 123456;

Những ngôn ngữ lập trình có thể cho phép làm vậy được gọi là "dynamically typed", nghĩa là có nhiều kiểu dữ liệu, nhưng các biến không bị ràng buộc với bất kỳ loại dữ liệu trong số đó.

Có 7 dạng dữ liệu cơ bản trong Javascript:

Dữ liệu số

let n = 123;
n = 12.345;

Kiểu dữ liệu số dùng được cho số nguyên và số thập phân

Có nhiều cách tính cho dữ liệu số như cộng (+),  trừ (-), nhân (*), chia (/) và nhiều hơn nữa.

Ngoài những số thông thường, còn có những giá trị số đặc biệt như Infinity, - Infinity, NaN.

  • Infinity đại diện cho số vô tận. Đây là giá trị đặc biệt lớn hơn bất cứ số nào. Chúng ta có thể lấy được kết quả này khi chia số cho 0:
    alert( 1 / 0 ); // Infinity

    Hoặc có thể trực tiếp đề cập nó vào ngay trọng lệnh:
    alert( Infinity ); // Infinity
    

     

  • NaN đại diện cho lỗi tính toán. Đây là kết quả của việc tính toán không chính xác hay không xác định được. Ví dụ:
    alert( "not a number" / 2 ); // NaN, such division is erroneous

    Mọi việc tính toán vào NaN đều trả về kết quả NaN
    alert( "not a number" / 2 + 5 ); // NaN

     

Nếu có bất kỳ dữ liệu NaN nào trong biểu thức toán học, nó sẽ lan truyền đến toàn bộ kết quả.

Tính toán trong Javascript rất an toàn. Chúng ta có thể làm tất cả mọi thứ: chia số cho 0, xử lý những chuỗi không phải là số như là số, v.v. Trong trường hợp tệ nhất xảy ra, phép tính trong Javascript sẽ chỉ chuyển về kết quả là NaN.

Theo nghĩa thông thường, những giá trị số đặc biệt không phải là con số nhưng những giá trị này thuộc về dạng dữ liệu số.

Dữ liệu chuỗi

Dữ liệu chuỗi trong Javascript phải được trích dẫn.

let str = "Hello";
let str2 = 'Single quotes are ok too';
let phrase = `can embed ${str}`;

Trong Javascript, có 3 loại trích dẫn:

  1. Dấu ngoặc kép: "Hello World"

  2. Dấu nháy đơn: 'Hello World'

  3. Dấu Backticks: `Hello World`

Ngoặc kép và dấu nháy đơn là dấu trích dẫn đơn giản. Không có sự khác biệt giữa 2 dấu này trong Javascript.

Dấu backticks là dấu trích dẫn có chức năng mở rộng. Dấu này cho phép chúng ta nhúng biến và biểu thức vào một chuỗi bằng cách gói gọn vào trong ${...}, ví dụ:

let name = "John";

// embed a variable
alert( `Hello, ${name}!` ); // Hello, John!

// embed an expression
alert( `the result is ${1 + 2}` ); // the result is 3

Biểu thức bên trong $ {…} được đánh giá và kết quả trở thành một phần của chuỗi. Chúng ta có thể đặt bất cứ thứ gì vào đó: một biến như name hay một biểu thức số học như 1 + 2 hay cái gì đó phức tạp hơn.

Lưu ý rằng việc này chỉ có thể được thực hiện được trong backticks. Các trích dẫn khác không cho phép việc sử dụng nhúng như vậy!

Trong một số ngôn ngữ lập trình, có một loại "ký tự" đặc biệt cho một ký tự đơn. Như trong ngôn ngữ C và trong ngôn ngữ Java có char.

Trong JavaScript, không có loại ký tự như vậy. Chỉ có một loại là chuỗi. Một chuỗi có thể bao gồm một ký tự hoặc nhiều ký tự.

Dữ liệu boolean (kiểu logic)

Kiểu dữ liệu boolean chỉ có 2 dữ liệu: true và false.

Dạng dữ liệu này thường được sử dụng để lưu trữ các giá trị có/không: true nghĩa là "có, chính xác" và false nghĩa là "không, không chính xác".  Ví dụ:

let nameFieldChecked = true; // yes, name field is checked
let ageFieldChecked = false; // no, age field is not checked

Các giá trị Boolean cũng xuất phát từ kết quả so sánh:

let isGreater = 4 > 1;

alert( isGreater ); // true (the comparison result is "yes")

Giá trị "null"

Giá trị null không thuộc bất kỳ loại dữ liệu nào được mô tả ở trên.

Giá trị này tạo thành một kiểu dữ liệu riêng cho nó, chỉ chứa giá trị null:

let age = null;

Trong Javascript, null không phải là tham chiếu đến object không tồn tại nhưn những ngôn ngữ lập trình khác.

Đây chỉ là một giá trị đặc biệt có thể hiểu là "không có gì", "trống rỗng", "không rõ giá trị".

Giá trị "undefined"

GIá trị đặc biệt undefined là một loại dữ liệu riêng giống như null.

Undefined có nghĩa "giá trị chưa được gán vào".

Nếu một biến được khai báo, nhưng chưa được gán, thì giá trị của biến đó là chưa được xác định.

let x;

alert(x); // shows "undefined"

Về mặt kỹ thuật, có thể gán undefined cho bất kỳ biến nào:

let x = 123;

x = undefined;

alert(x); // "undefined"

...Nhưng việc gán undefined vào là không khuyến khích. Thông thường, chúng ta sử dụng null để viết giá trị "rỗng" hoặc "không xác định" vào biến và undefined thường chỉ dùng để xem biến đã được gán chưa.

Objects và Ký hiệu

Object là dạng dữ liệu đặc biệt.

Tất cả các dạng dữ liệu khác được gọi là "sơ khai", bởi vì những giá trị đó chỉ có thể chứa một loại duy nhất (có thể là chuỗi hay số). Ngược lại, object được sử dụng để chứa cả bộ dữ liệu và phức tạp hơn thế.

Dạng dữ liệu symbol được dùng để tạo sự nhận dạng duy nhất cho objects

Toán tử typeof

Toán tử typeof trả về kiểu của đối số. Việc sử dụng typeof rất hữu ích khi chúng ta muốn xử lý giá trị của các loại dữ liệu khác nhau, hoặc khi chúng ta muốn kiểm tra nhanh.

Dạng dữ liệu này hỗ trợ hai dạng cú pháp:

  1. Toán tử: typeof x.

  2. Kiểu function: typeof(x).

Nói cách khác, nó hoạt động được với cả 2 dấu trích dẫn ngoặc đơn hoặc nháy đơn hoặc không cần tới nó. Kết quả trả về là như nhau.

Lệnh gọi typeof x trả về một chuỗi với tên dạng dữ liệu:

typeof undefined // "undefined"

typeof 0 // "number"

typeof true // "boolean"

typeof "foo" // "string"

typeof Symbol("id") // "symbol"

typeof Math // "object"  (1)

typeof null // "object"  (2)

typeof alert // "function"  (3)

Ở 3 lệnh cuối, chúng ta cần phải được giải thích thêm:

  1. Math là object tích hợp dùng để cung cấp các phép toán.

  2. Kết quả của typeof null là object. Kết quả này là sai. Đây là lỗi trong typeofNull không phải là object. Đây là giá trị đặc biệt với dạng dữ liệu riêng biệt.

  3. Kết quả của typeof alert là "function" bởi alert là function trong ngôn ngữ.

Tóm tắt

Có tất cả 7 dạng dữ liệu trong Javascript.

  • number dùng cho số nguyên hoặc số thập phân.

  • string dùng cho chuỗi. Một chuỗi có thể có một hoặc nhiều ký tự, không có loại ký tự đơn riêng biệt.

  • boolean dùng cho true/false.

  • null dùng cho dữ liệu không xác định - một dạng dữ liệu độc lập có giá trị duy nhất là null.

  • undefined dùng cho các giá trị chưa được gán - một dạng dữ liệu độc lập có giá trị duy nhất là undefined.

  • object dùng cho những cấu trúc dữ liệu phức tạp hơn.

  • symbol dùng cho nhận dạng.

  • typeof cho phép chúng ta xem dạng dữ liệu nào chứa trong mỗi biến:

  1. Có 2 dạng: typeof x hoặc typeof(x).

  2. Trả về một trường với giá trị là tên của dạng dữ liệu, ví dụ: "string"

  3. Với null trả về là "object" - đây là lỗi trong ngôn ngữ. Null không phải là object.