Как выполнить проверку подлинности идентичности для строки в Javascript - PullRequest
0 голосов
/ 09 июля 2020

Я видел много объяснений оператора равенства идентичности ===, но кажется, что они не совсем точны, как то, что мы понимаем под равенством идентичности на других языках, таких как Java.

Кажется, для базовых типов (таких как число, строка), === return true указывает, имеют ли две переменные один и тот же тип и значение. Но не обязательно одно и то же (ссылки на один и тот же объект). Но для массивов и карт это так. Вот несколько примеров, которые меня смущают:

s1 = 'a' + '1'
    s2 = 'a' + '1'
    s1 === s2  // true, even they actually reference two different 
objects in memory which suppose to be different identities. 
    
    
    a1 = [1,2]
    a2 = [1,2]
    a1 === a2  // false, as they reference two different objects in memory, even their values are the same.

Может ли кто-нибудь подтвердить мое понимание? Также существует реальная проверка идентичности для строк в Javascript. т.е. s1 === s2 должен вернуть false в приведенном выше примере?

Ответы [ 2 ]

1 голос
/ 09 июля 2020

Спасибо за ответы. Я думаю, что источником истины является Javascript язык c относительно Строгое сравнение равенства . Он четко определяет поведение в SameValueNonNumber (x, y) . Путаница заключается в том, что во многих статьях неправильно используется термин Identity Equality вместо Strict Equality , нет такой концепции Identity Equality , основанной на spe c. (Хотя это аналогичное поведение для типов объектов, как указано в пункте 8 SameValueNonNumber(x, y)). Поэтому я считаю, что невозможно выполнить проверку равенства строк в Javascript.

0 голосов
/ 09 июля 2020

Это потому, что строка является примитивным типом, а массив - типом объекта. Примитивы можно сравнивать, как и следовало ожидать, однако при сравнении объектов вы сравниваете ссылки, а не сами объекты. *

Если вы не уверены в том, с чем имеете дело (примитив, например number или string, или object), typeof нужно выяснить

typeof new String() // object
typeof '' // string
...