(PHP Code Vn Group) - Trong bài viết này sẽ nhắc lại về các kiểu dữ liệu trong JavaScript, để giúp cho các bạn có thể sử dụng jQuery một cách dễ dàng nhất.
Trước khi đọc bài này, mình khuyên các bạn dùng Firefox và Firebug để thực hành cho tiện.
Copy các lệnh vào đây và enter là thấy kết quả ngay! 

Test phát nào:
- var x = ""
- if ( x )
- console.log("x defaulted to true")
- else
- console.log("x defaulted to false")
=> Kết quả là "x defaulted to false" đúng chưa nào? 
Giờ chúng ta sẽ bắt đầu!
Khác với C++ hay Java, JavaScript là ngôn ngữ có tính định kiểu thấp. Điều này có nghĩa là không phải chỉ ra kiểu dữ liệu khi khai báo biến. Kiểu dữ liệu được tự động chuyển thành kiểu phù hợp khi cần thiết. Chúng ta sẽ xem xét các kiểu dữ liệu trong JS cụ thể.
1. String:
là các chuỗi, có thể là chuỗi rỗng. VD:
- "I'm a String in JavaScript!"
- 'So am I!'
- typeof "some string"; // "string"
cũng giống như một số ngôn ngữ khác, nếu trong chuỗi có các ký tự như: ' hay " thì tùy chuỗi của ta đặt trong "" hay trong ' ' mà cần hoặc không cần phải thêm dấu: \ ở trước. VD:
- "You make 'me' sad."
- 'Holy "cranking" moses!'
- "<a href=\"home\">Home</a>"
Các phương thức của String:
1 string cũng là một đối tượng, và đối tượng này có sẵn các phương thức. VD:
- "hello".charAt(0) // "h"
- "hello".toUpperCase() // "HELLO"
- "Hello".toLowerCase() // "hello"
- "hello".replace(/e|o/g, "x") // "hxllx"
- "1,2,3".split(",") // ["1", "2", "3"]
Thuộc tính của String:
Tất cả các chuỗi có 1 thuộc tính: length
- "Hello".length // 5
- "".length // 0
Chuyển sang kiểu Boolean:
- "Hello".length // 5
- "".length // 0
2. Number:
Gồm có kiểu số nguyên và số dấu phẩy động. VD:
- 12
- 3.543
Số trong JS có độ chính xác 64 bit (8 byte cơ đấy -_-). Và chúng có các toán tử giống như trong ngôn ngữ C (+, -, *, /, %, =, +=, -=, *=, /=, ++, --).
- typeof 12 // "number"
- typeof 3.543 // "number"
Chuyển sang kiểu Boolean:
Số 0 mặc định có giá trị là false trong trường hợp bị "ép kiểu" thành boolean, còn các số khác có giá trị là true:
- !0 // true
- !1 // false
- !-1 // false
Bạn thử giải thích điều này nhé:
- 0.1 + 0.2 // 0.30000000000000004
Mình đoán là do số trong JS chỉ có 64 bit ... (???)
Math:
JS hỗ trợ công cụ để làm việc với đối tượng number này, đó là đối tượng Math.
- Math.PI // 3.141592653589793
- Math.cos(Math.PI) // -1
Chuyển sang kiểu Number:
JS hỗ trợ các hàm chuyển string sang number:
- parseInt("123") = 123 (implicit decimal)
- parseInt("010") = 8 (implicit octal)
- parseInt("0xCAFE") = 51966 (implicit hexadecimal)
- parseInt("010", 10) = 10 (explicit decimal)
- parseInt("11", 2) = 3 (explicit binary)
- parseFloat("10.10") = 10.1
Chuyển Number sang String:
Khi gắn Number vào String thì kết quả luôn luôn là 1 string:
- "" + 1 + 2; // "12"
- "" + (1 + 2); // "3"
hoặc:
- String(1) + String(2); //"12"
- String(1 + 2); //"3"
Không xác định và vô cùng:
Chuyển đổi các đối tượng mà không phải là số sang số sẽ cho kết quả là NaN (ko xác định) , và JS cho phép kiểm tra việc đó với hàm isNaN. VD:
- parseInt("hello", 10) // NaN
- isNaN(parseInt("hello", 10)) // true
Chia cho 0 sẽ cho kết quả vô cùng:
- 1 / 0 // Infinity
Cả NaN và Infinity đều có kiểu dữ liệu là number:
- typeof NaN // "number"
- typeof Infinity // "number"
Chú ý : 2 đối tượng ko xác định thì có thể ko bằng nhau, còn 2 đối tượng vô cùng thì bằng nhau nên:
- NaN == NaN // false (!)
- Infinity == Infinity // true
3. Boolean:
Kiểu logic, có 2 giá trị: true,false. (Đúng và Sai)
- if ( true ) console.log("always!")
- if ( false ) console.log("never!")
- $("...").somePlugin({
- hideOnStartup: true,
- onlyOnce: false
- });
4. Object:
Mọi thứ trong JS đều là đối tượng (Object) ! Ta có thể tạo ra đối tượng với từ khóa var:
- var x = {};
- var y = {
- name: "Pete",
- age: 15
- };
Kiểu của 1 đối tượng là "object":
- typeof {} // "object"
Dot notation: giống Java hay C#, JS dùng dấu chấm (.) để thực thi 1 phương thức hay đọc, ghi thuộc tính cho 1 đối tượng.
- y.name // "Pete"
- y.age // 15
- x.name = y.name + " Pan" // "Pete Pan"
- x.age = y.age + 1 // 16
Array notation: Bạn có thể đọc hoặc ghi thuộc tính của đối tượng sử dụng ký hiệu mảng:
- var operations = {
- increase: "++",
- decrease: "--"
- }
- var operation = "increase";
- operations[operation] // "++";
- operations["multiply"] = "*"; // "*"
rất linh động!
Iteration:
Bạn cũng có thể sử dụng vòng lặp for để đọc - ghi các thuộc tính của đối tượng:
- var obj = {
- name: "Pete",
- age: 15
- };
- for(key in obj) {
- alert("key is "+[key]+", value is "+obj[key]);
- }
jQuery hỗ trợ 1 hàm để lặp qua các thuộc tính của 1 đối tượng: each
- jQuery.each(obj, function(key, value) {
- console.log("key", key, "value", value);
- });
Prototype:
Tất cả các đối tượng đều có thuộc tính nguyên mẫu. Khi trình biên dịch tìm 1 thuộc tính của đối tượng thì nó cũng kiểm tra thuộc tính nguyên mẫu. jQuery sử dụng điều đó để thêm các thuộc tính cho các đối tượng jQuery:
- var form = $("#myform");
- form.clearForm; // undefined
- form.fn.clearForm = function() {
- return this.find(":input").each(function() {
- this.value = "";
- }).end();
- };
- form.clearForm() // works for all instances of jQuery objects, because the new method was added to the prototype
Options:
Options trong jQuery là các đối tượng JavaScript rõ ràng. VD:
- $("#myform").ajaxForm();
- $("#myform").ajaxForm({
- url: "mypage.php",
- type: "POST"
- });
5. Array:
Mảng trong JS là các danh sách có thể thay đổi được với 1 vài phương thức có sẵn. Bạn có thể định nghĩa mảng:
- var x = [];
- var y = [1, 2, 3];
Kiểu của 1 mảng là "object" :
- typeof []; // "object"
- typeof [1, 2, 3]; // "object"
Đọc và ghi các phần tử của một mảng:
- x[0] = 1;
- y[2] // 3
Iteration: Dùng thuộc tính length của mảng là nhanh nhất:
- for (var i = 0; i < a.length; i++) {
- // Do something with a[i]
- }
hoặc cũng có thể sử dụng cách:
- for (var i = 0, item; item = a[i]; i++) {
- // Do something with item
- }
với jQuery thì các bạn đã biết rồi đúng ko,mới đọc xong:
- var x = [1, 2, 3];
- jQuery.each(x, function(index, value) {
- console.log("index", index, "value", value);
- });
Cũng giống như một ngăn xếp (stack) mảng có các phương thức pop,push là hay dùng:
- var x = [];
- x.push(1);
- x[x.length] = 2;
- x // 1, 2
và một số phương thức khác:
- var x = [0, 3, 1, 2];
- x.reverse() // [2, 1, 3, 0]
- x.join(" – ") // "2 - 1 - 3 - 0"
- x.pop() // [2, 1, 3]
- x.unshift(-1) // [-1, 2, 1, 3]
- x.shift() // [2, 1, 3]
- x.sort() // [1, 2, 3]
- x.splice(1, 2) // [2, 3]
Chuyển sang Boolean:
Một mảng có hay không có phần tử nào đều có giá trị true nếu bị ép kiểu sang boolean:
- ![] // false
6. Function:
Hàm trong JS có thể có tên hoặc ko. Định nghĩa hàm:
- function named() {}
- var handler = function() {}
Bạn sẽ nhìn thấy rất nhiều hàm không tên trong jQuery:
- $(document).ready(function() {});
- $("a").click(function() {});
- $.ajax({
- url: "someurl.php",
- success: function() {}
- });
Kiểu của 1 hàm là "function" .
Tham số:
Cũng giống như các ngôn ngữ khác thôi:
- function log(x) {
- console.log(typeof x, arguments.length);
- }
- log(); // "undefined", 0
- log(1); // "number", 1
- log("1", "2", "3"); // "string", 3
Đối tượng arguments:
- var awesome = function() { return arguments.callee }
- awesome() == awesome // true
Context, Call and Apply :
Trong JS biến "this" chỉ đến thuộc tính, đối tượng hiện tại. Mặc định, biến "this" chỉ đến đối tượng window. VD trong jQuery:
- $(document).ready(function() {
- // this refers to window.document
- });
- $("a").click(function() {
- // this refers to an anchor DOM element
- });
Hàm có sẵn 2 thuộc tính: call và apply. Sự khác nhau giữa chúng là cách truyền tham số. VD:
- function scope() {
- console.log(this, arguments.length);
- }
- scope() // window, 0
- scope.call("foobar", [1,2]); // "foobar", 1
- scope.apply("foobar", [1,2]); // "foobar", 2
Phạm vi:
Trong JS cũng như nhiều ngôn ngữ khác, biến được định nghĩa trong hàm chỉ có tác dụng trong hàm đó. VD:
- // global
- var x = 0;
- (function() {
- // private
- var x = 1;
- console.log(x); // 1
- })();
- console.log(x); // 0
Callback:
Là một hàm, đóng vai trò như 1 tham số hay là 1 option của 1 phương thức (của đối tượng nào đó). Thường đi liền với sự kiện (event) của JS,sẽ được gọi khi sự kiện xảy ra. VD trong jQuery:
- $("body").click(function(event) {
- console.log("clicked: " + event.target);
- });
hay
- $("#myform").submit(function() {
- return false;
- });
Selector:
Được sử dụng để "bắt" (chọn) 1 phần tử DOM trong tài liệu HTML của bạn. Chúng ta sẽ không đi sâu ở đây!
Event:
Sự kiện trong jQuery nói chung giống sự kiện theo chuẩn W3C.
Element:
Một phần tử trong Document Object Model (DOM) có thuộc tính, text, và có các phần tử con.
- $(":text").blur(function() {
- if(!this.value) {
- alert("Please enter some text!");
- }
- });
Đậu Ngọc Huy - Đại học Bách khoa HN
Tham khảo: http://docs.jquery.com/Types
| < Prev |
|---|
Variable Types


