На этой неделе я начинаю по-настоящему погружаться в JavaScript. Я немного изучил основы на подготовительном курсе Flatiron’s Bootcamp. но теперь, когда я понимаю, как работать с Ruby, это кажется далеким. На выходных у нас был небольшой курс повышения квалификации по домашнему заданию, но также было введено несколько новых концепций. Все это время я ловил себя на том, что сравниваю то, что я сейчас знаю о Ruby, с тем, что я узнал о JavaScript. Вот несколько концепций, которые мне запомнились.

Назначение и сравнение

В ruby ​​= используется для присваивания. Он используется для установки переменной. В Javascript это то же самое. Настоящая разница заключается в операторах сравнения. В Ruby мы используем == для сравнения двух значений и возвращаем true, если они оцениваются точно так же. В Javascript == — это нестрогий способ сделать это, что означает, что если тип значения на одной стороне не совпадает с типом на другой, JS попытается преобразовать его так, чтобы они совпадали. В JS более надежно использовать === для сравнения двух значений, так как эта версия является строгой, то есть она проверяет равенство каждого значения, а также тип, и если тип значений не совпадает, он возвращает ложный.

Объекты

В Ruby все является объектом. В JavaScript объект устанавливается в переменную и записывается как хэш. В обоих языках хеш — это способ организации пар ключ/значение. Объекты Ruby также написаны немного по-другому (намного больше точек с запятой!). Ключи и значения являются строками, тогда как в Ruby ключи были бы символами.

Кажется, что в объектах JavaScript нам не нужно инициализировать их методом так же, как в классах Ruby. Они инициализируются внутри функции с помощью Object.create() или new Object() для создания нового экземпляра и установки пар ключ/значение.

Я и это

В Ruby мы хорошо познакомились с отслеживанием значения self при обращении к нескольким объектам. Он использовался для обозначения текущего объекта, который «владеет» выполняющимся в данный момент кодом. Это означает, что внутри класса он может ссылаться на класс в целом или на отдельный экземпляр класса.

JavaScript-эквивалент self таков. Ключевое слово this внутри функции, создающей объект, содержит ссылку на самый последний инициализированный объект.

Прототип и класс

Каждый объект в JavaScript наследует свои свойства от прототипа. На первый взгляд кажется, что прототип эквивалентен суперклассу в Ruby. Однако они довольно разные. Прототип JavaScript сам по себе является объектом, и он может манипулировать, описывать или реализовывать другие объекты. Эти возможности являются определением метаобъекта, которым являются как классы, так и прототипы Ruby. Так какая разница? Прототипы гораздо менее приватны, прототип доступен для использования многими объектами. Они могут быть объединены в цепочку, при этом каждый объект наследует методы и свойства предшествующего прототипа. Объект Ruby не может хранить методы, но классы могут. Метод Javascript может хранить методы.

Надеюсь, это оставит вас чуть менее запутанными, чем я в эти выходные!

Первоначально опубликовано на lmhufnagel.blogspot.com 9 октября 2017 г.