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

    −51

    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, 26 Октября 2016

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

    • И чо?
      Ответить
      • я вижу асимметричную криптографию питушню: setItem vs delete
        Ответить
        • Ну да, тут как бы лучше removeItem делать, но этотне такое говно, за которое надо сильно бить по рукам.
          Алсо, это может быть остатком рефакторинга хранилища в виде обычного объекта, используемого как хэш-таблица, на local storage.
          Ответить
        • А что возвращает delete?
          Ответить
          • "Я успешно удалил, можно мне отдохнуть?"
            Ответить
          • 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 - для тел функций
                              Ответить
                    • razrab_na_JS.jpg
                      Ответить

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