2016-09-15 79 views
0

我有一个条件,如果在我需要检查,如果A具有相同的值,而不管乙数据类型,如Javascript/jQuery:不管数据类型如何,检查两个值是否相等?

if (A == B) { 
    //body of if statement 
} 

但在验证服务器检查将拒绝如果==存在。它会要求将其更改为===(但我无法更改此设置)。

我怎样才能做到这一点,其中A & B的可能值和类型

String, Number, null, '', undefined, NaN 

看起来简单,但可能只是一个逻辑错误... :)

+0

我认为你可以破解它变成'如果(A.toString()=== B.toString()){...}' – Aziz

+1

@Aziz这将在**一些**案例 –

+1

*中抛出错误“但我的服务器检查验证将拒绝如果”==“存在它将要求改变”===“(我不能改变)”*好吧,得到谁可以*改变它来改变它。有时你需要'=='。 –

回答

4

从根本上说,有==的有效用例,所以我会建议找到谁可以更改该规则,并让他们这样做。

在那由于缺少,你可以自己写一个函数,做什么呢==,这就是所谓的abstract equality comparison algorithm,然后使用该函数代替==

比较X == Y,其中x和y是值,产生真或假。如下执行这样的比较:

  1. 如果Type(x)是相同Type(Y),然后
    1. 返回执行Strict Equality Comparison X === y的结果。
  2. 如果x为null且y未定义,则返回true。
  3. 如果x未定义且y为null,则返回true。
  4. 如果Type(x)是Number并且Type(y)是String,则返回比较结果x == ToNumber(y)。
  5. 如果Type(x)是String并且Type(y)是Number,则返回比较结果ToNumber(x)== y。
  6. 如果Type(x)是布尔型,则返回比较结果ToNumber(x)== y。
  7. 如果Type(y)是布尔型,则返回比较结果x == ToNumber(y)。
  8. 如果Type(x)是字符串,数字或符号,并且Type(y)是Object,则返回比较结果x == ToPrimitive(y)。
  9. 如果Type(x)是Object并且Type(y)是字符串,数字或符号,则返回比较结果ToPrimitive(x)== y。
  10. 返回false。

以上使用的每个抽象操作的确切实现在规范中明确定义。

+0

plus1但我需要一个解决方法 – Antguider

+0

我认为问题是**,你需要一个解决方法! @JqueryRock – eisbehr

+1

@JqueryRock:第二段开始解决方法。 –

-2

我发现它,(解决方法)

A = A ? A.toString() : A; 
B = B ? B.toString() : B; 
if(A === B){ 
    //Rock it 
} 
+1

那么''0“== 0'是'true',但是你的'解决方法'返回'false' ......你应该在发布之前测试它作为答案 –

+0

@ A.Wolff:同意 – Antguider