是否有一个元素的数组等于元素?

时间:2016-11-08 17:34:32

标签: javascript

我在JavaScript中进行一些比较。我复制了一些像这样的代码:

if (input.val() != input.data('original') )
    //do stuff

我希望我必须更改某些内容,因为在此实例中input<select multiple>,其中有多个可选选项限制为1.但它的工作没有任何变化。

我检查过,结果是:

13 == [13]  //true
13 === [13]  //false

我没想到比较会解开数组。

这是我在JavaScript中可以使用和依赖的预期和记录的功能吗?或者这只对我有用,因为一些浏览器开发人员决定让它工作吗?

3 个答案:

答案 0 :(得分:3)

不,这取决于元素是否为字符串。

一个元素的结果是toString方法的结果,看起来像一个元素与元素相等。但结果总是一个字符串,而值可能不是字符串。

数组示例

  array  toString value
-------  -------------- 
    [1]             '1'
 [1, 2]           '1,2'

对于评估顺序,您可以查看标准ECMA 262 Version 5.1

Equality == (MDN)

  

如果操作数不是同一类型,则等于运算符会转换操作数,然后应用严格比较。如果两个操作数都是对象,那么JavaScript会比较内部引用,当操作数引用内存中的同一个对象时,它们是相等的。

答案 1 :(得分:2)

使用loose equality ( == )比较ObjectNumber

  

尝试通过尝试&gt;尝试将其对象参数转换为原始值。在A

上调用A.toString和A.valueOf方法的不同序列

那么你真正得到的是:

13 == [13]

是:

13 == ([13].toString().valueOf())

答案 2 :(得分:0)

这就是javascript的工作方式。 5 == '5' == true。 5 == [5]也是如此。

看看这些例子。 http://www.w3schools.com/js/js_comparisons.asp \

==运算符将在执行任何必要的类型转换后比较相等性。 ===运算符不会进行转换,因此如果两个值不是同一类型===将只返回false。

==会将两个值都转换为相似的类型,然后使用与===相同的比较 详细了解==转换的工作原理和图表。 https://developer.mozilla.org/en-US/docs/Web/JavaScript/Equality_comparisons_and_sameness