Как стать автором
Обновить

Комментарии 7

Объекты, кстати, можно «складывать» через + с объединением. JS так не умеет. Присутствующие в левом объекте ключи при этом перезапишутся соответствующими в правом. В своё время очень часто пользовался этой фичей, когда, например, надо было вернуть какие-нибудь опциональные поля:

var user=API.users.get({user_id: args.user_id, fields: "counters"})[0];
if(user.counters.albums>0){
    user=user+{albums: user+API.photos.getAlbums({owner_id: user.id})};
}
return user;

> JS так не умеет


Умеет, через spread operator:


c = { ...a, ...b } // c = a + b

Странности с объектами/массивами легко объяснить, если вспомнить язык PHP. В нем массивы ассоциативные и запоминают порядок элементов. А функция json_encode для пустого массива возвращает именно "[]". Также, массивы копируются при присваивании.


Легко проверить что код на PHP дает примерно такие же результаты: http://ideone.com/MN5oHn


То есть, я думаю, что виртуальная машина может использовать язык PHP или интерпретатор байт-кодов этого языка, или код работы с массивами оттуда.


Правда, пример с return 1000000000 + 2000000000; ведет себя не как в PHP — там результат автоматически преобразуется во float, и переполнения не происходит.

Это объясняет и хранение объектов по значению, а не по ссылке.

Дай олимпиадникам задачу написать API – они изобретут для этого собственный язык.

было бы не плохо, если бы новый язык хотя бы содержал какие то новые концепты, а то всё пермутация уже существующих фич. Так можно языки изобретать по 100 в день.
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий

Публикации

Изменить настройки темы

Истории