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

    +1

    1. 01
    2. 02
    3. 03
    4. 04
    5. 05
    6. 06
    7. 07
    8. 08
    9. 09
    10. 10
    11. 11
    12. 12
    13. 13
    14. 14
    15. 15
    16. 16
    17. 17
    18. 18
    19. 19
    20. 20
    21. 21
    22. 22
    23. 23
    24. 24
    25. 25
    26. 26
    27. 27
    28. 28
    29. 29
    30. 30
    31. 31
    32. 32
    33. 33
    34. 34
    35. 35
    36. 36
    37. 37
    38. 38
    39. 39
    40. 40
    41. 41
    42. 42
    43. 43
    44. 44
    45. 45
    46. 46
    47. 47
    48. 48
    49. 49
    50. 50
    51. 51
    52. 52
    53. 53
    54. 54
    55. 55
    56. 56
    <script>
            window["flags"] = {
            "purcTOFlag": "true" == "true" ? true : false,
            "ENBL_CANCEL_POLICY": "true" == "true" ? true : false,
            "ENBL_BACKUP_CHECK_OLD_DEVICES": "false" == "true" ? true : false,
            "ENBL_DIRECT_ACCESS_LINKS": "true" == "true" ? true : false,
            "ENBL_NEW_ABG_URL": "true" == "true" ? true : false,
            "cr_9839666": "true" == "true" ? true : false,
            "cubaCRFlag": "true" == "true" ? true : false,
            "cubaMultiCityCRFlag": "true" == "true" ? true : false,
            "youthCRFlag": "true" == "true" ? true : false,
            "ENABLE_AFOP_MODE": "true" == "true" ? true : false,
            "SHARE_ITINERARY_ON_FACEBOOK": "false" == "true" ? true : false,
            "cr_11668201": "true" == "true" ? true : false,
            "hotelCRFlag": "true" == "true" ? true : false,
            "cr_adoshareitinerary": "false" == "true" ? true : false,
            "ROUNDOFF_AMOUNT_FOR_US_EDITION": "true" == "true" ? true : false,
            "hideSeatPromotionalBanner": "true" == "true" ? true : false,
            "enablePremiumRougeCR": "true" == "true" ? true : false,
            "availFareSplit": "true" == "true" ? true : false,
            "improvedMixedCabin": "true" == "true" ? true : false,
            "adoPassengerPrepopulate": "true" == "true" ? true : false,
            "adoIataInformation": "true" == "true" ? true : false,
            "premiumRougeSeatSelection": "true" == "true" ? true : false,
            "displayIntlTerminal": "true" == "true" ? true : false,
            "continueDisabledLightboxIsEnabled": "true" == "true" ? true : false,
            "createAeroplanFromConf": "true" == "true" ? true : false,
            "contOnAvailPage": "true" == "true" ? true : false,
            "alpiSpecialAssistanceCRFlag": "true" == "true" ? true : false,
            "removePaxTitle": "false" == "true" ? true : false,
            "perDiemInsurance": "true" == "true" ? true : false,
            "isVisaCheckoutEnabled": "true" == "true" ? true : false,
            "isCashRewardEnabled": "true" == "true" ? true : false,
            "masterPassCRFlag": "true" == "true" ? true : false,
            "masterPassAllowedEdition": "CA\-en:CA\-fr:CA\-zh",
            "youthphase2CRFlag": "true" == "true" ? true : false,
            "isCitylistPerfEnabled": "true" == "true" ? true : false,
            "isSingleTravelOptionEnabled": "false" == "true" ? true : false,
            "retainPaymentInformation": "true" == "true" ? true : false,
            "hotelChildAgeCR": "true" == "true" ? true : false,
            "displayGeoFirst": "true" == "true" ? true : false,
            "displayDiscAvail": "true" == "true" ? true : false,
            "premiumRougeUpsell": "true" == "true" ? true : false,
            "enableReplaceOpinionLabs": "true" == "true" ? true : false,
            "displayOalRef": "true" == "true" ? true : false,
            "newTravelOptionsLayoutFlag": "true" == "true" ? true : false,
            "hotelWidgetAPI": "true" == "true" ? true : false,
            "enableCombinedPhoneNo": "true" == "true" ? true : false,
            "hideTripSummaryForMobile": "true" == "true" ? true : false,
            "enableSecureAttribute": "true" == "true" ? true : false,
            "enhancedPreviewSeatMap": "true" == "true" ? true : false,
            "enhancedSeatMap": "true" == "true" ? true : false,
            "firstClassCabinCR": "true" == "true" ? true : false,
             .
             .
    }

    Taken from aircanada.com. Enjoy!

    Запостил: devfromhell, 31 Мая 2019

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

    • "masterPassAllowedEdition": "CA\-en:CA\-fr:CA\-zh",

      Лишнее
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • показать все, что скрытоvanished
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • показать все, что скрытоvanished
            Ответить
            • 1. Чем null отличается от undefined? undefined используется, когда переменной не было присвоено никакое другое значение.

              var a; // переменной не присвоено никакое значение
              a = 5; // теперь присвоено
              a = undefined; // возвратили первоначальное состояние


              null является примитивным значением, которое представляет отсутствие объекта. Например метод match класса String в случае, когда строка не подходит под регулярное выражение возвращает null вместо массива.
              Ответить
              • показать все, что скрытоvanished
                Ответить
                • Необъявленная переменная...
                  if("a" in window)
                      console.log("variable 'a' is declared");
                  else
                      console.log("variable 'a' is not declared");


                  Объявленная переменная с неопределённым значением...
                  var a;
                  
                  if(a === undefined)
                      console.log("variable 'a' has undefined value");
                  else
                      console.log("variable 'a' has value:", a);
                  Ответить
                  • показать все, что скрытоvanished
                    Ответить
                    • Глобальный объект в node.js тоже есть: global.

                      Потому что var может быть объявлено несколько раз, что удобно в консоли. Ну или блочная видимость...
                      {
                          let a;
                      
                          if(a === undefined)
                              console.log("variable 'a' has undefined value");
                          else
                              console.log("variable 'a' has value:", a);
                      }
                      Ответить
                      • показать все, что скрытоvanished
                        Ответить
                        • Присоединяюсь к вопросу. Я использую https://caniuse.com/, но чуть ли не в половине случаев он говорит, что для поддержки всех веб-браузеров мне придётся почитать Исаака Эммануиловича Бабеля.

                          С чего лучше начать: с «Конармии» или с «Одесских рассказов»?
                          Ответить
            • 2. почему typeof null === "object"?!
              Результат typeof берётся из следующей таблицы...
              ┌───────────────────┬─────────────┐
              │    Тип значения   │  Результат  │
              ├───────────────────┼─────────────┤
              │ Undefined         │ "undefined" │
              ├───────────────────┼─────────────┤
              │ Null              │ "object"    │
              ├───────────────────┼─────────────┤
              │ Boolean           │ "boolean"   │
              ├───────────────────┼─────────────┤
              │ Number            │ "number"    │
              ├───────────────────┼─────────────┤
              │ String            │ "string"    │
              ├───────────────────┼─────────────┤
              │ Symbol            │ "symbol"    │
              ├───────────────────┼─────────────┤
              │ Object (не реали- │ "object"    │
              │   зован [[Call]]) │             │
              ├───────────────────┼─────────────┤
              │ Object (реализо-  │ "function"  │
              │   ван [[Call]])   │             │
              └───────────────────┴─────────────┘
              Есть причина, по которой оно так работало в первой версии JS. Во всяком случае null, также как и undefined, является единственным значением, и вы можете его сравнить напрямую. (object != null)

              И уже после проверки наличия объекта, вы можете посмотреть на его тип (object.constructor) или проверить наследование (например, object instanceof HTMLButtonElement).

              typeof необходим только для того, чтобы проверить примитивы: строки, числа, булевы значения и символы. Если вас объект интересует именно как объект, а не примитив, то вам достаточно проверить его на равенство null.

              Консистентность при работе с типами, как вы увидели, есть: сначала вы проверяете наличие объекта (object != null), а затем смотрите его тип (object.constructor).
              Ответить
      • Где-то тут мне недавно поясняли, что null — это такой специальный объект, семантически обозначающий что-то вроде «тут мог бы быть ваш настоящий объект, но его сейчас нет». А undefined — это просто хуй пойми что.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Именно поэтому я против «JavaScript».
            Ответить
          • А вообще это всё потому, что авторы «JavaScript» не осилили исключения и/или статическую типизацию. Вот, к примеру, есть у нас объект «baba», мы пытаемся обратиться к полю «baba.hui». В хороших языках мы получим ошибку компиляции, в нормальных — какой-нибудь KeyError. А в «JavaScript» решили возвращать какое-нибудь особое значение, обозначающее, что такого поля нет. «Null» возвратить нельзя, потому что это вполне себе валидное значение для поля (а вдруг хуй просто отрезали?), поэтому сделаем ещё одно специальное значение — undefined.
            Говноеды, короче.
            Ответить
            • показать все, что скрытоvanished
              Ответить
              • Но мы никак не можем различить поле, которому присвоили значение «undefined», и простое отсутствие этого поля — то есть валидным значением «undefined» всё же не является, а конструкция «obj.hui = undefined» эквивалентна удалению хуя.

                Авторы «JavaScript» могли бы упороться и ввести бесконечно-расширяемый (в условиях интов авотхуй, в жс флоаты) метатип «undefined^N», где N — целое число. Тогда в каждом объекте нужно хранить максимальную степень неопределённости его полей, и если для какого-то поля она выше максимальной — значит, этого поля и вовсе нет, а если ниже — значит, его намеренно присвоили. И чтобы чётные степени undefined'а были равны друг другу и null-у, а нечётные — равны друг другу, но не равны чётным и null.[/color]
                Ответить
                • показать все, что скрытоvanished
                  Ответить
                  • Ты прав, но проверять поля так неправильно
                    const a = {b:3}
                    Object.defineProperty(a, 'c', {value:3})
                    Object.keys(a)// ==>["b"]

                    Если надо проверить, то лучше так:
                    'b' in a
                    a.hasOwnProperty('b')
                    Ответить
                    • показать все, что скрытоvanished
                      Ответить
                      • Если есть подозрения что твои коллеги будут заниматься такой хуйней, придется сделать отдельную функцию:
                        function hasProp(obj, prop){
                        	return ({}).hasOwnProperty.call(obj, prop)
                        }
                        hasProp(a, 'c') // false
                        hasProp(a, 'hasOwnProperty')// true
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • Вообще нихуя не безопасно. С другой стороны https://www.zdnet.com/article/over-100000-github-repos-have-leaked-api-or-cryptographic-keys/
                            Ответить
                            • показать все, что скрытоvanished
                              Ответить
                              • Приведи пример, не понимаю о чем ты
                                Ответить
                              • Код, который я привел с вызовом через прототип объекта - это популярное решение, я его видел в репозиториях google.
                                Можешь еще сделать так:
                                // создадим объект без прототипа, чтобы никто в оператор in не насрал
                                const a = Object.create(null)
                                'hasOwnProperty' in a // false

                                А вообще если тебе нужен map - используй es6 Map
                                Ответить
                                • Через ргототуре вызывай
                                  Ответить
                                • показать все, что скрытоvanished
                                  Ответить
                                  • Map является объектом встроенным в ядро JavaScript, Babel тут не причём.

                                    В чём поломка? Реализован интерфейс итератора, чтение, запись, проверка.

                                    null и undefined не являются экземплярами никаких классов, они являются примитивами.

                                    undefined является свойством глобального объекта.

                                    Его значение может быть получено из void {};

                                    Это примитивное значение используется, когда переменной не было присвоено никакое значение.

                                    null является примитивным значением, которое представляет отсутствие значения объекта.
                                    Ответить
                                    • показать все, что скрытоvanished
                                      Ответить
                                      • > почему тип нулла объект
                                        Так получилось в первой реализации, скорее всего. Представь, что ты запиливаешь сишную структуру под жс значения. Скорее всего у тебя там будет енум с типом и юнион из дабла и поинтера. И этот самый поинтер юзается только для объектов. Видимо так и родился нулл с типом объект. А undefined - это уже отдельное значение енума.
                                        Ответить
                                      • Разумеется если вы возьмёте старый движок, то там не будет реализации нового стандарта. Во всяком случае Map есть в движке IE 11. (https://i.imgur.com/bVFTce0.png)

                                        Проверка на null производится так: object != null.

                                        А typeof null === "object" существует по историческим причинам, вам это не нужно. (http://2ality.com/2013/10/typeof-null.html)
                                        Ответить
                      • Именно поэтому я против джаваскриптовских «словарей». Это ж надо было, блядь, такую хуйню придумать!
                        Ответить
                        • показать все, что скрытоvanished
                          Ответить
                          • За «dict».
                            Ответить
                            • В «PHP» нет ни джаваскриптовских «словарей», ни «dict». Именно поэтому я за «PHP».
                              Ответить
                              • показать все, что скрытоvanished
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                              • показать все, что скрытоvanished
                                Ответить
                                • В итоге элемент пэхапэшного массива имеет числовой индекс и опциональный строковый ключ. Выглядит, как будто к обычному массиву с числовыми индексами рядом пристроили табличку строковых ключей.

                                  Можно индексировать массивы и так, и эдак, и течь.
                                  Ответить
                                  • показать все, что скрытоvanished
                                    Ответить
                                    • Угу. В «PHP» нет прямого доступа к этой секретной табличке. Что-то сделать с индексами можно либо стандартными функциями, либо через расширения.
                                      Ответить
                                      • показать все, что скрытоvanished
                                        Ответить
                                        • В другом известном языке до недавних пор вообще писали:
                                          var MyClass = new Function('foo', 'this.name = foo;');
                                          MyClass.prototype.baz = 'quux';
                                          var MyObject = new MyClass('bar');

                                          Здорово, правда?
                                          Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                          • показать все, что скрытоvanished
                                            Ответить
                                            • Первая точка к самому числу относится.
                                              Ответить
                                            • Ну так это десятичное число...
                                              22.0.toString(16);
                                              0x16.toString(10);
                                              0b101000110.toString(16);
                                              0o170.toString(16);


                                              Хотя обычно число хранится в переменной...
                                              Ответить
                                              • > Хотя обычно число хранится в переменной...
                                                Я иногда так коллбэки передаю, правда в питоне:
                                                map((5).__mul__, arr)
                                                Ответить
                                                • ОК... буду знать! ☣️☢️☠️
                                                  Ответить
                                                  • Тест: ☣️☢️☠️

                                                    Неужели теперь работает?
                                                    Ответить
                                                    • Неработает. Только малая часть. Попытался какашкой и луёй.
                                                      Ответить
                                                      • Я заметил, что работают только символами с кодпоинтом U+XXXX, то бишь меньше 2^32. А вот от какашки, у которой U+1F4A9, ГК плюётся. Видимо, где-то внутри используется «UTF-16», а суррогатные пары не осилены. Какой Unicode )))
                                                        Ответить
                                                        • В «MySQL» есть кодировки «utf8» и «utf8mb4». Очевидно же, для чего они предназначены?

                                                          Если вдруг кто-то не знает, то сообщу, что кодировка «utf8» предназначена для кодирования символов, которые в «UTF-8» занимают не более трёх байтиков. Это символы с кодпоинтами меньше 2^32. Сразу можно догадаться по названию, не правда ли?

                                                          Кодировка же «utf8mb4» предназначена для кодирования символов, которые в «UTF-8» занимают не более четырёх байтиков. Это символы вплоть до U+10FFFF.

                                                          Неопытные мускулобляди выбирают кодировку «utf8» и теряют возможность сохранять символы с кодпоинтами от 2^32.
                                                          Ответить
                                                          • Ну вот. Умные люди задались благой целью: сделать Единую Кодировку, в которую входят вообще все символы письменности, чтобы избавиться от кошмарного восьмибитного наследия с его ФСРЙХЛХ Р╦ЛМШЛХ ГЮЙКХМЮМХЪЛХ. И всё хорошо: создали, избавились… но теперь вместо КОИ-8, CP-1251, ISO 8859-5 приходится ебаться с utf-8, utf-16, utf-32, последние два с BOM, без BOM, HE, LE и всё это в самых безумных сочетаниях с самыми безумными ограничениями и архитектурами (суррогатные пары — ёбанный пиздец). А конечное ПО только подливает масла в этот адский котёл, правильно поддерживая только треть стандарта, от другой трети крашась, а от последней генерируя совершенно неадекватные результаты.
                                                            Ответить
                                                            • uMeHHo noemoMy 9l 3a "ASCII".
                                                              Ответить
                                                              • x...x.x...x.xxxxx.x...x.x...x...x........
                                                                x...x.xx.xx.x.....x...x.x...x..x.x.......
                                                                x...x.x.x.x.x.....x...x.x...x.x...x......
                                                                x..xx.x...x.xxxx..xxxxx.xxxxx.x...x......
                                                                x.x.x.x...x.x.....x...x.x...x.x...x......
                                                                xx..x.x...x.x.....x...x.x...x..x.x.......
                                                                x...x.x...x.xxxxx.x...x.x...x...x........
                                                                .........................................
                                                                .........................................
                                                                .........................................
                                                                xxxxx...x....xx...xxxxx...x...x...x.x...x
                                                                x...x..x.x..x..x....x....x.x..xx.xx.x...x
                                                                x...x.x...x.....x...x...x...x.x.x.x..x..x
                                                                x...x.x...x..xxxx...x...x...x.x...x...x.x
                                                                x...x.x...x.....x...x...x...x.x...x....x.
                                                                x...x..x.x..x..x....x....x.x..x...x...x..
                                                                x...x...x....xx.....x.....x...x...x.xx...
                                                                Ответить
                                                            • > единую кодировку
                                                              Вавилонская башня 2.0
                                                              Ответить
                                                    • Вы про VARIATION SELECTOR-16?
                                                      Ответить
                                          • Имена представителей класса пишут обычно маленькими буквами.
                                            Ответить
                  • Хм, верно. Ну тогда см. второй абзац.
                    Ответить
                  • Похоже на луа, но в обоях случаях будет guest,gost
                    по этому я за луа.
                    Ответить
          • Нi, ты объекты и примитивы путаешь.
            Ответить
        • undefined используется, когда переменной не было присвоено никакое другое значение.

          var a; // переменной не присвоено никакое значение
          a = 5; // теперь присвоено
          a = undefined; // возвратили первоначальное состояние


          null является примитивным значением, которое представляет отсутствие объекта. Например метод match класса String в случае, когда строка не подходит под регулярное выражение возвращает null вместо массива.
          Ответить
      • https://youtu.be/ZCauftQOj88?t=1392
        Ответить
    • показать все, что скрытоvanished
      Ответить
      • О, боже! Расскажи нам ещё о странностях Javascript!
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • Вы можете написать свой собственный язык...

            Использование ECMAScript выходит за рамки простого языка скриптов, он используется для полного спектра задач программирования во многих различных средах. ECMAScript является полнофункциональным языком программирования общего назначения.
            Ответить
      • Symbol.toPrimitive используется, чтобы указать как какой-то объект привести к примитиву, зависящему от контекста в котором он находится! Т. е. вам нужно на своём объекте, который вы хотите сделать приводимым к примитиву, объявить метод с таким вычисленным именем.

        А метод toString объявлен в классе Object и возвращает какое-либо текстовое представление объекта.
        Ответить
        • показать все, что скрытоvanished
          Ответить
          • А почему статическое свойство должно болтаться где-то отдельно в глобальном объекте?

            Рассмотрите пример...
            class Vector3 {
            	constructor(x, y, z) {
            		Object.assign(this, { x, y, z });
            	}
            
            	static get zero() {
            		return new Vector3(0, 0, 0);
            	}
            
            	static get one() {
            		return new Vector3(1, 1, 1);
            	}
            }


            Вы можете получить определённые экземпляры вектора так: Vector3.zero, Vector3.one.

            Таким же образом получаются определённые экземпляры класса Symbol.
            Ответить
    • показать все, что скрытоvanished
      Ответить
    • показать все, что скрытоvanished
      Ответить
      • А зачем вам вычислять позицию в строке, когда вы по сути только хотите проверить наличие подстроки!
        if(str.includes("Widget")) {
            alert('Found it!"); // works
        }
        Ответить
        • Петух, строка, погода.
          Ответить
          • Кок! Строка, городской округ Алапаевское, Восточный управленческий округ, Свердловская область, Уральский федеральный округ, РФ. 8 градусов тепла. Слабый дождь.
            Ответить

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