/values/string != boolean(/values/boolean)→ false
В этом случае мы проверяем множество узлов /values/stringна неравенство булевому значению множества /values/boolean. Второй операнд является "истиной" (поскольку множество элементов boolean, принадлежащих элементу values, не пусто), а значит, все сравнение обратится в "ложь".
/values/string = boolean(/values/booleans)→ false
В данном случае множество /values/stringсравнивается с булевым значением множества /values/booleans, которое будет "ложью", поскольку это множество будет пустым. Таким образом, результат сравнения также будет "ложью".
/values/strings = boolean(/values/booleans)→ true
Множества /values/stringsи /values/booleansбудут пустыми, поэтому, сравнивая первое с булевым значением второго, мы получим "истину", так как "ложь" равна "лжи".
Примеры сравнения множества узлов с числом:
/values/number < 1→ true
Множество узлов /values/numberможет считаться меньше, чем число 1, поскольку первый элемент этого множества имеет строковое значение " 0.5", при приведении которого к числу мы получаем 0.5, что меньше 1.
/values/number > 1→ true
То же самое множество узлов может считаться также и большим 1, поскольку последний элемент этого множества имеет строковое значение " 1.5", при приведении которого к числу мы получаем 1.5, что больше 1.
/values/number = 1→ true
Второй элемент множества /values/numberравен 1, то есть и это сравнение будет истинным.
Примеры сравнения множества узлов со строковым значением:
/values/number = '1'→ false
Множество /values/numberне будет равно строке " 1", поскольку ни один из узлов этого множества не имеет строкового значения " 1".
/values/number = '1.0'→ true
Множество /values/numberбудет считаться равным строке " 1.0", поскольку второй узел этого множества имеет текстовое значение " 1.0".
/values/number != '1.0'→ true
Множество /values/numberможет также считаться не равным строке " 1.0", поскольку первый узел этого множества имеет текстовое значение " 0.5", не равное " 1.0".
Примеры сравнения двух множеств узлов:
/values/number = /values/string→ true
Для двух этих множеств будет выполняться равенство, поскольку оба они имеют по узлу с равными строковыми значениями — первый узел /values/numberи первый узел /values/stringравны " 0.5".
values/number != /values/string→ true
Для этих же множеств будет выполняться неравенство, поскольку в них найдется неравная пара узлов (например, узел с текстовым значением " 1.0" в /values/numberи узел с текстовым значением " 50%" в /values/string).
Определим теперь равенство и неравенство значений простых типов. При проверке на равенство или неравенство оба операнда приводятся к общему типу и сравниваются. Приведение к общему типу производится следующим образом:
□ если хотя бы один из операндов имеет булевый тип, второй также приводится к булевому типу;
□ иначе, если хотя бы один из операндов — число, второй также приводится к численному типу;
□ иначе, если хотя бы один из операндов — строка, второй также приводится к строковому типу.
После того, как оба операнда приведены к некоторому общему типу, они проверяются на равенство или неравенства как два значения этого общего типа:
□ два булевых значения равны тогда и только тогда, когда они оба являются "истиной" или оба являются "ложью";
□ равенство численных значений понимается в обычном смысле (строгое определение равенства чисел дано в стандарте IEEE 754, но вряд ли оно представляет для нас большой интерес);
□ две строки равны тогда и только тогда, когда они представлены одинаковыми последовательностями Unicode-символов.
Два значения простых типов (то есть — булевого, численного или строкового типа) неравны тогда и только тогда, когда для них не выполняется равенство.
Примеры сравнения значений простых типов:
□ true() = 1→ true
При приведении числа 1к булевому типу получается "истина", что и подтверждается этим равенством.
□ true() = 100→ true
Результатом приведения числа 100к булевому типу также является "истина".
□ false() = 'false'→ false
При приведении непустой строки "false" к булевому типу, получается "истина". Отсюда — неверность равенства.
□ .5 =0.5→ true
.5и 0.5представляют одно и то же число, хоть и они записаны в разной форме.
Читать дальше