Undefined có nghĩa là không xác định. Trong javascript, khi bạn khai báo một biến nhưng chưa gán giá trị cho nó, giá trị của biến đó sẽ là undefined.
var test;
alert[test]; //undefined
Bất cứ biến nào cũng có thể bị làm rỗng bằng cách thiết lập giá trị về không xác định [
typeof undefined; // undefined
typeof null; // object
1].var test = undefined;
alert[test]; //undefined
Null có nghĩa là giá trị rỗng hoặc giá trị không tồn tại, nó có thể được sử dụng để gán cho một biến như là một đại diện không có giá trị.
var test = null;
alert[test]; //null
Ngoài ra thì còn một chú ý nữa đó là
typeof undefined; // undefined
typeof null; // object
2 có kiểu giá trị là typeof undefined; // undefined
typeof null; // object
1 nhưng typeof undefined; // undefined
typeof null; // object
4 lại là 1 typeof undefined; // undefined
typeof null; // object
5typeof undefined; // undefined
typeof null; // object
Kể tên các kiểu dữ liệu cơ bản trong Javascript
Kiểu dữ liệu nguyên thủy:
6: Các số nguyên hoặc số thực. Ví dụ: 5 hoặc 5.05typeof undefined; // undefined typeof null; // object
7: là các text như “Các kiểu dữ liệu trong JavaScript”, text có thể có một hoặc nhiều ký tự.typeof undefined; // undefined typeof null; // object
8: chỉ có 2 giá trị là true hoặc false.typeof undefined; // undefined typeof null; // object
9: là các giá trị không xác định.typeof undefined; // undefined typeof null; // object
0: đơn giản là không có giá trị nào cả.var x = 3; var y = "3"; x + y; // Returns "33"
1: mới được giới thiệu trong ES6. Nó lưu trữ các giá trị duy nhất và ẩn danhvar x = 3; var y = "3"; x + y; // Returns "33"
Kiểu dữ liệu không nguyên thủy [tham chiếu]:
2: Thể hiện một đối tượng và các thuộc tính có thể truy cập đến.var x = 3; var y = "3"; x + y; // Returns "33"
3: Nhóm các giá trị giống nhau.var x = 3; var y = "3"; x + y; // Returns "33"
4: Biểu thức chính quy.var x = 3; var y = "3"; x + y; // Returns "33"
Giải thích về ép kiểu ngầm trong JavaScript?
Ép kiểu ngầm trong javascript là sự chuyển đổi tự động của giá trị từ kiểu dữ liệu này sang kiểu khác. Nó xảy ra khi thực hiện một biểu thức với các kiểu dữ liệu khác nhau.
Ép kiểu String
Ép kiểu string xảy ra khi dùng toán tử
var x = 3;
var y = "3";
x + y; // Returns "33"
5. Một số cộng với một chuỗi, kiểu số sẽ bị ép thành kiểu chuỗi.Ví dụ:
var x = 3;
var y = "3";
x + y; // Returns "33"
var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
Để hiểu về hai ví dụ khi ta cộng một số vào chuỗi, thì khi JavaScript thấy biểu thức
var x = 3;
var y = "3";
x + y; // Returns "33"
6 với hai kiểu khác nhau [một số và một chuỗi], nó chuyển đổi kiểu số thành chuỗi để thực hiện hành động. Sau khi chuyển đổi, cả hai biến đều là kiểu chuỗi, thao tác var x = 3;
var y = "3";
x + y; // Returns "33"
5 lúc này sẽ thành phép nối chuỗi kết quả là ra chuỗi "33" và "24Hello".Ngược lại, khi thực hiện phép toán
var x = 3;
var y = "3";
x + y; // Returns "33"
8, thì chuỗi lại bị ép kiểu ngầm thành số. Ví dụ:var x = 3;
Var y = "3";
x - y //Returns 0 since the variable y [string type] is converted to a number type
Ép kiểu Boolean
Ép kiểu boolean xảy ra khi sử dụng các toán tử logic, lệnh if hay kiểm tra vòng lặp. Để hiểu về ép kiểu logic, ta cần hiểu về giá trị truthy và falsy.
Giá trị truthy là cái sẽ được ép kiểu thành true. Còn falsy sẽ được ép kiểu thành false.
Tất cả các giá trị ngoại trừ
var x = 3;
var y = "3";
x + y; // Returns "33"
9, var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
0, var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
1, var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
2, typeof undefined; // undefined
typeof null; // object
4, typeof undefined; // undefined
typeof null; // object
1, và var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
5 thì đều là truthy.Câu lệnh If:
var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
Toán tử Logic:
Toán tử logic trong javascript không giống các ngôn ngữ lập trình khác, nó không trả về true hay false, mà nó trả về một toán hạng.
OR [ || ] - Nếu giá trị đầu tiên là truthy, giá trị đầu tiên sẽ được trả về, ngược lại thì nó trả về giá trị thứ hai.
AND [ && ] - Nếu hai giá trị đều là truthy, giá trị thứ hai sẽ được trả về. Nếu giá trị đầu là falsy sẽ trả về giá trị đầu hoặc giá trị hai là falsy sẽ trả về giá trị hai.
Ví dụ:
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
Ép kiểu dấu bằng
Xảy ra khi thực hiện phép "==". Nhớ lại thì phép "==" được dùng để so sánh hai giá trị khác kiểu.
Thực tế khi sử dụng "==" một ép kiểu ngầm đã xảy ra, chuyển đổi tất cả toán hạng về cùng kiểu và so sánh chúng.
Ví dụ:
var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
Ép kiểu ngầm không xảy ra khi dùng "===".
var test = undefined;
alert[test]; //undefined
0Kết quả:
var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
6 var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
7Giải thích:
Phép toán trên sẽ thực hiện từ phải sang trái, chúng sẽ so sánh lần lượt các phép tính ở dòng lệnh bên trên
var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
8 sẽ trả về var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
6 tiếp tục var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
6 so sánh với 3, khi đó var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
6 sẽ bị ép kiểu thành var x = 3;
Var y = "3";
x - y //Returns 0 since the variable y [string type] is converted to a number type
2 và kết quả là var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
6. Dòng lệnh thứ 2 giải thích tương tự chúng ta sẽ thu được về kết quả là var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
7Cho biết kết quả của đoạn code dưới đây?
var test = undefined;
alert[test]; //undefined
1Kết quả:
var x = 24;
var y = "Hello";
x + y; // Returns "24Hello";
7Giải thích:
typeof undefined; // undefined
typeof null; // object
2 có kiểu giá trị là undefined nhưng null lại là 1 objectCho biết kết quả của đoạn code dưới đây?
var test = undefined;
alert[test]; //undefined
2Kết quả:
var x = 3;
Var y = "3";
x - y //Returns 0 since the variable y [string type] is converted to a number type
7Giải thích:
typeof 1 là Number và typeof Number là string
Hàm setInterval trả về cái gì?
var test = undefined;
alert[test]; //undefined
3A: một id duy nhất
B: số lượng milliseconds
C: function truyền vào
D:
1typeof undefined; // undefined typeof null; // object
Đáp án: A
Nó trả về một id duy nhất. Id này dùng để clear interval sau này với hàm
var x = 3;
Var y = "3";
x - y //Returns 0 since the variable y [string type] is converted to a number type
9.Sự khác nhau giữa Bind, Call và Apply trong Javascript?
Ba hàm
var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
0, var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
1 và var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
2 là các prototype của Function nên chỉ có Function mới có thể gọi được 3 hàm này. Sở dĩ, một Function có thể gọi Function khác vì trong JavaScript, Function cũng là một loại Object, mà đã là Object thì sẽ có prototype, hay nói cách khác là gọi được phương thức của nó.- Nhìn chung, hàm call và apply là gần giống nhau. Chúng đều gọi hàm trực tiếp. Chỉ khác ở cách truyền tham số vào [
2 truyền vào một array chứa toàn bộ các tham số cònvar x = 0; var y = 23; if [x] { console.log[x]; } // The code inside this block will not run since the value of x is 0[Falsy] if [y] { console.log[y]; } // The code inside this block will run since the value of y is 23 [Truthy]
1 truyền lần lượt từng tham số.]var x = 0; var y = 23; if [x] { console.log[x]; } // The code inside this block will not run since the value of x is 0[Falsy] if [y] { console.log[y]; } // The code inside this block will run since the value of y is 23 [Truthy]
- Hàm
0 thì hơi khác hơn một chút. Hàm này không gọi hàm trực tiếp mà nó sẽ trả về một hàm mới. Và bạn có thể sử dụng hàm số mới này sau. Về cách truyền tham số vào thì nó giống với hàmvar x = 0; var y = 23; if [x] { console.log[x]; } // The code inside this block will not run since the value of x is 0[Falsy] if [y] { console.log[y]; } // The code inside this block will run since the value of y is 23 [Truthy]
1.var x = 0; var y = 23; if [x] { console.log[x]; } // The code inside this block will not run since the value of x is 0[Falsy] if [y] { console.log[y]; } // The code inside this block will run since the value of y is 23 [Truthy]
Hàm anonymous là gì và khi nào nên sử dụng?
Một Anonymous Function là một hàm không có tên [hay còn gọi là hàm ẩn danh], là một hàm được sinh ra đúng vào thời điểm chạy của chương trình.
Thông thường khi bạn khai báo một hàm thì trình biên dịch sẽ lưu lại trong bộ nhớ nên bạn có thể gọi ở trên hay dưới vị trí khai báo hàm đều được, nhưng với anonymous functions thì nó sẽ được sinh ra khi trình biên dịch xử lý tới vị trí của nó. Ví dụ:
var test = undefined;
alert[test]; //undefined
4Trong ví dụ này cho dù bạn gọi hàm ở phía trên hay dưới đều hoạt động tốt là vì chương trình đã lưu hàm đó vào bộ nhớ. Nhưng nếu ta sử dụng anonymous function như ví dụ dưới đây sẽ bị lỗi ngay.
var test = undefined;
alert[test]; //undefined
5Vậy thì, khi nào thì cần Anonymous Function?
Nếu hàm cần được truyền ở nhiều nơi:
- Định nghĩa 1 hàm thông thường.
- Truyền hàm đó vào 1 hàm.
Nếu hàm chỉ truyền 1 nơi?
- Bất tiện khi tạo ra 1 hàm mới [các chi phí như đặt tên hàm].
- Giúp tăng tính ràng buộc cho việc chỉ được phép truyền 1 lần.
- Bên cạnh đó hỗ trợ được thêm khả năng chỉ gọi 1 lần.
Strict mode trong JavaScript là gì?
Strict hiểu đơn giản theo nghĩa tiếng Việt là "nghiêm ngặt, nghiêm khắc". Strict Mode là một quy mẫu nghiêm khắc của Javascript. Nếu như coi việc viết code bình thường là Normal Mode, thì
var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
7 sẽ có thêm nhiều quy định khác so với Normal Mode. Việc đó khiến cho một thao tác vốn bình thường có thể chạy ngon lành trở nên lỗi, và throw ra errors.Nhìn chung, Strict được tạo ra nhằm:
- Ngăn chặn sử dụng, và throw errors khi người lập trình thực hiện những xử lý được coi là unsafe, những xử lý mà có thể là ngoài ý muốn.
- Vô hiệu hoá các tính năng có thể gây nhầm lẫn, hoặc không nên được sử dụng.
- Ngăn chặn sử dụng một số từ mà có thể sẽ được sử dụng làm keywork trong tương lai. Dưới đây là một số ví dụ
Gán giá trị cho biến chưa được khai báo
var test = undefined;
alert[test]; //undefined
6Báo lỗi khi sử dụng
var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
8var test = undefined;
alert[test]; //undefined
7Các tham số của hàm không được trùng nhau
var test = undefined;
alert[test]; //undefined
8Không cho phép khai báo biến dưới dạng hệ nhị phân
var test = undefined;
alert[test]; //undefined
9Không được phép ghi đè lên thuộc tính chỉ được phép đọc
var test = null;
alert[test]; //null
0Không sử dụng được
var x = 0;
var y = 23;
if [x] {
console.log[x];
} // The code inside this block will not run since the value of x is 0[Falsy]
if [y] {
console.log[y];
} // The code inside this block will run since the value of y is 23 [Truthy]
9var test = null;
alert[test]; //null
1Không cho phép khai báo biến trong
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
0var test = null;
alert[test]; //null
2Không chấp nhận khai báo các keyword. Ở chế độ strict mode thì các bạn sẽ không sử dụng được các từ khóa sau để khai báo làm tên biến, hằng,...
- implements
- interface
- let
- package
- private
- protected
- public
- static
- yield
- arguments
Làm sao để clone một mảng?
Để clone một mảng, chúng ta có thể sử dụng một trong các cách dưới đây:
1. Sử dụng hàm slice:
var test = null;
alert[test]; //null
32. Sử dụng hàm var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
1 và var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
2 [deep copy]:
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
var test = null;
alert[test]; //null
43. Sử dụng toán tử spread operator var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
3 trong ES6:
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
var test = null;
alert[test]; //null
54. Sử dụng var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
4:
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
var test = null;
alert[test]; //null
65. Sử dụng var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
5
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
var test = null;
alert[test]; //null
7Ngoài ra chúng ta cũng có thể clone mảng qua các hàm như vòng lặp
var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
6, vòng lặp var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
7, var x = 220;
var y = "Hello";
var z = undefined;
x | | y // Returns 220 since the first value is truthy
x | | z // Returns 220 since the first value is truthy
x && y // Returns "Hello" since both the values are truthy
y && z // Returns undefined since the second value is falsy
if[ x && y ]{
console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy]
}
if[ x || z ]{
console.log["Code runs"]; // This block runs because x || y returns 220[Truthy]
}
8,...Scope của 1 biến trong javascript là gì? Có bao nhiêu loại scope?
Scope của 1 biến là phạm vi trong chương trình của bạn mà biến đó được định nghĩa và thể sử dụng được.
Trong javascript có 3 loại scope:
9: có phạm vị hoạt động ở bất kỳ trong mã javascript của bạn.var x = 220; var y = "Hello"; var z = undefined; x | | y // Returns 220 since the first value is truthy x | | z // Returns 220 since the first value is truthy x && y // Returns "Hello" since both the values are truthy y && z // Returns undefined since the second value is falsy if[ x && y ]{ console.log["Code runs" ]; // This block runs because x && y returns "Hello" [Truthy] } if[ x || z ]{ console.log["Code runs"]; // This block runs because x || y returns 220[Truthy] }
0: có phạm vi hoạt động trong function mà bạn khai báo biến đó.var a = 12; var b = "12"; a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
1: có phạm vị trong cặp dấu {} mà bạn khai báo biến đó. [ES6]var a = 12; var b = "12"; a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
Khi nào cần sử dụng async và defer trong javascript?
var test = null;
alert[test]; //null
8Với thẻ script không có thuộc tính gì khác thì HTML file sẽ được parse cho đến khi gặp phải thẻ
var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
2, đến lúc này thì quá trình parse sẽ tạm dùng và để fetch script file về [nếu là external file], sau đó var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
3 những code script này, sau đó mới tiếp tục lại quá trình parse html.var test = null;
alert[test]; //null
9Với thẻ script có thuộc tính
var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
4, khi quá trình parse html gặp phải script này, nó sẽ vẫn tiếp tục parse html cho đến khi script này được download xong, thì quá trình parse html mới tạm dừng để var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
3 những code script này, sau đó lại tiếp tiếp quá trình parse html.typeof undefined; // undefined
typeof null; // object
0Với thẻ script có thuộc tính
var a = 12;
var b = "12";
a == b; // Returns true because both 'a' and 'b' are converted to the same type and then compared. Hence the operands are equal.
6, quá trình parse html sẽ không bị dừng lại mà parse cho đến khi hoàn thành, quá trình download các script file được tiến hành song song, và cuối cùng thì sẽ execute những script code này khi html đã parse xong.Việc hiểu rõ tính chất, nguyên lý của 2 thuộc tính trên sẽ giúp biết rõ nên sử dụng chúng trong từng trường hợp cụ thể nào. Một số gợi ý: