В этой лекции мы рассмотрим то, как происходит сравнение переменных нескольких типов данных, например, объекта и строки, массива и целого числа. Это более, чем допустимо в Java-script, так как Java-script имеет динамическую типизацию. Так же мы рассмотрим, что такое строгое сравнение, что такое нестрогое сравнение, и как объекты приводятся к строке. Предположим, у нас есть объект с твиттом, есть строка, которая является другим твиттом и содержит другой текст. Что будет, если мы сравним этот объект и эту строку? Обработка пойдет по следующему алгоритму, сначала мы вызовем специальный внутренний метод IsPrimitive к левому операнду, он возвращает true, если внутри него передан примитивный тип данных и false в противном случае. Так, как объект это сложный тип данных, то мы получим falce. После этого он применяет IsPrimitive к правому операнду и в данном случае так, как передана строка, то мы получим true, так как строка это примитив. После этого мы проверяем то, что у левого операнда существует функция "To string". В нашем случае она действительно есть. После этого мы вызываем эту функцию и уже сравниваем результат ее работы с правым операндом, который является примитивом. И так, как это будет две строки, но строки будут различные, то мы получаем false. Более подробно об этом алгоритме можно почитать по ссылке, прикрепленной к видео. Если же мы возьмем этот же самый твитт и строку, содержащую тот же текст, что и текст в твитте, то при их нестрогом сравнении, мы получим true, так как пройдя по тому же самому алгоритму мы вызовем этот "To string", получим строку, сравним ее с другой строкой и эти строки в данном случае будут одинаковы, поэтому мы получим true. При сравнении любых сложных типов данных, когда и слева, и справа сложный тип данных, мы всегда получим false, даже, если это два пустых объекта или два пустых массива, которые, казалось бы, являются равнозначными. Что же такое строгое и нестрогое сравнение? Вернемся к нашему твитту. Мы можем использовать двойной знак равенства при сравнении, тогда пройдя по всему алгоритму мы попытаемся преобразовать наш объект к строке с помощью метода "To string" и после сравнения получим true. Но мы можем использовать и тройной знак равенства для сравнения, тогда на первом шаге мы сравниваем, не просто является ли слева и справа переменные разного типа, а то, что они всегда должны быть одного типа, левый операнд и правый операнд должны быть одного типа и только в этом случае мы можем перейти к следующему шагу и сравнивать значение в третьих переменных. Так как переменные, в данном случае, разных типов, то мы получим false. Я бы всегда рекомендовал вам использовать именно строгое сравнение, чтобы не допускать сравнения разных типов данных и не допускать их возможное потенциальное преобразование к тому или иному типу. Как вы можете преобразовать объект к строке? Способов несколько. Первое: вы можете передать ваш объект внутри конструктора "string", и тогда он будет преобразован к строчке, либо вы можете сконкотенировать ваш объект с другой строкой и тогда тоже будет выбран метод "To string" и ваш объект также будет преобразован к строке. Лично я считаю, что передача в конструктор "To string" более явная и так гораздо проще и понятнее преобразовывать объект. Я бы рекомендовал использовать его. На этом все.