API yandex карт и капризы с типами переменных JavaScript
При работе с API Yandex карт столкнулся наконец с еще одним недостатком JavaScript, а точнее отсутствие явного задания типа переменной. Например, долго искал ошибки в этом коде:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 |   lastcoors=JSON.parse(e);   // парсим JSON в массив                               ldt=lastcoors.rows[0].cell[0];                               lid=lastcoors.rows[0].cell[1];                               limei=lastcoors.rows[0].cell[2];                               lx=lastcoors.rows[0].cell[3];                               ly=lastcoors.rows[0].cell[4];                               lz=lastcoors.rows[0].cell[5];                                                            myPlacemark = new ymaps.Placemark([lx, ly], {                                                                   balloonContentHeader: "Балун метки",                                 balloonContentBody: "Содержимое <em>балуна</em> метки",                                 balloonContentFooter: "Подвал",                                 hintContent: "Хинт метки"                                 });                                                             myMap.geoObjects.add(myPlacemark);                               myMap.panTo([lx, ly], {delay: 1500}); | 
Метка ставится правильно, а перемещение идет невесть куда. Оказалось, что при разборе JSON, переменные lx и ly почему-то становятся строками, и если функции PlaceMark все равно с чем оперировать, с числом или строкой, то PlanTo непременно работает только с числом.
Решение: в JavaScritpt строка становится числом если участвует в математической операции.
Например:
| 1 2 | n=1; //явное число lx=lx*n; // lx тоже становится числом. | 
Итого получаем рабочий код:
| 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |   lastcoors=JSON.parse(e);   // парсим JSON в массив                               n=1;                               ldt=lastcoors.rows[0].cell[0];                               lid=lastcoors.rows[0].cell[1];                               limei=lastcoors.rows[0].cell[2];                               lx=lastcoors.rows[0].cell[3]*n;                               ly=lastcoors.rows[0].cell[4]*n;                               lz=lastcoors.rows[0].cell[5]*n;                                                            myPlacemark = new ymaps.Placemark([lx, ly], {                                                                   balloonContentHeader: "Балун метки",                                 balloonContentBody: "Содержимое <em>балуна</em> метки",                                 balloonContentFooter: "Подвал",                                 hintContent: "Хинт метки"                                 });                                                             myMap.geoObjects.add(myPlacemark);                               //alert(lx);alert(ly);                               myMap.panTo([lx, ly], {delay: 1500}); |