2014-12-24 21 views
22

Tôi biết rằng null là một đối tượng không có thuộc tính hoặc chức năng.Tại sao (null == false) và (null == true) cả hai đều trả về false?

Tuy nhiên, tôi nhầm lẫn rằng tại sao console.log(null == false);console.log(null == true); cả hai đều trả về false.

Quy tắc chuyển đổi giữa nullboolean là gì?

+5

Cả hai đều bình đẳng sai vì rỗng không bằng đúng hay sai. Giống như '1' không bằng' "pizza" 'hoặc' {} '. Khi được sử dụng một mình giống như các câu lệnh, nó bị ép buộc thành boolean sai vì nó là giá trị falsey –

+0

Null là một chữ cái và sai là boolean, có thể là cả hai loại không thể so sánh –

+4

vì JavaScript –

Trả lời

32

Điều này là do Abstract Equality Comparison Algorithm đòi hỏi rằng nếu Type(x) hoặc Type(y) là một Boolean trong biểu thức x == y thì giá trị Boolean nên bị ép buộc thành một số qua ToNumber, chuyển đổi true đến 1 và false đến +0.

này có nghĩa là bất cứ so sánh của true == something hoặc something == true kết quả trong 1 == something hoặc something == 1 (thay thế true1 với false+0 cho false).

The Null type không so sánh bằng 1 hoặc +0 (trên thực tế, null chỉ có thể so sánh với undefined trong AECA).

Có một cuộc thảo luận chi tiết về tất cả các loại bình đẳng khác nhau trong JavaScript trên MDN cũng đáng xem xét nếu bạn muốn biết thêm.

Tuy nhiên, nếu bạn ép buộc null một số nó là coerced to +0 nên +null == false thực sự trả true.

+0

Cảm ơn bạn rất nhiều, tôi có một sự nhầm lẫn khác, tôi biết rằng 'isNaN (null)' bằng 'false' và' Số (null) 'bằng' 0', tại sao không thể cưỡng chế 'undefined' không' 0' – iatboy

+0

'null' và' undefined' tương đương trong trường hợp này rất có thể vì chúng là hai phần tử duy nhất trong JS không thể xử lý bất kỳ loại truy cập thuộc tính nào. '(0) .toString() ===" 0 "nhưng' (null) .anything' dẫn đến 'TypeError'. –

+0

Để biết câu trả lời đầy đủ, hãy xem https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness – stevemao

0

Giá trị null là một chữ JavaScript đại diện cho giá trị "trống" hoặc "không xác định". null là một trong những giá trị nguyên thủy của JavaScript. Nó không bằng boolean true cũng không bằng boolean false vì giá trị của nó không được xác định. Giá trị của null có khuynh hướng sai lệch hơn mặc dù nó không phải là false. Đó là lý do tại sao nó được gọi là nhà điều hành "falsey" và một khối if (var) { } không được thực thi khi varnull.

+0

'var' không nên được sử dụng như một tên biến vì nó là một từ dành riêng. ví dụ nên nói 'someVar' thay vì' var'. – SherylHohman

+0

Đừng nhầm lẫn "..giá trị không xác định" với giá trị 'không xác định'. Tốt hơn được nêu là ".. giá trị không rõ". – SherylHohman

2

Trả lời: Không có khía cạnh tương đối giữa null và boolean.

Nguồn MDN: -

Các giá trị null là một chữ (không phải là một tài sản của đối tượng toàn cầu như không xác định có thể được). Trong API, null thường được truy xuất tại vị trí mà đối tượng có thể được mong đợi nhưng không có đối tượng nào có liên quan. Khi kiểm tra hoặc không được xác định, hãy cẩn thận về sự khác biệt giữa bình đẳng (==) và toán tử (===) (chuyển đổi loại được thực hiện với trước đây).

// foo does not exist, it is not defined and has never been initialized: 
> foo 
"ReferenceError: foo is not defined" 

// foo is known to exist now but it has no type or value: 
> var foo = null; foo 
"null" 

Sự khác nhau giữa null và undefined

typeof null  // object (bug in ECMAScript, should be null) 
typeof undefined // undefined 
null === undefined // false 
null == undefined // true 

Javascirpt|MDN

+3

Bạn có lẽ nên làm cho nó rõ ràng hơn những phần của câu trả lời này bạn đã lấy từ nguồn và những phần bạn đã viết cho mình. Xem http://stackoverflow.com/help/referencing – BoltClock

1

Thêm vào cuộc thảo luận hiện tại. null> = false trả về true.

Tôi tin rằng đó là bởi vì đây được hiểu như là! (Null < false)

Các vấn đề liên quan