I) Khái quát các kiểu dữ liệu trong javascript
JavaScript is a loosely typed or a dynamic language. Tạm dịch Javascript là một ngôn ngữ kiểu lỏng lẻo( nghĩa là viết chương trình mà biến không cần phải định nghĩa trước kiểu) hoặc là một ngôn ngữ lập trình động.
Biến trong JavaScript không được gắn trực tiếp với kiểu giá trị cụ thể và bất kỳ biến nào cũng có thể được gắn lại giá trị với tất cả các kiểu dữ liệu.
Theo tiêu chuẩn ECMAScript mới nhất chia dữ liệu javascript thành 9 kiểu:
- Dữ liệu nguyên thủy gồm có 6 kiểu bên dưới:
Kiểu undefined: typeof instance === “undefined”
Kiểu Boolean: typeof instance === “boolean”
Kiểu số: typeof instance === “number”
Kiểu chuỗi: typeof instance === “string”
Kiểu số BigInt: typeof instance === “bigint”
Kiểu Symbol: typeof instance === “symbol”
Lưu ý: Chúng ta dùng từ khóa type of để check kiểu dữ liệu nhé.
- Kiểu null: typeof instance === “object”. Một kiểu sơ khai mà giá trị của nó có thêm một vai trò đặc biệt: nếu object không kế thừa từ đối tượng nào khác, null sẽ được hiển thị ở cuối chuỗi Prototype
- Kiểu Object:typeof instance === “object”. Kiểu phi dữ liệu nhưng có cấu trúc cho các đối tượng được khởi tạo và được dùng như cấu trúc dữ liệu: new Object, new Array, new Map, new Set, new WeakMap, new WeakSet, new Date hay bất kỳ đối tượng nào được tạo ra với từ khóa new.
Lưu ý: Kiểu Array, Date, Map, Set… là trường hợp cụ thể của chỉ một kiểu Object.
- Kiểu phi dữ liệu Function, mặc dù khi gọi với typeof nó có nhãn riêng: typeof instance === “function”. Giá trị trả về từ typeof này là một nhãn đặc biệt cho các function, cho dù constructor của Function phát sinh từ Object constructor.
Khi code javascript nên chú ý trình duyệt chúng ta sử dụng, nhất là IE không hỗ trợ nhiều các chuẩn ES6, ES7, Newer(2016+)…
Tuyển lập trình viên java lương upto ~2000$
Tuyển lập trình viên js lương upto ~2500$
II) Các kiểu dữ liệu của javascript
1.Kiểu dữ liệu nguyên thủy
1.1 Kiểu undefined
Biến có giá trị undefined là biến mà có giá trị chưa được khởi tạo(chưa được gán giá trị);
var car; // biến đang có kiểu undefined
Giờ thì chúng ta sẽ check biến có phải là undefined không nhé
if(car === undefined){
}
1.2 Kiểu dữ liệu Boolean
Boolean là loại dữ liệu logic chỉ có giá trị true/đúng hoặc false/sai
-
-
- Falsy: Một giá trị được chuyển thành false: false (Boolean), null, undefined, 0 (Number), NaN, empty string. Nghĩa là giá trị trả về false không phải duy nhất là giá trị false của Boolean mà còn các giá trị trên, khi code chúng ta cần chú ý
-
-
-
- Truthy: Một giá trị được chuyển thành to true: ngược lại của falsy
-
Lưu ý với một số trường hợp đặc biệt :
-
-
-
- 0 (Number) trả về falsy, nhưng ‘0’ (String) trả về truthy
- [] (empty array), {} (empty object) trả về truthy nhé
- Cách check nhiều giá trị true/false:
- NG: if(name === null || name === undefined || name === ”)
- OK: if(!name)
-
-
1.3 Kiểu dữ liệu Number
-
- Kiểu dữ liệu Number trong javascript là một kiểu dữ liệu số ở định dạng dấu chấm động 64 bit chính xác kép (IEEE 754)
- Khác với các ngôn ngữ lập trình khác thì Integers and Floats cùng là kiểu số giống nhau.
- NaN: not a number
- MAX_VALUE === 1.7976931348623157e+308
Ví dụ:
let count = 10;
1.4 Kiểu dữ liệu String
-
- Chuỗi ký tự có thể được bao bởi dấu nháy đơn ” hoặc nháy kép “”
Ví dụ:
const s1 = ‘This is string’
const s2 = “This is another string”
1.5 Kiểu dữ liệu BigInt
-
- Kiểu BigInt là một kiểu giá trị số trong JavaScript, đại diện cho các giá trị số nguyên với độ chính xác (precision) tùy ý.
- Với BigInt, chúng ta có thể lưu và tính toán các số nguyên lớn hơn, thậm chí trên cả giới hạn số nguyên an toàn của kiểu Number.
- Một số BigInt được tạo ra bằng cách thêm n vào cuối một số nguyên hoặc bằng cách sử dụng constructor.
- Bạn có thể đạt được giá trị an toàn nhất với việc có thể tăng giá trị với Number bằng cách sử dụng constant MAX_SAFE_INTEGER.
- Với sự ra đời của kiểu BigInt, giờ đây bạn có thể tính toán với những con số còn lớn hơn MAX_SAFE_INTEGER.
- Trong ví dụ sau, khi tăng dần giá trị MAX_SAFE_INTEGER, bạn vẫn nhận được kết qua như mong muốn với BigInt:
const x = 2n ** 53n;
9007199254740992n
const y = x + 1n;
9007199254740993n
-
- Bạn có thể sử dụng các toán tử +, *, -, **, và % với BigInt như với Number. Một số BigInt không hoàn toàn bằng (===) một số Number, nhưng có thể bằng khi ép kiểu (==).
- Số BigInt xử lý giống với Number khi được chuyển đổi kiểu về Boolean: if, ||, &&, Boolean, !.
- Số BigInt không thể dùng chung với số Number để tính toán. Khi đó, lỗi TypeError sẽ xảy ra.
1.6 Kiểu Symbol
-
- Kiểu Symbol là một kiểu mới trong Javascript tiêu chuẩn ECMAScript 6. Mỗi Symbol là một giá trị sơ khai đơn nhất và bất biến và có thể được dùng như một khóa của một Object . Ta cũng có thể so sánh với các enumeration (enum) trong C.
- Trong javascript giá trị Symbol được tạo ra từ function Symbol() là function tự động tạo ra một giá trị vô danh, duy nhất.
- Symbol có thẻ có một mô tả tùy chọn, nhưng chỉ phục vụ mục đích debug.
- Giá trị Sysbol đại diện cho một mã định danh duy nhất. Ví dụ:
// Here are two symbols with the same description:
let Sym1 = Symbol(“Sym”)
let Sym2 = Symbol(“Sym”)
console.log(Sym1 === Sym2) // returns “false”
// Symbols are guaranteed to be unique.
// Even if we create many symbols with the same description,
// they are different values.
2) Kiểu Null
Biến có giá trị null thì nó không chứa đối tượng nào cả (rỗng)
var object = null;
3) Kiểu Object(kiểu đối tượng)
Trong Javascript, đối tượng có thể được xem là tập hợp các thuộc tính. Với object literal syntax, một tập hợp hữu hạn các thuộc tính được khởi tạo; sau đó thuộc tính có thể được thêm hoặc loại bỏ.
Ví dụ:
var car = { myCar: ‘Saturn’,
getCar: carTypes(‘Honda’),
special: sales };
console.log(car.myCar); // Saturn
console.log(car.getCar); // Honda
console.log(car.special); // Toyota
Tên các thuộc tính của object có thể là một chuỗi ký tự bất kỳ, bao gồm cả chuỗi trắng. Nếu tên thuộc tính không phải mã hợp lệ Javascript hoặc là số thì phải bao trong nháy kép.
Không thể truy cập tên thuộc tính không phải là mã định danh hợp lệ dưới dạng thuộc tính dấu chấm (.), nhưng có thể được truy cập và đặt bằng ký hiệu giống như mảng(“[]”). Xem ví dụ bên dưới:
var unusualPropertyNames = {
”: ‘An empty string’,
‘!’: ‘Bang!’
}
console.log(unusualPropertyNames.”); // SyntaxError: Unexpected string
console.log(unusualPropertyNames[”]); // An empty string
console.log(unusualPropertyNames.!); // SyntaxError: Unexpected token !
console.log(unusualPropertyNames[‘!’]); // Bang!
Đối tượng Mảng(Array)
Array cũng là là một object, nếu dùng typeof cho một mảng thì kết quả trả về là object.
Mảng trong JS dùng index truy cập các phần tử, đây là cách tốt nhất. Tuy nhiên tương tự các object khác, những phần tử có thể được truy cập thông qua tên thuộc tính.
Ví dụ về mảng
let ageArray = [];
ageArray [“Marry”] = 10;
ageArray[“David”] = 20 ;
ageArray[“An”] = 30;
Để truy cập mảng ageArray [“Marry”] hoặc ageArray[0].
Console.log(ageArray [“Marry”]); // kết quả trả về bằng 10
Console.log(ageArray [0]); // kết quả trả về bằng 10
Lưu ý: index của mảng nên để là số không đặt tên thuộc tính không tốt, nếu dùng thuộc tính nên sử dụng Object thay thế.
Đối tượng Date
Date cũng là một là Object . Để thực hiện các thao tác với thời gian, chúng ta sử dụng đối tượng Date.
Cú pháp cho việc khởi tạo giá trị Date
new Date(); // thời gian hiện tại
new Date(value);
new Date(dateString);
new Date(year, month[, date[, hours[, minutes[, seconds[, milliseconds]]]]]);
Các tham số
value
Giá trị số nguyên đại diện cho số mili giây kể từ 01/01/1970-00:00:00 UTC.
dateString
Giá trị chuỗi đại diện cho một ngày. Chuỗi phải ở định dạng được công nhận bới phương thức Date.parse().
year
Giá trị số nguyên đại diện cho năm. Các giá trị từ 0 đến 99 ứng với các năm từ 1900 đến 1999.
month
Giá trị số nguyên đại diện cho tháng, bắt đầu với 0 cho Tháng Một đến 11 cho Tháng Mười Hai.
date
Tùy chọn. Giá trị số nguyên đại diện cho ngày trong tháng.
hours
Tùy chọn. Giá trị số nguyên đại diện cho giờ trong ngày.
minutes
Tùy chọn. Giá trị số nguyên đại diện cho phần phút của một thời gian.
seconds
Tùy chọn. Giá trị số nguyên đại diện cho phần giây của một thời gian.
milliseconds
Tùy chọn. Giá trị số nguyên đại diện cho phần mili giây của một thời gian.
Ví dụ Date
var today = new Date();
var birthday = new Date(‘October 11, 2020 15:27:08’);
var birthday = new Date(‘2020-12-30T15:27:08’);
var birthday = new Date(2020, 10, 30);
var birthday = new Date(2020, 10, 30, 15, 27, 8);
4. Kiểu phi dữ liệu Function
Một function là một đoạn mã có thể được gọi bằng mã khác hoặc của chính nó, hoặc một biến tham chiếu đến function. Khi một function được gọi, các đối số được truyền đến function dưới dạng đầu vào và function có thể tùy chọn trả về một giá trị. Một function trong JavaScript cũng là một đối tượng.
Tên function là một mã định danh được bao gồm như một phần của khai báo function hoặc biểu thức function. Phạm vi của tên function phụ thuộc vào việc tên function là một khai báo hay biểu thức.
Ví dụ
function add(a,b){
return a+b;
};
// Function declaration
function foo() {};
// Named function expression
(function bar() {});
// or using the ECMAScript 2015 arrow notation
const foo = () => {};
phần về function chỉ giới thiệu qua còn chi tiết sẽ có bài viết sau.
Leave a Reply