Javascript Array Equal To Zero But Not Itself
Solution 1:
console.log(0 == [])
//true
You are trying to compare object with an integer, so your object is implicitly typecasted to equivalent integer value that is 0
console.log([] == [])
//false
as two objects are never equal
Solution 2:
console.log([] == [])
That will compare whether array1 and array2 are the same array object in memory, which is not what you want.
In order to do what you want, you'll need to check whether the two arrays have the same length, and that each member in each index is identical.
console.log([].length == [].length)
// true
Solution 3:
Since the complete answer is never given and I actually understand it now, I'll provide the answer myself.
I found this in the Ecma-262 pdf:
It basically reads that [] == 0
is the same as Number([]) == 0
which is the same as 0 == 0
which is true. This does not apply to strict ===
.
There is no rule to compare objects other then rule number one, which is x is the same as y
. This means the same in everything, also memory address. Since they are not sharing the same memory address, rule 10 applies (return false).
The comparison
x == y
, wherex
andy
are values, produces true or false. Such a comparison is performed as follows:
If
Type(x)
is the same asType(y)
, thena. Return the result of performing Strict Equality Comparison
x === y
.If
x
isnull
andy
isundefined
, return true.- If
x
is undefined
andy
isnull
, return true.- If
Type(x)
isNumber
andType(y)
isString
, return the result of the comparisonx == ToNumber(y)
.- If
Type(x)
isString
andType(y)
isNumber
, return the result of the comparisonToNumber(x) == y
.- If
Type(x)
isBoolean
, return the result of the comparisonToNumber(x) == y
.- If
Type(y)
isBoolean
, return the result of the comparisonx == ToNumber(y)
.- If
Type(x)
is eitherString
,Number
, orSymbol
andType(y)
isObject
, return the result of the comparisonx == ToPrimitive(y)
.- If
Type(x)
isObject
andType(y)
is eitherString
,Number
, orSymbol
, return the result of the comparisonToPrimitive(x) == y
.- Return false
Solution 4:
This question is handled with the knowledge of object reference and type conversion more properly.First,in javascript, object value is stored by reference.So we can tell it is different from [] and [],because the two array correspond with two different addr in memory.Second, '==' is a not rigorous operation for both left and right, [] and 0 are both transformed to false
.
Post a Comment for "Javascript Array Equal To Zero But Not Itself"