.lua → .js
Переход с Lua на JavaScript оказался сложнее, чем я ожидал.
Не из-за асинхронности, замыканий или прототипов. А из-за привычек после Lua. Вот несколько вещей, на которых я регулярно спотыкался:
1. Массивы начинаются с 1, а не с 0 В JavaScript: players[0] В Lua: players[1] Казалось бы, мелочь. Но первое время было непросто привыкнуть.
2. nil - это не undefined В JavaScript: obj.name = undefined; Свойство всё ещё существует. В Lua: obj.name = nil Ключ вообще удаляется из таблицы.
3. 0 и пустая строка - это true В JavaScript: if (0) { … } // false if (“”) { … } // false В Lua: if 0 then … end – true if “” then … end – true Ложными считаются только false и nil.
4. Склейка строк Вместо привычного: "Hello " + name В Lua: "Hello " … name
5. Массив и словарь - это один тип В JavaScript есть Array, Object, Map. В Lua почти всё строится вокруг одной структуры - table. Она одновременно может быть и массивом: players = {“Ann”, “Bob”} и словарём: player = { name = “Ann”, score = 100 } и даже сочетать оба варианта.
Все эти различия на первый взгляд кажутся незначительными, а на деле могут вызывать серьёзную путаницу. Не потому что их сложно понять, а потому что сложно переучиться.
Были ли у вас переходы между языками? Какой оказался самым неожиданным и/или сложным?
· 22.07
5 мимо. В js массив - это тоже объект (производный от него класс). Как и в lua. Массиву можно задать и прочитать именованное значение array.name = 123. Поле объекта можно получить как элемент массива, но не по индексу, а по ключу: obj[“name”]
ответить
коммент удалён
· 22.07
Спасибо за замечание)
ответить
ответ удалён