Kiểu dữ liệu nguyên thủy ECMAScript
- Trang trước Giá trị ECMAScript
- Trang tiếp theo Chuyển đổi loại ECMAScript
ECMAScript có 5 loại giá trị nguyên thuỷ (primitive type), đó là Undefined, Null, Boolean, Number và String.
Toán tử typeof
Toán tử typeof có một tham số, đó là biến hoặc giá trị cần kiểm tra. Ví dụ:
var sTemp = "test string"; alert (typeof sTemp); //输出 "string" alert (typeof 86); //输出 "number"
Khi gọi toán tử typeof cho biến hoặc giá trị, sẽ trả về một trong các giá trị sau:
- undefined - Nếu biến là loại Undefined
- boolean - Nếu biến là loại Boolean
- number - Nếu biến là loại Number
- string - Nếu biến là loại String
- object - Nếu biến là loại tham chiếu hoặc loại Null
Ghi chú:Bạn có thể hỏi, tại sao toán tử typeof lại trả về "Object" cho giá trị null. Điều này thực sự là một lỗi trong việc triển khai ban đầu của JavaScript, sau đó được ECMAScript tiếp tục sử dụng. Hiện tại, null được coi là đại diện cho đối tượng, do đó giải thích được mâu thuẫn này, nhưng từ kỹ thuật来说, nó vẫn là giá trị nguyên thuỷ.
Loại Undefined
Như đã nói trước, loại Undefined chỉ có một giá trị, đó là undefined. Khi biến được khai báo nhưng không được khởi tạo, giá trị mặc định của biến đó là undefined.
var oTemp;
Đoạn mã trên khai báo biến oTemp mà không có giá trị khởi tạo. Biến này sẽ được gán giá trị "undefined", tức là giá trị văn bản của loại undefined. Có thể sử dụng đoạn mã sau để kiểm tra giá trị của biến có bằng "undefined" không:}
var oTemp; alert(oTemp == undefined);
Mã này sẽ hiển thị "true", cho thấy hai giá trị này thực sự bằng nhau. Cũng có thể sử dụng toán tử typeof để hiển thị giá trị của biến là undefined:
var oTemp; alert(typeof oTemp); // Hiển thị "undefined"
Lưu ý:Giá trị undefined không khác biệt với giá trị không định nghĩa. Tuy nhiên, toán tử typeof không thực sự phân biệt giữa hai giá trị này. Consider the following code:
var oTemp; alert(typeof oTemp); // Hiển thị "undefined" alert(typeof oTemp2); // Hiển thị "undefined"
Mã trên sẽ xuất ra "undefined" cho cả hai biến, mặc dù chỉ biến oTemp2 chưa được khai báo. Nếu sử dụng toán tử khác ngoài typeof đối với oTemp2, sẽ gây ra lỗi vì các toán tử khác chỉ có thể được sử dụng đối với biến đã được khai báo.
Ví dụ, đoạn mã sau sẽ gây ra lỗi:
var oTemp; alert(oTemp2 == undefined);
Khi hàm không có giá trị trả về rõ ràng, giá trị trả về cũng là "undefined", như sau:
function testFunc() { } alert(testFunc() == undefined); // Hiển thị "true"
Kiểu Null
Một loại dữ liệu chỉ có một giá trị duy nhất khác là Null, nó chỉ có một giá trị chuyên dụng là null, tức là giá trị văn bản của nó. Giá trị undefined thực chất là được phát sinh từ giá trị null, vì vậy ECMAScript định nghĩa chúng là bằng nhau.
alert(null == undefined); // Hiển thị "true"
Mặc dù hai giá trị này bằng nhau, nhưng ý nghĩa của chúng khác nhau. undefined là giá trị được gán cho biến khi biến được khai báo nhưng chưa được khởi tạo, null thì được sử dụng để biểu thị đối tượng chưa tồn tại (đã được giới thiệu ngắn gọn về điểm này khi thảo luận về toán tử typeof). Nếu hàm hoặc phương pháp cần trả về đối tượng, thì giá trị thường được trả về khi không tìm thấy đối tượng là null.
Kiểu Boolean
Kiểu Boolean là một trong những loại dữ liệu được sử dụng phổ biến nhất trong ECMAScript. Nó có hai giá trị là true và false (tức là hai giá trị văn bản Boolean).
Mặc dù false không bằng 0, 0 có thể được chuyển đổi thành false khi cần thiết, vì vậy việc sử dụng cả hai trong các biểu thức Boolean đều an toàn.
var bFound = true; var bLost = false;
Loại Number
Loại Number được định nghĩa đặc biệt nhất trong ECMA-262. Loại này có thể biểu diễn số nguyên 32 bit và số thập phân 64 bit.
Bất kỳ số nào được nhập trực tiếp (không phải từ biến khác) đều được coi là biểu thức thập phân của loại Number. Ví dụ, mã nguồn sau đây khai báo biến lưu trữ giá trị nguyên, giá trị của nó được định nghĩa bởi biểu thức 86:
var iNum = 86;
Số nguyên hệ tám và hệ hai mươi bốn
Số nguyên cũng có thể biểu diễn thành biểu thức nguyên hệ tám (cơ số 8) hoặc hệ hai mươi bốn (cơ số 16). Biểu thức nguyên hệ tám bắt đầu bằng số 0, các số sau đó có thể là bất kỳ số nguyên hệ tám nào (0-7), như mã nguồn sau đây minh họa:
var iNum = 070; //070 bằng số nguyên hệ tám 56
Để tạo biểu thức nguyên hệ hai mươi bốn, số đầu tiên phải là 0, sau đó là chữ cái x, sau đó là bất kỳ số nguyên hệ hai mươi bốn nào (0 đến 9 và A đến F). Các chữ cái này có thể là in hoa hoặc in thường. Ví dụ:
var iNum = 0x1f; //0x1f bằng số nguyên hệ hai mươi bốn 31 var iNum = 0xAB; //0xAB bằng số nguyên hệ hai mươi bốn 171
Lưu ý:Mặc dù tất cả các số nguyên đều có thể biểu diễn bằng các biểu thức nguyên hệ tám hoặc hệ hai mươi bốn, nhưng tất cả các phép toán toán học đều trả về kết quả thập phân.
Số thập phân
Để định nghĩa giá trị thập phân, phải bao gồm dấu chấm và một chữ số sau dấu chấm (ví dụ, sử dụng 1.0 thay vì 1). Điều này được coi là giá trị thập phân trực tiếp. Ví dụ:
var fNum = 5.0;
Điều thú vị của việc sử dụng số thập phân là trước khi tính toán, thực sự được lưu trữ là chuỗi.
Hệ số mũ
Đối với các số rất lớn hoặc rất nhỏ, có thể sử dụng hệ số mũ để biểu diễn số thập phân, có thể biểu diễn một số là số (bao gồm số thập phân) cộng với e (hoặc E), sau đó cộng với số nhân với 10. Ví dụ:
var fNum = 5.618e7
Ký hiệu này biểu diễn số 56180000. Chuyển đổi hệ số mũ thành biểu thức tính có thể获得 này: 5.618 x 107。
Cũng có thể sử dụng hệ số mũ để biểu diễn các số rất nhỏ, ví dụ 0.00000000000000008 có thể biểu diễn thành 8-e17(Ở đây, 10 được nâng lên -17 lần lũy thừa, có nghĩa là cần phải chia 10 bằng 17 lần). ECMAScript mặc định chuyển đổi các số thập phân có 6 hoặc nhiều số lẻ đầu tiên thành số biểu diễn khoa học.
Lưu ý:Cũng có thể lưu trữ giá trị số thập phân dưới dạng 64 bit IEEE 754, điều này có nghĩa là giá trị thập phân có thể có tối đa 17 chữ số thập phân. Các giá trị sau 17 chữ số thập phân sẽ bị cắt bỏ, gây ra một số lỗi toán học nhỏ.
Giá trị đặc biệt của Number
Một số giá trị đặc biệt cũng được định nghĩa là loại Number. Hai giá trị đầu tiên là Number.MAX_VALUE và Number.MIN_VALUE, chúng định nghĩa các biên giới ngoài của tập hợp giá trị Number. Tất cả các số ECMAScript phải nằm trong hai giá trị này. Tuy nhiên, kết quả tính toán tạo ra có thể không rơi vào hai giá trị này.
Khi giá trị tính toán tạo ra lớn hơn Number.MAX_VALUE, nó sẽ được gán giá trị Number.POSITIVE_INFINITY, có nghĩa là không còn giá trị số nào. Đồng thời, việc tính toán tạo ra giá trị nhỏ hơn Number.MIN_VALUE cũng sẽ được gán giá trị Number.NEGATIVE_INFINITY, cũng có nghĩa là không còn giá trị số nào. Nếu kết quả tính toán là giá trị vô cùng, thì kết quả tạo ra không thể được sử dụng trong các phép toán khác.
Thực tế, có giá trị đặc biệt để biểu thị vô cùng, như bạn đã đoán, đó là Infinity. Giá trị của Number.POSITIVE_INFINITY là Infinity. Giá trị của Number.NEGATIVE_INFINITY là -Infinity.
Do số vô cùng có thể là số dương hoặc số âm, vì vậy có thể sử dụng một phương pháp để xác định một số có phải là hữu hạn (không phải kiểm tra từng số vô cùng riêng lẻ). Có thể gọi phương pháp isFinite() cho bất kỳ số nào để đảm bảo rằng số đó không phải là vô cùng. Ví dụ:
var iResult = iNum * some_really_large_number; if (isFinite(iResult)) { alert("hữu hạn"); } else { alert("vô cùng"); }
Giá trị đặc biệt cuối cùng là NaN, biểu thị không phải số (Not a Number). NaN là một giá trị đặc biệt kỳ lạ. Thường thì, tình trạng này xảy ra khi việc chuyển đổi loại (String, Boolean v.v.) thất bại. Ví dụ, việc chuyển đổi từ từ 'blue' thành giá trị số sẽ thất bại vì không có giá trị số tương đương. Ngay cả khi vô cùng, NaN cũng không thể được sử dụng trong phép toán số học. Một đặc điểm kỳ lạ khác của NaN là nó không bằng chính nó, điều này có nghĩa là đoạn mã sau sẽ trả về false:
alert(NaN == NaN); //输出 "false"
Do lý do này, không khuyến khích sử dụng giá trị NaN本身. Hàm isNaN() sẽ hoạt động rất tốt:
alert(isNaN("blue")); //输出 "true" alert(isNaN("666")); //输出 "false"
Loại String
Đặc điểm duy nhất của loại String là nó là loại nguyên thủy duy nhất không có kích thước cố định. Bạn có thể lưu trữ 0 hoặc nhiều hơn các ký tự Unicode trong chuỗi, được biểu thị bằng số nguyên 16 bit (Unicode là một bộ ký tự quốc tế, sẽ được thảo luận trong hướng dẫn này).
Mỗi ký tự trong chuỗi có vị trí đặc định, ký tự đầu tiên bắt đầu từ vị trí 0, ký tự thứ hai ở vị trí 1, và thế là. Điều này có nghĩa là vị trí của ký tự cuối cùng trong chuỗi一定是 số lượng ký tự của chuỗi trừ 1:

