1. JavaScript / Говнокод #5185

    +166

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

    ЖИСТОКЕ

    Запостил: bugmenot, 08 Января 2011

    Комментарии (13) RSS

    • за такое надо голову отрывать :)
      Ответить
    • ну и где здесь говнокод?
      Ответить
      • это вместо а где тут С++ ? У троллей с подачи Сережи новые забавы "въебал по минусу" , "где здесь говнокод?"
        Ответить
        • это был логичный вопрос. Специально ради такого случая посмотрел исходники jquery, prototypejs и extjs. Везде проверяют массив похожим образом.
          Ответить
          • JQ
            type: function( obj ) {
            return obj == null ?
            String( obj ) :
            class2type[ toString.call(obj) ] || "object";
            }

            isArray: Array.isArray || function( obj ) {
            return jQuery.type(obj) === "array";
            },

            Остальных под рукой нет.

            Я как вижу узнается тип переменной и он сравнивается с тем что есть в массиве типов известных JQ если не находит там то возвращается object.

            Где тут [object Array]
            Ответить
            • блин почему нельзя редактировать сообщение 2 раза тем более с этим ===
              Ответить
              • Если нажать Ф5, то можно, но только 5 минут.
                Ответить
            • JQ
              ф-ия type
              type: function (i) {
              return i == null ? String(i) : L[x.call(i)] || "object"
              }
              Здесь берется значение из массива L объекта b
              x объявляется почти в самом начале
              x = Object.prototype.toString
              А потом чуть ниже происходит вот что
              b.each("Boolean Number String Function Array Date RegExp Object".split(" "), function (i, r) {
              L["[object " + r + "]"] = r.toLowerCase()
              });
              Т.е. по сути сравнивается Object.prototype.toString.call(0) == "[object Array]"

              В prototypejs
              function isArray(object) {
              return _toString.call(object) === ARRAY_CLASS;
              }
              здесь ARRAY_CLASS == '[object Array]'
              _toString == Object.prototype.toString

              аналогично в extjs
              isArray : function(v){
              return toString.apply(v) === '[object Array]';
              }
              Ответить
            • и так, блин, тепло и мягко, а тут еще религия не позволила [code] заюзать
              Ответить
          • а я всегда говорил что это ваше jquery - говно
            Ответить
            • Jquery хорошо. А вот Jquery UI говно. может Yahoo UI попробовать?
              Ответить
              • а я всегда говорил что если инкрезон хвалит - то определенно говно
                Ответить

    Добавить комментарий