我在JavaScript中进行一些比较。我复制了一些像这样的代码:
if (input.val() != input.data('original') )
//do stuff
我希望我必须更改某些内容,因为在此实例中input
为<select multiple>
,其中有多个可选选项限制为1.但它的工作没有任何变化。
我检查过,结果是:
13 == [13] //true
13 === [13] //false
我没想到比较会解开数组。
这是我在JavaScript中可以使用和依赖的预期和记录的功能吗?或者这只对我有用,因为一些浏览器开发人员决定让它工作吗?
答案 0 :(得分:3)
不,这取决于元素是否为字符串。
一个元素的结果是toString方法的结果,看起来像一个元素与元素相等。但结果总是一个字符串,而值可能不是字符串。
数组示例
array toString value ------- -------------- [1] '1' [1, 2] '1,2'
对于评估顺序,您可以查看标准ECMA 262 Version 5.1
如果操作数不是同一类型,则等于运算符会转换操作数,然后应用严格比较。如果两个操作数都是对象,那么JavaScript会比较内部引用,当操作数引用内存中的同一个对象时,它们是相等的。
答案 1 :(得分:2)
使用loose equality ( == )比较Object
和Number
:
尝试通过尝试&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