24 февр. 2009 г.

Самые эффективные решения - самые простые

Оказывается, как просто можно в js проверить, является ли что-то массивом:

function isArray(o) {
  return Object.prototype.toString.call(o) === '[object Array]'; 
}

Источник: http://thinkweb2.com/projects/prototype/instanceof-considered-harmful-or-how-to-write-a-robust-isarray/.

Кстати, в jQuery (начиная с 1.3), это проверяется именно этим способом.

Мне как-то всегда хватало o instanceof Array, но оказалось что у этого способа есть проблемы с фреймами. И еще, после замены instanceof Array на isArray у меня перестала течь память в IE6 в ZForms (вернее, в том случае, если ZForms использует родной Common.js).

3 комментария:

Степан Резников комментирует...

А я больше скажу: во многих областях жизнедеятельности "Simple is good".

- Программный код, интерфейс ("Simplicity is the best strategy" Douglas Crockford)
- Еда (Предпочитаю простую еду, например, фрукты, овощи, свежевыжатый сок, сухое вино, рис, мясо. А вот всякие навороченные блюда, вроде сложных салатов с майонезом, меня не вставляют совершенно.)
- Одежда (Тяготею к простой одежде, без выебонов.)

Конечно, не везде эта концепция находит себе место. Скажем, в искусстве ей не место, я считаю.

Анонимный комментирует...

instanceOf течёт при проверке window, document и element.

Unknown комментирует...

Ага, точно, на них и текло. Спасибо за ссылку :)