区别!运算符和javascript中的$ .IsNumeric?

时间:2016-08-04 12:54:48

标签: javascript jquery

我的条件需要在一侧使用字符串并在另一侧使用小数进行验证。但是,如果第二个条件为null,则返回true,输入并显示my is required消息。

context.Customer.Where(customer => 
    stringProperties.Any(prop =>
        prop.GetValue(customer, null) == query));

但是我正在考虑改变第二个条件

if (!equipObject[i].Mass[0].massId  && !equipObject[i].Mass[0].Price ) {
    // display message - either massId or Price are required!
}

代表

!equipObject[i].Mass[0].Price

这两种验证有何不同?哪一个是最佳的?根据BL,0不是有效价格。

3 个答案:

答案 0 :(得分:0)

如果equipObject[i].Mass[0].Price0

!0 // is true
!$.isNumeric(0) // is false

答案 1 :(得分:0)

好的,CRec,

在这种情况下!equipObject[i].Mass[0].Price您正在测试该对象(如果它们存在且具有值)。

在这种情况下!$.isNumeric(equipObject[i].Mass[0].Price.,您正在测试该值是否为数字值。

如果您需要确认价格始终为数字,则第二个是最好的,保证您在变量中的价格高于0。

答案 2 :(得分:-2)

TL; DR

他们非常不同,基本上完全不同的事情

!equipObject[i].Mass[0].Price

在这里,您将“值”和coerced取为真/假值,然后应用“不”。因此,如果我们将equipObject[i].Mass[0].Price替换为实际值,您会得到以下结果:

!0 //true
!1 //false
!2 //false
!0.00 //true
!1.8884441 //false
!"1.8884441" //false
!"one" //false
!true //false
!false //true
!null //true

等。所以这不是很安全的。

!$.isNumeric(equipObject[i].Mass[0].Price)

这利用jQuery's isNumeric function

  

$.isNumeric()方法检查其参数是否代表a   数值。如果是,则返回true。否则返回false。该   参数可以是任何类型。

让我们这样做:

!$.isNumeric(0) //false
!$.isNumeric(1) //false
!$.isNumeric(2) //false
!$.isNumeric(0.00) //false
!$.isNumeric(1.8884441) //false
!$.isNumeric("1.8884441") //false
!$.isNumeric("one") //true
!$.isNumeric(true) //true
!$.isNumeric(false) //true
!$.isNumeric(null) //true

结果非常不同。

  

哪一个是最佳的?

这取决于您对最优的定义。我假设您确实想检查某个东西是否为整数且大于零,在这种情况下我认为您需要第三种方式:

!$.isNumeric(equipObject[i].Mass[0].Price) && equipObject[i].Mass[0].Price !== 0

注意!==This prevents coercion