Форум программистов, компьютерный форум, киберфорум
JavaScript для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.85/20: Рейтинг темы: голосов - 20, средняя оценка - 4.85
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 236

Равенство или Идентичность

24.09.2020, 06:23. Показов 4097. Ответов 9
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
В JavaScript есть два оператора для проверки на равенство: == (равенство) и === (идентичность или жесткое сравнение). Главное отличие в том, что оператор идентичности не допускает преобразования типов данных при выполнении операции сравнения. Помните, что две переменные или два значения равны (то есть результатом операции будет true) в том случае, если значения левого и правого операнды одинаковы или могут быть преобразованы к одинаковому значению.

Подскажите, пожалуйста, правильно ли понимаю, что идентичность сравнивает типы а равенство значения?
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
24.09.2020, 06:23
Ответы с готовыми решениями:

Докажите или опровергните равенство с помощью законов или диаграмм
(A ∪ B)/B=AΔ (A∩B) Можете обьяснить

Верно или неверно равенство?
Верно или неверно равенство: ¬c\(¬(a∨b)=¬a\(¬(b∨c) ? Желательно с решением

Докажите или опровергните равенство
Докажите или опровергните равенство: (A\setminus B)\wedge(C \vee B) = (A\wedge B) \setminus C

9
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
24.09.2020, 06:34
Очень странно спрашивать в разделе по C#.
Идентичность - более корректное и строгое сравнение, если рассматривать с колокольни C#.
Идентичность сравнивает и типы и значения.
Равенство сравнивает, используя за кулисами методы toString и valueOf объектов.
Откройте консоль прямо на этой странице и введите: null == undefined, null === undefined.
1
Эксперт .NET
 Аватар для Usaga
14078 / 9295 / 1347
Регистрация: 21.01.2016
Сообщений: 34,895
24.09.2020, 06:37
Лучший ответ Сообщение было отмечено DrType как решение

Решение

Ivanjs, нет. Сравниваются значения. Только в случае === без преобразований.
1
1 / 1 / 0
Регистрация: 17.04.2018
Сообщений: 236
24.09.2020, 07:05  [ТС]
Цитата Сообщение от Usaga Посмотреть сообщение
Ivanjs, нет. Сравниваются значения. Только в случае === без преобразований.
Объясните, пожалуйста, правильно ли понимаю идентичность в отличии от равенства проверяет сходство типов, а равенство сходство значений?
Миниатюры
Равенство или Идентичность  
0
управление сложностью
 Аватар для Почтальон
1693 / 1306 / 259
Регистрация: 22.03.2015
Сообщений: 7,545
Записей в блоге: 5
24.09.2020, 07:15
Цитата Сообщение от Ivanjs Посмотреть сообщение
идентичность в отличии от равенства проверяет сходство типов, а равенство сходство значений?
Идентичность кроме сравнения значения проверяет еще и тип этого значения.
1
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.09.2020, 08:41
Лучший ответ Сообщение было отмечено DrType как решение

Решение

Цитата Сообщение от Ivanjs Посмотреть сообщение
правильно ли понимаю идентичность в отличии от равенства проверяет сходство типов, а равенство сходство значений?
Лучше всего объясняют первоисточники: http://www.ecma-international.... sec-11.9.3
Двойное равенство:
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
11.9.3The Abstract Equality Comparison Algorithm
The comparison x == y, where x and y are values, produces true or false. Such a comparison is performed as follows:
 
If Type(x) is the same as Type(y), then
  If Type(x) is Undefined, return true.
  If Type(x) is Null, return true.
  If Type(x) is Number, then
    If x is NaN, return false.
    If y is NaN, return false.
    If x is the same Number value as y, return true.
    If x is +0 and y is −0, return true.
    If x is −0 and y is +0, return true.
    Return false.
  If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions). Otherwise, return false.
  If Type(x) is Boolean, return true if x and y are both true or both false. Otherwise, return false.
  Return true if x and y refer to the same object. Otherwise, return false.
If x is null and y is undefined, return true.
If x is undefined and y is null, return true.
If Type(x) is Number and Type(y) is String,
return the result of the comparison x == ToNumber(y).
If Type(x) is String and Type(y) is Number,
return the result of the comparison ToNumber(x) == y.
If Type(x) is Boolean, return the result of the comparison ToNumber(x) == y.
If Type(y) is Boolean, return the result of the comparison x == ToNumber(y).
If Type(x) is either String or Number and Type(y) is Object,
return the result of the comparison x == ToPrimitive(y).
If Type(x) is Object and Type(y) is either String or Number,
return the result of the comparison ToPrimitive(x) == y.
Return false.
Правила для тройного равенства
Code
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
11.9.6 The Strict Equality Comparison Algorithm
The comparison x === y, where x and y are values, produces true or false. Such a comparison is performed as follows:
 
If Type(x) is different from Type(y), return false.
If Type(x) is Undefined, return true.
If Type(x) is Null, return true.
If Type(x) is Number, then
  If x is NaN, return false.
  If y is NaN, return false.
  If x is the same Number value as y, return true.
  If x is +0 and y is −0, return true.
  If x is −0 and y is +0, return true.
  Return false.
If Type(x) is String, then return true if x and y are exactly the same sequence of characters (same length and same characters in corresponding positions); otherwise, return false.
If Type(x) is Boolean, return true if x and y are both true or both false; otherwise, return false.
Return true if x and y refer to the same object. Otherwise, return false.

Типы для тройного и двойного равенства формулируются хитро - именно как отдельные названия примитивных типов и все объекты в одном флаконе.
Для двойного равенства:
Например, Date в отличие от C# является объектом, и две одинаковые даты между собой никогда не равны, но равны соответствующему числу миллисекунд.
То есть разные непримитивы между собой никогда не равны, но могут быть равны соответствующему примитиву.

Добавлено через 6 минут
----
Если есть желание сравнивать объекты разных типов вменяемо, то оптимально для объектов завести свой метод obj1.equals(obj2) или использовать внешний объект-компаратор с методом equals(obj1, obj2).

Добавлено через 8 минут
----
Если интересно узнать теорию об эквивалентности, то кратко можно прочитать здесь: https://blog.rc21net.ru/csharp-sravnenie-obektov/
GetHashCode пока не нужно изучать, а Equals поизучать будет интересно.
3
Эксперт JS
6496 / 3907 / 2006
Регистрация: 14.06.2018
Сообщений: 6,781
24.09.2020, 09:01
Цитата Сообщение от IamRain Посмотреть сообщение
используя за кулисами методы toString и valueOf объектов.
Не использует за кулисами. Проверка:
Кликните здесь для просмотра всего текста
JavaScript
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
{
    let a1 = {
        toString() { return "aaa"; },
        valueOf() { return 5; }
    };
 
    let a2 = {
        toString() { return "aaa" },
        valueOf() { return 5; }
    }
    console.log(a1 == a2);
}
{
    let a1 = {
        toString() { return "aaa"; },
        valueOf() { return 5; }
    };
 
    let a2 = 5;
    console.log(a1 == a2);
}
{
    let a1 = 5;
 
    let a2 = {
        toString() { return "aaa" },
        valueOf() { return 5; }
    }
    console.log(a1 == a2);
}
let b1 = new Date("2020-05-01T10:00");
let b2 = new Date("2020-05-01T10:00");
console.log(b1 == b2);

IamRain, Usaga, по JS подробный ответ дал выше: https://www.cyberforum.ru/java... st14861495
В JS ещё нужно догадаться, что такое вообще тип, и что такое вообще значение. Достаточно мутный и своеобразный язык программирования.

Добавлено через 5 минут
---
Вернее, ToPrimitive() будет использовать строго иногда по указанным правилам.
1
24.09.2020, 09:03

Не по теме:

Конечно мутный) Делался-то он на коленке и чисто чтобы было. Кто ж знал, что через двадцать с лишним лет на нём придётся делать сложные вещи)

