Toán tử so sánh trong JavaScript
Toán tử so sánh trong JavaScript hay còn gọi là toán tử quan hệ, là các toán tử được đặt giữa 2 hạng tử và so sánh mối quan hệ giữa chúng trong JavaScript.
Để thực hiện các phép so sánh trong JavaScript, chúng ta sử dụng 4 loại toán tử quan hệ được liệt kê trong bảng dưới đây:
Toán tửBiểu thức điều kiệnÝ nghĩa>x > yx lớn hơn y>=x >= yx lớn hơn hoặc bằng y b // false a == b // false a = b // true`Code language: JavaScript [javascript] 0 đều trả về false. `if [null] {
// It will not reach here
} else if [0] { // It will not reach here
} else if [""] { // It will not reach here
} else if [1] { // REACH here
}
`Code language: JavaScript [javascript]
9 được thiết kế để mọi phép so sánh
`Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
5,
`false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
null == undefined // true
null == false // false
undefined == false // false
NaN == NaN // false
NaN == false // false
NaN == true // false
63 == false // false
63 == true // false
0 == false // true
"63" == true // false
"63" == false // false
"0" == true // false
"0" == false // true
!"0" == !false // false
"" == false // true
[] == "" // true
[] == false // true
[] == "0" // false
[] == 0 // true
[] == ![] // true
"0" == !"0" // true
0 == {} // false
[1] < 2 // true
// Initialize variables - Khởi tạo biến
a = {}
b = {}
// TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ?
a < b // false
a > b // false
a == b // false
a = b // true`Code language: JavaScript [javascript]
3,
`false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
null == undefined // true
null == false // false
undefined == false // false
NaN == NaN // false
NaN == false // false
NaN == true // false
63 == false // false
63 == true // false
0 == false // true
"63" == true // false
"63" == false // false
"0" == true // false
"0" == false // true
!"0" == !false // false
"" == false // true
[] == "" // true
[] == false // true
[] == "0" // false
[] == 0 // true
[] == ![] // true
"0" == !"0" // true
0 == {} // false
[1] < 2 // true
// Initialize variables - Khởi tạo biến
a = {}
b = {}
// TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ?
a < b // false
a > b // false
a == b // false
a = b // true`Code language: JavaScript [javascript]
4,
`false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
null == undefined // true
null == false // false
undefined == false // false
NaN == NaN // false
NaN == false // false
NaN == true // false
63 == false // false
63 == true // false
0 == false // true
"63" == true // false
"63" == false // false
"0" == true // false
"0" == false // true
!"0" == !false // false
"" == false // true
[] == "" // true
[] == false // true
[] == "0" // false
[] == 0 // true
[] == ![] // true
"0" == !"0" // true
0 == {} // false
[1] < 2 // true
// Initialize variables - Khởi tạo biến
a = {}
b = {}
// TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ?
a < b // false
a > b // false
a == b // false
a = b // true`Code language: JavaScript [javascript]
5,
`false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
null == undefined // true
null == false // false
undefined == false // false
NaN == NaN // false
NaN == false // false
NaN == true // false
63 == false // false
63 == true // false
0 == false // true
"63" == true // false
"63" == false // false
"0" == true // false
"0" == false // true
!"0" == !false // false
"" == false // true
[] == "" // true
[] == false // true
[] == "0" // false
[] == 0 // true
[] == ![] // true
"0" == !"0" // true
0 == {} // false
[1] < 2 // true
// Initialize variables - Khởi tạo biến
a = {}
b = {}
// TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ?
a < b // false
a > b // false
a == b // false
a = b // true`Code language: JavaScript [javascript]
6, với
`if [null] { // It will not reach here
} else if [0] { // It will not reach here
} else if [""] { // It will not reach here
} else if [1] { // REACH here
}
`Code language: JavaScript [javascript]
9 đều trả về
`Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
0. Chỉ có phép so sánh
`false == false // It will return true. Too easy, right ? :D
// But how about the following ? TRUE or FALSE ?
// Các phép so sánh sau trả về true hay false
null == undefined // true
null == false // false
undefined == false // false
NaN == NaN // false
NaN == false // false
NaN == true // false
63 == false // false
63 == true // false
0 == false // true
"63" == true // false
"63" == false // false
"0" == true // false
"0" == false // true
!"0" == !false // false
"" == false // true
[] == "" // true
[] == false // true
[] == "0" // false
[] == 0 // true
[] == ![] // true
"0" == !"0" // true
0 == {} // false
[1] < 2 // true
// Initialize variables - Khởi tạo biến
a = {}
b = {}
// TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ?
a < b // false
a > b // false
a == b // false
a = b // true`Code language: JavaScript [javascript]
9 là trả về `true mà thôi.Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
3 sẽ thành `true`2,
`Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
4 sẽ thành `true`4,
`Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
0 sẽ thành `true`6 còn `true
sẽ thành `true`8.`String[null] // "null" String[[null]] // "" [null, undefined] == "," // true [null] == 0 // true [undefined] == 0 // true `Code language: JavaScript [javascript]
- Trong phép toán ép kiểu về Number thì
`Boolean[1] // true
String[null] // "null"
Number["10.3"] // 10.3
Number["1string"] // NaN
String[[1, 2, "string"]] // "1,2,string"
`Code language: JavaScript [javascript]
3 sẽ thành
`if [null] {
} else if [0] {// It will not reach here
} else if [""] {// It will not reach here
} else if [1] {// It will not reach here
} `Code language: JavaScript [javascript] 6, `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 4 sẽ thành `if [null] {// REACH here
} else if [0] {// It will not reach here
} else if [""] {// It will not reach here
} else if [1] {// It will not reach here
} `Code language: JavaScript [javascript] 9.// REACH here
- Phép phủ định
Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 05 của một biến, hay một giá trị sẽ ép kiểu biến hay giá trị đó về Boolean trước, sau đó sẽ lấy phủ định. Từ đó ta có `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 06 sẽ là `true
, cònBoolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 08 sẽ là `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 0. Dựa vào tính chất này, ta có thêm một cách đơn giản để check xem một giá trị có Boolean là `true
hay `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 0, đó là dùng phép `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 05 2 lần. Ví dụ:
`!!0 //false !!"0" // true !![] // true !!{} // true `Code language: JavaScript [javascript]
- Phép toán `false == false // It will return true. Too easy, right ? :D // But how about the following ? TRUE or FALSE ? // Các phép so sánh sau trả về true hay false null == undefined // true null == false // false undefined == false // false NaN == NaN // false NaN == false // false NaN == true // false 63 == false // false 63 == true // false 0 == false // true "63" == true // false "63" == false // false "0" == true // false "0" == false // true !"0" == !false // false "" == false // true [] == "" // true [] == false // true [] == "0" // false [] == 0 // true [] == ![] // true "0" == !"0" // true 0 == {} // false [1] < 2 // true // Initialize variables - Khởi tạo biến a = {} b = {} // TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ? a < b // false a > b // false a == b // false a = b // true`Code language: JavaScript [javascript] 5 thực sự là một cái bẫy nữa. Như trong tiếng Việt thì ta sẽ gọi đó là phép toán lớn hơn hoặc bằng, tuy nhiên thực tế Javascript lại không dịch như vậy, nó hiểu `false == false // It will return true. Too easy, right ? :D // But how about the following ? TRUE or FALSE ? // Các phép so sánh sau trả về true hay false null == undefined // true null == false // false undefined == false // false NaN == NaN // false NaN == false // false NaN == true // false 63 == false // false 63 == true // false 0 == false // true "63" == true // false "63" == false // false "0" == true // false "0" == false // true !"0" == !false // false "" == false // true [] == "" // true [] == false // true [] == "0" // false [] == 0 // true [] == ![] // true "0" == !"0" // true 0 == {} // false [1] < 2 // true // Initialize variables - Khởi tạo biến a = {} b = {} // TRUE or FALSE ? Các phép so sánh sau trả về TRUE hay FALSE ? a < b // false a > b // false a == b // false a = b // true`Code language: JavaScript [javascript] 5 là phép toán không nhỏ hơn.
- Tức phép toán `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 15 không phải tương đương với `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 16, mà nó tương đương với `Boolean[1] // true String[null] // "null" Number["10.3"] // 10.3 Number["1string"] // NaN String[[1, 2, "string"]] // "1,2,string" `Code language: JavaScript [javascript] 17
The Answers
Dưới đây là đáp án cho những câu hỏi được đưa ra ở đầu bài viết.
Nếu bạn đã đọc hết phần phía trên rồi thì chắc có thể hiểu được tại sao nó lại ra được đáp án như dưới đây. Còn nếu có câu nào mà bạn vẫn chưa hiểu được nguyên nhân thì điều đó có nghĩa là bạn đã bỏ sót điều gì đó rồi đấy, kéo lên đọc lại thôi [honho]