基本上下面的代码是对rowind变量进行比较并显示alert,但不知何故它输出为Not Zero,即使它为零,那么它也会输出为" Not Zero",任何人都可以让我知道可能是什么原因?
<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 :(得分: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类型转换有关。
平等(==)
如果操作数不相同,则等于运算符转换操作数&gt;类型,然后应用严格的比较。如果两个操作数都是对象,那么&gt; JavaScript比较操作数&gt;时相同的内部引用。在内存中引用相同的对象。
以上解释了==
运算符在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
答案 1 :(得分:1)
0 == '' returns true in javascript
左操作数的类型为Number。 右操作数的类型为String。
在这种情况下,右操作数被强制转换为Number:
类型0 == Number('')
导致
0 == 0 // which definitely is true
是的
0 === '' will return false
因为,身份运算符===
不进行类型强制,因此在比较时不会转换值。
答案 2 :(得分:0)
比较是在字符串之间,'0'不等于''。
因为'0'!=''不会将它们中的任何一个转换为布尔值,因为它们属于同一类型 - String。