2015-08-14 37 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 

为,身份操作===不会进行类型强制转换,因此在比较时不会转换值。