2014-04-14 14 views

Trả lời

23

Họ không phải là ở tất cả như nhau.

if (x) 

kiểm tra nếu x là Truthy nơi như kiểm tra sau này nếu giá trị Boolean của xtrue.

Ví dụ,

var x = {}; 
if (x) { 
    console.log("Truthy"); 
} 
if (x == true) { 
    console.log("Equal to true"); 
} 

Không chỉ một đối tượng, bất kỳ chuỗi (trừ một chuỗi rỗng), bất kỳ số (trừ 0 (vì 0 là Falsy) và 1) sẽ được coi là Truthy, nhưng họ sẽ không bằng true.

Theo ECMA 5.1 Standards, trong if (x), truthiness của x sẽ được quyết định, theo bảng sau

+-----------------------------------------------------------------------+ 
| Argument Type | Result            | 
|:--------------|------------------------------------------------------:| 
| Undefined  | false             | 
|---------------|-------------------------------------------------------| 
| Null   | false             | 
|---------------|-------------------------------------------------------| 
| Boolean  | The result equals the input argument (no conversion). | 
|---------------|-------------------------------------------------------| 
| Number  | The result is false if the argument is +0, −0, or NaN;| 
|    | otherwise the result is true.       | 
|---------------|-------------------------------------------------------| 
| String  | The result is false if the argument is the empty  | 
|    | String (its length is zero); otherwise the result is | 
|    | true.             | 
|---------------|-------------------------------------------------------| 
| Object  | true             | 
+-----------------------------------------------------------------------+ 

Lưu ý: Dòng cuối cùng object, trong đó bao gồm cả các đối tượng và Mảng.

Nhưng trong trường hợp sau, khi mỗi The Abstract Equality Comparison Algorithm,

If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y. 
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y). 

giá trị của x sẽ được chuyển đổi thành số và con số đó sẽ được đối chiếu true.

Lưu ý:

Trong JavaScript, true1false0.

console.log(1 == true); 
# true 
console.log(0 == false); 
# true 
+0

Có nghĩa là chuỗi sau có thể sử dụng chuỗi, int khác của boolean? –

+1

'var x = 'a'; if (x) alert ("X"); if (x == true) alert ("X true"); 'Điều này sẽ chỉ cảnh báo' "X" 'và không' "X true" ' – peirix

+1

1 được coi là trung thực (từ ECMA 5.1: Kết quả là false nếu đối số là +0, −0 hoặc NaN; nếu không kết quả là đúng) –

0

Một số trường hợp được đánh giá sai ở dạng đầu tiên, chẳng hạn như chuỗi rỗng, 0, không xác định, null.

Nếu bạn muốn được ngữ nghĩa về nó nhiều hơn một chút, hãy thử các bang bang ở phía trước của biểu thức:

if(!!x){...} 

này sẽ chuyển đổi các kết quả biểu thức để một truthy đại diện cho cùng một ngữ nghĩa. Đây là gần gũi hơn với một chất tương tự để biểu hiện bạn mô tả (x == true)

Cũng lưu ý rằng == là comparions giá trị với kiểu ép buộc, ví dụ: "3" == 3, trong khi === khẳng định gõ bằng quá.

Vì vậy, chúng không giống nhau, nhưng thường đại diện cho cùng một thử nghiệm, nhờ vào ngữ nghĩa của ngôn ngữ và !!bạn có thể sử dụng

+0

Cảm ơn. "if (!! x)" luôn bằng "if (x)" không? – TheZver

+0

Không, hãy tưởng tượng trường hợp này nếu (!! "hello") và nếu ("hello" == true), biểu thức đầu tiên sẽ được đánh giá là true vì "hello" không phải là chuỗi rỗng, undefined hoặc null vv. sự thật, là sự thật. Trong khi biểu thức thứ hai sẽ sai, bởi vì "hello" không thể bị ép buộc bằng giá trị đúng. http://jsfiddle.net/CEtN5/ – ComethTheNerd

+0

Xin lỗi tôi đã nhầm lẫn trong câu hỏi. Tôi có nghĩa là so sánh với nếu (x) – TheZver

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