Czy ktoś może wyjaśnić, dlaczego te porównania nierówności JavaScriptu są prawdziwe?Równość/nierówność macierzy:
[""] !== [""]
[1] !== [1]
[] !== []
[""] != [""]
[1] != [1]
[] != []
Czy ktoś może wyjaśnić, dlaczego te porównania nierówności JavaScriptu są prawdziwe?Równość/nierówność macierzy:
[""] !== [""]
[1] !== [1]
[] !== []
[""] != [""]
[1] != [1]
[] != []
===
jest ścisłe równość.
Porównując obiekty, zwraca wartość true tylko wtedy, gdy obie strony odnoszą się do tego samego obiektu.
[]
i []
są dwoma różnymi (chociaż równoważnymi) obiektami, więc zwraca wartość false.
==
to luźna równość.
Spróbuje przymusić oba operandy do tego samego typu, jak opisano w spec.
Jednak również porównuje obiekty według tożsamości referencyjnej.
Pamiętaj, że porównanie literałów łańcuchowych da wartość true ("a" === "a"), ale porównywanie obiektów String da wartość false: new String ("a ") === nowy ciąg (" a "). W ten sposób stwierdzam, że literały łańcuchowe nie są traktowane jako obiekty i "internowane" w sposób podobny do języka Java. –
@normc: Nie. W przeciwieństwie do Java, Javascript ma ciąg _primitive_ type, podobnie jak liczby. 'new String (" a ")' umieszcza go w obiekcie. Na przykład 'var a =" a "; a.b = 2; alert (a.b); // undefined' – SLaks
@normc: Zapakowane obiekty łańcuchowe prawie nigdy nie są używane; wszystkie operacje łańcuchowe zwracają prymitywy. – SLaks
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Operators/Comparison_Operators –
@GeorgeCummins Cóż, w większości języków będzie tak samo. –
myHouse i yourHouse są obydwoma domami, ale myHouse! == yourHouse -> true – Xotic750