Комментарии 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;
0
Странности с объектами/массивами легко объяснить, если вспомнить язык PHP. В нем массивы ассоциативные и запоминают порядок элементов. А функция json_encode для пустого массива возвращает именно "[]". Также, массивы копируются при присваивании.
Легко проверить что код на PHP дает примерно такие же результаты: http://ideone.com/MN5oHn
То есть, я думаю, что виртуальная машина может использовать язык PHP или интерпретатор байт-кодов этого языка, или код работы с массивами оттуда.
Правда, пример с return 1000000000 + 2000000000; ведет себя не как в PHP — там результат автоматически преобразуется во float, и переполнения не происходит.
+4
Дай олимпиадникам задачу написать API – они изобретут для этого собственный язык.
+15
НЛО прилетело и опубликовало эту надпись здесь
Зарегистрируйтесь на Хабре, чтобы оставить комментарий
Публикации
Изменить настройки темы
Анализ языка VKScript: JavaScript, ты ли это?