Javascript-форум (https://javascript.ru/forum/)
-   Opera, Safari и др. (https://javascript.ru/forum/css-html-browser/)
-   -   Opera: отличить массив от объекта мимикрирующего под массив (https://javascript.ru/forum/css-html-browser/18339-opera-otlichit-massiv-ot-obekta-mimikriruyushhego-pod-massiv.html)

tenshi 27.06.2011 10:53

Opera: отличить массив от объекта мимикрирующего под массив
 
var PreudoArray= function(){}
PseudoArray.prototype= Array.prototype
var list1= new PseudoArray
var list2= new Array


Вопрос: есть ли достаточно надёжный способ отличить первый от второго в Опере?

В остальных браузерах помогает проверка вида:
({}).toString.call( list1 ) === ({}).toString.call( list2 )

Riim 27.06.2011 12:05

Наполнять и смотреть меняется ли length:
var PseudoArray = function() {};
PseudoArray.prototype = Array.prototype;
var list1 = new PseudoArray;
var list2 = new Array;
list1[0] = null;
list2[0] = null;
alert(list1.length == list2.length);

?

tenshi 27.06.2011 12:19

так в опере length меняется в обоих случаях %-)

Riim 27.06.2011 12:35

tenshi, у тебя какая версия оперы?

tenshi 27.06.2011 15:02

хотя, да, при прямом присвоении не увеличивает. а вот например через функцию push увеличивает.

в любом случае менять объект - это как-то криво

tenshi 27.06.2011 15:02

хотя, да, при прямом присвоении не увеличивает. а вот например через функцию push увеличивает.

в любом случае менять объект - это как-то криво

trikadin 27.06.2011 16:14

Это ещё не криво... Just use it)

Riim 27.06.2011 17:03

Цитата:

Сообщение от tenshi
в любом случае менять объект - это как-то криво

нужно аккуратно возвращать все как было, хотя да, как-то все равно немного криво.


Часовой пояс GMT +3, время: 09:23.