Assignment and Arithmetic
Tương tự C++, JS cũng có các toán tử gán cơ bản.
Ngoài ra còn có thêm toán tử toán tử lũy thừa: ** và toán tử gán lũy thừa: **= (tương tự Python).
Comparison
JS có thêm toán tử so sánh nghiêm ngặt ===: so sánh hai giá trị bằng nhau về giá trị và kiểu dữ liệu. Nếu một giá trị không thỏa mãn === thì nó cũng không thỏa mãn ==. Do vậy, dùng === an toàn hơn là dùng ==.
Ngoài ra, khác với so sánh nghiêm ngặt ===, toán tử == có thể tự ép kiểu ngầm định rồi mới thực hiện phép so sánh.
console.log("4" == 4) // trueLogical
Cũng tương tự C/C++, cũng gồm có các toán tử: &&, || và !.
Attention
Biểu thức sử dụng các toán tử này sẽ trả về giá trị dựa trên chân trị của toán hạng.
Xét ví dụ sau:
let result = "A" && "B" && "C"
console.log(result) // "C"Toán tử && đọc từ trái sang phải, nếu đối tượng đầu tiên là truthy[^1] thì sẽ lấy giá trị của đối tượng tiếp theo. Cứ xét tiếp từ trái sang phải đến khi nào gặp chân trị falsy thì dừng lại và trả về. Hoặc khi xét đến đối tượng cuối cùng thì cũng dừng lại và trả về giá trị của đối tượng đó.
Ở ví dụ trên, do “A” và “B” không phải là falsy nên “C” sẽ là giá trị của result.
Toán tử || thì ngược lại, nếu là truthy thì lấy, falsy thì xét tiếp.
let result = undefined || "C" || null
console.log(result) // "C"Summary
Tóm tắt lại như sau:
&&: Nếu là falsy thì dừng và trả ra kết quả, truthy thì xét tiếp.||: Nếu là truthy thì dừng và trả ra kết quả, falsy thì xét tiếp.Hai toán tử trên không trả về kiểu boolean mà trả về giá trị của các đối tượng có bên trong biểu thức. Chỉ khi các đối tượng có bên trong biểu thức là kiểu boolean thì toán tử mới trả về giá trị boolean.
Ternary Operators
Toán tử ba ngôi, nếu biểu thức trước toán tử là truthy thì thực hiện biểu thức sau dấu ?, là falsy thì thực hiện biểu thức sau dấu :.
let bool = true
bool ? console.log("Hello World") : console.log("Goodbye World")Nullish Coalescing
Nếu biểu thức trước toán tử là null hoặc undefined thì sẽ lấy giá trị của biểu thức phía sau toán tử.
let a = null
let number = a ?? 0
console.log(number) // 0Relational
So sánh hai toán hạng và trả về true hoặc false dựa trên mối quan hệ giữa chúng.
-
a instanceof b: kiểm tra xem đối tượngacó phải là instance của đối tượngbhay không.Ví dụ:
function Car(make, model, year) { this.make = make this.model = model this.year = year } const auto = new Car("Honda", "Accord", 1998) console.log(auto instanceof Car) // Expected output: true console.log(auto instanceof Object) // Expected output: true -
p in o: kiểm tra xem thuộc tínhpcó tồn tại trong đối tượngohay không.Ví dụ:
const car = { make: "Honda", model: "Accord", year: 1998 } console.log("make" in car) // Expected output: true delete car.make if ("make" in car === false) { car.make = "Suzuki" } console.log(car.make) // Expected output: "Suzuki"
Zero-filling Right Shift
Toán tử này (hay còn gọi là toán tử unsigned right shift - >>>) giúp dịch bit sang phải và điền các số 0 vào các vị trí trống.
const a = 5 // 00000000000000000000000000000101
const b = 2 // 00000000000000000000000000000010
const c = -5 // 11111111111111111111111111111011
console.log(a >>> b) // 00000000000000000000000000000001
// Expected output: 1
console.log(c >>> b) // 00111111111111111111111111111110
// Expected output: 1073741822sort file.ctime asc
## Resources
- [instanceof Operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/instanceof)
- [in Operator](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/in)
- [Unsigned Right Shift](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Unsigned_right_shift)
[^1]: xem thêm [[JS Booleans]]