Toán tử ! (Logical NOT / Phủ định) đảo ngược giá trị boolean của toán hạng.
- Nếu toán hạng truthy → trả về
false. - Nếu toán hạng falsy → trả về
true. - Luôn trả về boolean primitive.
Ví dụ
<!DOCTYPE html>
<html>
<body>
<script>
var answer = true;
document.write(answer + "<br>"); // true
document.write(!answer + "<br>"); // false
// Ép kiểu bất kỳ giá trị nào thành boolean
console.log(!0); // true
console.log(!1); // false
console.log(!""); // true
console.log(!"hello"); // false
console.log(!null); // true
console.log(!undefined);// true
console.log(!NaN); // true
console.log(![]); // false (mảng rỗng truthy)
</script>
</body>
</html>
Double NOT (!!): Ép kiểu thành boolean
!!"hello" // true
!!0 // false
!!null // false
!!{} // true (object rỗng truthy)
Ứng dụng thực tế:
// Kiểm tra tồn tại
if (!user) { redirectLogin(); }
// Toggle boolean
isVisible = !isVisible;
// Default value (trước ES6 default parameter)
function greet(name) {
name = name || "Khách"; // Nếu falsy thì dùng "Khách"
}
// Optional chaining + NOT
if (!user?.address?.city) { ... }