2015-08-14 77 views
0

基本上下面的代碼是做rowind變量的比較,並顯示警報,但不知何故它給出輸出爲非零即使它是零,那麼它也給輸出爲「不爲零」,可以任何一個讓我知道可能是什麼原因? 三元運算符奇怪的行爲,同時做數字比較

<head> 
    <script language="javascript" type="text/javascript"> 

    var rowind = 0; 
    var newind = ((rowind == '')) ? "Blank" : "Some number"; 

    //Output is Blank 
    alert(newind); 

    </script> 
</head> 
<body> 
</body> 
</html> 
+0

http://stackoverflow.com/a/359509/760211解釋了等號('=')運算符的行爲。 – Kita

+0

rowind ='0'和rowind ==''是兩個完全不同的東西。 – B4NZ41

+0

你的代碼中沒有「Not Zero」,它怎麼會輸出? – Bergi

回答

1

您正在檢查變量rowind是否等於您的條件中的空字符串。

((rowind == '')) // this will return as false since you variable is not an empty string. Rather it contains a string with 0 character 

如果要比較字符串,請使用以下內容。

((rowind == '0')) //This will return true since the string is as same as the variable. 

更新

你問的問題是關於JavaScript的類型轉換。

The MDN Doc

平等(==)

等於運算符轉換操作數,如果它們是相同>類型的不是,則實行嚴格的比較。如果兩個操作數都是對象,那麼當操作數>引用內存中的同一對象時,JavaScript比較內部引用。

上面解釋了==運算符如何在javaascript中工作。

在您的示例中,''將被轉換爲數字,因爲它正在與類型編號變量進行比較。所以javascript將''作爲數字,''等於0.因此,在您的條件下返回true。

console.log(0 == '0'); //True 
console.log(0 == ''); //True 
console.log('' == '0'); //False 

以下是strict comparison作爲示例。

console.log(3 == '3') //True 
console.log(3 === '3') //False 
+0

我用實際的代碼更新了我的問題,請你檢查一下,讓我知道它爲什麼會以空白形式發佈? –

+0

@SagarShirke我更新了我的答案,根據您更新的問題。 –

0

字符串和'0'之間的比較不等於''。因爲'0'!=''不會將它們中的任何一個轉換爲布爾值,因爲它們具有相同的類型 - 字符串。

+0

我已經用實際的代碼更新了我的問題,請你檢查一下,讓我知道它爲什麼會以空白形式發佈? –

1
0 == '' returns true in javascript 

左操作數的類型是編號的。 右操作數是String類型的。

在這種情況下,正確的操作將強制使用類型編號:

0 == Number('') 

導致

0 == 0 // which definitely is true 

是的

0 === '' will return false 

爲,身份操作===不會進行類型強制轉換,因此在比較時不會轉換值。