0
24.09.2020, 09:04

Не по теме:

Цитата Сообщение от amr-now Посмотреть сообщение
Достаточно мутный и своеобразный язык программирования.
это точно

0
 Аватар для IamRain
4693 / 2701 / 734
Регистрация: 02.08.2011
Сообщений: 7,226
24.09.2020, 10:04
amr-now, спасибо за поправку, точно и не помню детали, предпочитаю мыслить более концептуально с жабаскриптом.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
24.09.2020, 10:04
Помогаю со студенческими работами здесь

Верно или неверно равенство
Верно или неверно равенство \bar{C}-\bar{(A\vee B)}=\bar{A}-\bar{(B\vee C)} Проведите доказательство.

Доказать равенство или включение множеств
AU(B\C)⊃ (AUB)\C

Докажите равенство треугольников APD и AKB, и равенство углов BOP и BAD
BK и DP-высоты ромба ABCD, проведённые из вершин тупых углов соответственно на стороны AD и AB. Прямые BK и DP пересекаются в точке O....

Очень нужно подсчитать определитель на равенство/не равенство нулю
Здравствуйте. Мне очень нужно подсчитать данный определитель на равенство (или не равенство нулю), подскажите пожалуйста как мне его...

Описать процедуру или функцию которая проверяет на равенство списки A и B
Описать процедуру или функцию которая проверяет на равенство списки A и B. Проверяет количество и сами элементы.


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
10
Ответ Создать тему
Новые блоги и статьи
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Access
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru