关于javascript:第二个if语句不起作用

second if statement not working

在下面的程序中,我使用3个if条件,但是中间的if语句不起作用,最后一个if语句起作用,当我再次将第三个if语句更改为第二个语句时,第二个语句不能正常工作。第三,如果声明有效

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
function calculate() {
    var quantity = document.getElementById("quantity").value;
    var price = document.getElementById("price").value;
    var discount = document.getElementById("discount").value;
    var tax = document.getElementById("tax").value;

    if((quantity && price ) != null) {
        amount = quantity * price;
        document.getElementById("amount").value = amount;
    } else {
        alert("price & tax required");
    }

    if(discount != null) {
        var discount_amount = (quantity*price*discount)/100;
        amount = (quantity*price) - discount_amount;
        document.getElementById("amount").value = amount;
    } else {
        document.getElementById("amount").value = quantity * price;
    }

    if(tax != null) {
        var tax_amount = (quantity*price*tax)/100;
        amount = (quantity*price) + tax_amount;
        document.getElementById("amount").value = amount;
    } else {
        document.getElementById("amount").value = quantity * price;
    }
}


input.value返回一个字符串,该字符串不是null字符串,但可以是空字符串,如''字符串。

空字符串a在数字上下文中转换为零。如果不需要,你需要一个明确的检查,比如

1
2
3
if (input.value === '') {
    return;
}

if(discount != null)

假设折扣变量为空字符串。你对结果有什么看法?

1
if(""!=null)

将是true。如果你的字符串中有一些数据

1
if("someData"!=null)

它将再次成为true

我不怪你。在这种情况下,javascript有一些神奇的功能。

在javascript中,有很多逻辑操作可以表示为if条件的false。在代码下面,所有if语句都返回false

1
2
3
if(""){//code here}
if(null){//code here}
if(0){//code here}

开发人员不应比较两种不同的类型,如nullstring。以防万一,我建议你避免用双等号==。使用三联===,对类型敏感。看到这里


您不需要在任何if测试中显式检查空值,也不需要检查零值和未定义值。

1
2
3
4
5
6
7
8
9
10
11
if (quantity && price) {
   // only want to come in here for non-zero values of both
}

if (discount) {
   // only interested in the discount for non-zero values
}

if (tax) {
  // only interested in non-zero values of tax
}

1
if(discount != null)

折扣将为空字符串,并且不为空检查:

1
 if(discount !=="")