0

我对这个基本条件语句有疑问..

当 var 等于 9 时,脚本可以工作,但一旦达到 10 及以上,它指的是“running low”,这仅适用于数字 5 及以下...请帮助..

谢谢你。

<script type="text/javascript">


var inventory = "9";


if( inventory == "Sold Out" ){
   document.write("<b>Sold Out</b>");


}else if( inventory >= "6" ){
   document.write("<b>more than 5</b>");

}else if( inventory <= "5" ){
   document.write("<b>running low</b>");

}else{
  document.write("<b>error</b>");
}

</script> 
4

5 回答 5

2

您应该比较数字而不是字符串,因此您的情况会出错,试试这个

<script type="text/javascript">
var inventory = 9;
  if( inventory == "Sold Out" ){
     document.write("<b>Sold Out</b>");
  }
  else if( inventory >= 6 ){
   document.write("<b>more than 5</b>");
  }
  else if( inventory <= 5 ){
   document.write("<b>running low</b>")
  }
  else{
    document.write("<b>error</b>");
 }
</script> 
于 2012-10-31T19:09:35.587 回答
1

正如其他人指出的那样,问题在于引用数字时的含义与未引用时的含义不同。

例如:

var a = 2;

console.log(a == "2"); //returns true
console.log(a === "2"); //returns false

在大多数情况下,我建议在 JavaScript 中使用“严格”运算符。

文档可以在这里找到。


此外,您可能需要考虑使用 switch 语句,因为它更易于阅读和维护。

var feedback,
    inventory = 9;

switch (true) {
    case inventory === 'Sold Out' : feedback = 'Sold Out'; break;
    case inventory >= 6           : feedback = 'more than 5'; break;
    case inventory <= 5           : feedback = 'running low'; break;
    default : feedback = 'error'; break;
}

document.write('<b>' + feedback + '</b>');
于 2012-10-31T19:19:59.237 回答
0

您应该在比较中使用数字而不是字符串。

于 2012-10-31T19:09:52.607 回答
0

您的问题是您正在比较字符串而不是数字,请尝试使用inventory >= 5

示例:http: //jsfiddle.net/UwGGg/

var inventory = "10";


if ( inventory == "Sold Out" ){
   document.write("<b>Sold Out</b>");


} else if ( inventory >= 6 ){
   document.write("<b>more than 5</b>");

} else if ( inventory <= 5 ){
   document.write("<b>running low</b>");

} else {
  document.write("<b>error</b>");
}​
于 2012-10-31T19:10:39.480 回答
0

如果您想明确说明您的变量(库存)可以是字符串或数字(似乎您会接受值“Sold Out”),我建议将其强制为数字进行比较......这应该减少/消除意外结果(如果您进行单元测试)并为其他人提供一些代码文档以将它们关闭,您正在测试一个已知为字符串或数字的值。

于 2012-10-31T19:24:16.830 回答