Biểu thức văn bản chuỗi được khai báo bằng dấu kép (") hoặc dấu đơn ('). Java sử dụng dấu kép để khai báo chuỗi, dấu đơn để khai báo ký tự. Tuy nhiên, vì ECMAScript không có loại ký tự, bạn có thể sử dụng bất kỳ biểu thức nào trong hai biểu thức này. Ví dụ, hai dòng mã dưới đây đều hợp lệ:
var sColor1 = "red"; var sColor2 = 'red';
Loại String cũng bao gồm một số biểu thức văn bản ký tự, các nhà phát triển Java, C và Perl nên rất quen thuộc với chúng.
Dưới đây là danh sách các biểu thức văn bản ký tự của ECMAScript:
Biểu thức văn bản | Ý nghĩa |
---|---|
\n | Dấu mới dòng |
\t | Dấu tab |
\b | Khoảng trống |
\r | Dấu carriage return |
\f | Dấu trang |
\\\ | Dấu chéo |
\' | Dấu đơn |
\" | Dấu kép |
\0nnn | Mã hóa tám nnn biểu thị ký tự (n Là một số nguyên tố tám từ 0 đến 7) |
\xnn | Mã hóa thập phân nn biểu thị ký tự (n Là một số nguyên tố thập phân từ 0 đến F) |
\unnnn | Mã hóa thập phân nnnn biểu thị ký tự Unicode (n Là một số nguyên tố thập phân từ 0 đến F) |
- Trang trước Giá trị ECMAScript
- Trang tiếp theo Chuyển đổi loại ECMAScript