Trong lập trình, có nhiều biểu thức dù không hợp lệ trong các ngôn ngữ lập trình khác nhưng vẫn hoạt động tốt trong JavaScript nhưng chính điều này cũng dẫn đến xảy ra rất nhiều mã lạ. Các bạn lập trình viên có thể thử thách JavaScript của mình bằng một số bài tập dưới đây!
Trong thử thách này, các bạn sẽ được xem 12 biểu thức kỳ quặc và sẽ phải đoán kết quả của nó:
Câu 1. true + false
Câu 2. [,,,].length
Câu 3. [1, 2, 3] + [4, 5, 6]
Câu 4. 0.2 + 0.1 === 0.3
Câu 5. true == “true”
Câu 6. 010 – 03
Câu 7. null + 0
Câu 8. 0/0
Câu 9. 1/0 === 10 ** 1000
Câu 10. true++
Câu 11. (null – 1) – “1”
Câu 12. 5 + !5 + !!5
Kết quả và giải thích
Câu 1: true + false
Khi bạn cố gắng sử dụng phép cộng với 2 giá trị boolean, chúng sẽ được chuyển sang dạng số (number). Chúng ta biết rằng True sẽ được chuyển đổi thành 1, False sẽ được chuyển đổi thành 0. Vậy kết quả của True+ False= 1;
Câu 2: [,,,].length
Bạn có thể chuyển như sau
[,] ==> [empty,]
[,,] ==> [empty, empty,]
[,,,] ==> [empty, empty, empty,]
Vậy [,,,].length sẽ trả về kết quả là 3
Câu 3: [1, 2, 3] + [4, 5, 6]
Khi bạn cố gắng chuyển đổi một Array sang chuỗi, thì phương thức toString sẽ được gọi. Phương thức này sẽ dụng bởi JavaScript khi có một dãy được hiển thị như một ký t, nó sẽ nối các phần tử của nó bằng dấu phẩy.
[1, 2, 3].toString() ==> ‘1, 2, 3’
[4, 5, 6].toString() ==> ‘4, 5, 6’
Kết quả là
[1, 2, 3] + [4, 5, 6] ==> ‘1, 2, 3’ + ‘4, 5, 6’ ==> “1,2,34,5,6”
Câu 5: true == “true”
Toán tử đẳng thức (==) kiểm tra xem hai toán hạng của nó có bằng nhau hay không, trả về kết quả Boolean.
Theo quy tắc so sánh bình đẳng trừu tượng, cả hai giá trị này được chuyển thành số khi so sánh.
true == “true” ==> Số(true) == Số(“true”) ==> 1 == NaN
Vì vậy, ture == “true trả về false.
Câu 6: 010 – 03
Đây là một mẹo nhỏ: Nếu một số bắt đầu bằng 0 , thì nó được coi là số bát phân trong JavaScript.
Vì thế: 010 – 03 ==> 8 – 3 ==> 5
- Nếu một số bắt đầu bằng 0b , thì nó được coi là số nhị phân trong JavaScript.
- Nếu một số bắt đầu bằng 0x , thì số đó được coi là số hex trong JavaScript.
Câu 7: Null + 0
Như chúng tôi đã nói trước đây, null là một giá trị giả. Nó sẽ được chuyển đổi thành giá trị boolean false hoặc giá trị số 0
Vì vậy, nó sẽ trả về 0
Câu 8: 0/0
Đó là một biểu thức toán học không đúng. Không có câu trả lời bằng số có ý nghĩa cho phương trình 0/0, đầu ra chỉ đơn giản là NaN.
Câu 9: 1/0 === 10 ** 1000
Mặc dù 1/0 cũng là một biểu thức toán học không hợp lệ như trước đây. Nhưng khi cổ tức không bằng 0, JavaScript coi kết quả của biểu thức này là Vô cực.
Và 10**1000 là một con số quá lớn, JavaScript không thể biểu diễn chính xác con số này (Giá trị số nguyên cao nhất trong JavaScript là 2^53–1). Vì vậy, 10 * 1000 cũng được coi là vô cực.
Vô cực luôn bằng một Vô cực khác, vì vậy 1/0 === 10 ** 1000 trả về giá trị đúng.
Câu 10: true++
Không có gì đặc biệt về điều này; nó chỉ là một lỗi cú pháp.
Câu 11: (null – 1) – “1”
null ==> 0
(null – 1) ==> -1
“1” ==> 1
Vì vậy (null — 1) — “1” trả về -2
Câu 12: 5 + !5 + !!5
- O , chuỗi trống “” , null và không xác định đều là các giá trị giả.
- Các số khác không là giá trị chân lý.
Vì thế: !5 ==> 0 !!5 ==> 1
Chúc các bạn lập trình viên áp dụng các bài tập trên thành công vào việc “thử thách” chiến binh JavaScript của mình!
Bộ môn Công nghệ Thông tin
Cao đẳng FPT Mạng cá cược bóng đá
Hà Nội