ЙажаСценарий / Говнокод #21573 Ссылка на оригинал

0

  1. 1
  2. 2
  3. 3
  4. 4
  5. 5
  6. 6
  7. 7
setServerURL: function(value) {
    if (value) {
        return localStorage.setItem('ServerURL', value);
    } else {
        return delete localStorage['ServerURL'];
    }
}

Ни буквы не придумал - 1:1 как в исходничке...

Запостил: NickPepper NickPepper, (Updated )

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

    • я вижу асимметричную криптографию питушню: setItem vs delete
      Ответить
      • Ну да, тут как бы лучше removeItem делать, но этотне такое говно, за которое надо сильно бить по рукам.
        Алсо, это может быть остатком рефакторинга хранилища в виде обычного объекта, используемого как хэш-таблица, на local storage.
        Ответить
        • true/false, конечно же. false в случае, когда попытались удалить неудаляемое.
          Ответить
          • > false в случае, когда попытались удалить неудаляемое
            > a = [1,2,3]
            Array [ 1, 2, 3 ]
            > a[1]
            2
            > delete a[1]
            true
            > a
            Array [ 1, <1 empty slot>, 3 ]
            > delete a[100500]
            true
            Пиздец какой-то. Как интуитивно то!
            Ответить
            • Хм, a[любой индекс] всегда возвращает true.

              А вот delete a уже возвращает false.
              Ответить
            • > Как интуитивно то!
              Консистентненько. JS ведёт себя так, как будто во всех сущностях (кроме null) существует бесконечное количество несуществующих элементов/полей/свойств со значением undefined.
              У a был элемент 100500 со значением undefined (судя по результатам чтения), мы его удалили - записали в него undefined. Это можно? Можно. true.
              > delete 2..bormand
              true

              Если в вашей двойке завёлся Борманд, вы знаете, что делать.
              На самом деле Борманда выселят из объекта-обёртки Object(2), а не из самой двойки, в которой он, согласно философии JS, будет продолжать жить.
              Ответить
              • Exactly. А если мы явно указали для поля, что оно неудаляемое, то delete вернёт false. Вообще, такими выкрутасами имеет смысл заниматься где-то в глубине библиотеки, где это реально чем-то оправдано.
                Ответить
              • > мы его удалили - записали в него undefined
                А вот нихуя! Удаление и запись undefined - разные операции:
                > a = {a:42, b:100500}
                Object { a: 42, b: 100500 }
                > delete a['a']
                true
                > a['b'] = undefined
                undefined
                > 'a' in a
                false
                > 'b' in a
                true
                Ответить
                • Обычно примерно в этом месте у некоторых начинается плач про 0, '0', null и undefined, и про страшные прототипы. Они просто не поняли суть.
                  Ответить
                  • > Они просто не поняли суть.
                    Они просто не раскушали говно.
                    Ответить
                      • Прототипы, наверное, единственная оригинальная и более-менее вменяемая концепция в жс.
                        Ответить
                    • Из сортов говна, которые приходится есть каждый день, это не самый невкусный, и к тому же без волос. К сожалению, пока что не изобрели язык программирования, который в принципе не содержал бы говна. Ну разве что тот, что с четырьмя директивами всего - херроворлд, бутылки на стене и что-то еще. Да и на том наверное можно родить говнокод, дать его в руки энтерпрайзным индусам.
                      Ответить
                • Пусть разные, но ведь после удаления в свойстве лежит undefined. Значит что-то записал туда undefined!
                  Ответить
                  • > в свойстве лежит undefined
                    А чому тогда 'a' in a возвращает false?

                    После удаления в свойстве не лежит ничего (но при чтении возвращается undefined, не кидать же исключение). После записи undefined в свойстве лежит undefined.
                    Ответить
                    • Вообще в js очень многое завязано на ничего, причем на разное ничего. Осталось это понять, но не просто понять, а понять, что нет никого, кто мог бы это понять. Оммм.
                      Ответить
                      • Да понять то это как раз легко. А вот простить - надо постараться.
                        Ответить
                      • >> не лежит ничего (но при чтении возвращается undefined
                        > разное ничего
                        Отлично, отлично. А то я уже начал думать, кого же жс читает, если в свойстве никого нет. Ведь по смыслу утиной типизации вроде бы свойство существует, но как-то отдельно от объекта, судя по результату in.
                        Ответить
                        • Т.е. есть ничто (null), ничего (undefined) и совсем-совсем ничего (отсутствие свойства, когда in возвращает false)?
                          Ответить
                          • Да, причём чётко различимые чуть ли не во всех случаях:
                            === undefined, in, hasOwnProperty - для объектов
                            === undefined, arguments.length - для тел функций
                            Ответить

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

Где здесь C++, guest?!

    А не использовать ли нам bbcode?


    8