• Почему не срабатывает Math.floor?

    @StiflerProger
    return Math.floor( (presentDate - startDate) / 1000 );
    Ответ написан
    Комментировать
  • Все циклы, кроме for..in, могут работать только с итерируемыми объектами?

    bingo347
    @bingo347 Куратор тега JavaScript
    Crazy on performance...
    С итерируемыми объектами работают только циклы for-of и for-await-of.

    В современном JS есть следующие виды циклов:

    1. while - цикл с условием
    // где condition - это некоторое выражение, которое можно скастовать к boolean
    while (condition) {
    }
    Данный цикл выполняется, пока условие condition истинно.

    2. do-while - цикл с постусловием
    do {
    } while (condition);
    Данный цикл выполняется как минимум 1 раз, условие condition проверяется после тела цикла и если оно истинно - запускается следующая итерация.

    3. for - цикл с инициализацией, условием и финальным выражением
    for (init; condition; final_expression) {
    }
    
    // основное применение - это цикл со счетчиком, но в целом мы не ограничены в применении
    for (let i = 0; i < 10; ++i) {
    }
    Перед циклом выполняется init, который может быть выражением или оператором объявления переменных (var, let, const). Перед каждой итерацией проверяется условие condition, пока это условие истинно - цикл будет выполняться. После каждой итерации выполняется final_expression.

    4. for-in - цикл по ключам объекта
    // где object - это некоторое выражение, которое можно скастовать к типу object
    for (const key in object) {
    }
    Данный цикл перебирает все перечислимые ключи самого объекта и всех объектов из его цепочки прототипов. Может работать медленно, а ключи из прототипа обычно не требуются, поэтому данный цикл не рекомендуется использовать.

    5. for-of - цикл по итерируемым объектам
    // где iterable - это некоторый объект с методом Symbol.iterator
    for (const value_variable of iterable) {
    }
    Перед итерацией создает итератор вызывая iterable[Symbol.iterator](), перед каждой итерацией дергает метод next у итератора, работает пока в возвращаемом из метода next объекте поле done не станет true, подставляет поле value в переменную value_variable. Цикл в примере выше можно реализовать в виде обычного for:
    {
      const iter = [1, 2, 3][Symbol.iterator]();
      for (let {done, value} = iter.next(); !done; ({done, value} = iter.next())) {
        const value_variable = value;
        {
          // тело исходного цикла
        }
      }
    }


    6. for-await-of - цикл по асинхронно итерируемым объектам
    // где iterable - это некоторый объект с методом Symbol.asyncIterator или методом Symbol.iterator
    for await (const value_variable of iterable) {
    }
    Перед итерацией создает итератор, одним из следующих способов:
    Если в объекте iterable есть метод Symbol.asyncIterator - то вызывает его.
    В противном случае вызывает метод Symbol.iterator.
    В остальном работает как for-of, с той разницей, что дополнительно применяет оператор await к значению итератора и в value_variable попадает то, что вернул данный await.
    Ответ написан
    Комментировать
  • Объект-итератор не итерирует объект. Почему?

    alexey-m-ukolov
    @alexey-m-ukolov Куратор тега JavaScript
    Вызов arr.values() всегда возвращает новый объект итератора, "перемотанный" на начало. Поэтому в первом случае у вас два разных итератора, а во втором - один и вы по нему идёте.
    Ответ написан
    Комментировать
  • Почему когда я обнуляю value в коллекции WeakMap, value остается прежним?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    если убрать весь пафос WeakMap, с простыми переменными всё точно так же:
    let value = { name: 'iOne' };
    let x = value; // ещё одна "ссылка" на объект
    
    value = null; // или  delete value; – то же самое
    x //  { name: "iOne" }
    Разберитесь с основами: Объекты и ссылки на объекты. Т.к. в объекте weakMap есть ссылка от ключа на объект-значение — объект вполне себе сохраняется. Главное, что всё ещё жива ссылка на объект-ключ key.

    Особенность WeakMap  – в тех объектах, которые выступают не значениями, а ключами.
    const weakMap = new WeakMap();
    let value = {name: 'Ivan'};
    let key = {};
    
    // добавление нового элемента
    weakMap.set(key, value);
    
    // обнуление
    delete key;
    Теперь, хоть объект, на который указывала переменная key всё ещё используется в качестве ключа в WeakMap, сборщик мусора, при срабатывании, таки удалит его.
    Ответ написан
    Комментировать
  • Почему в WeakMap key и value не удаляются, когда выводишь всю коллекцию, но удаляются, когда при выводе одного эл-та?

    @GrayHorse
    Первый пример некорректный, как уже написали. (Но рабочий.)

    {name: 'Ivan'}

    И что это еще за объект такой?

    Вот это я понимаю объект new Uint8Array(100_000_000). Весомый.

    Поспамь в консоль:
    let weakMap = new WeakMap();
    let obj = {a: new Uint8Array(100_000_000)};
    weakMap.set({}, obj);


    А теперь попробуй вместо WeakMap Map.

    А для наглядности можно еще один нолик добавить: new Uint8Array(1_000_000_000).

    Тестировать, например, тут: https://vueuse.org/core/usememory/#demo
    Так так тут счетчик памяти наглядно показывает удаление объектов.

    И, кстати, перезапись переменной let weakMap = new Map(); не поможет при таком спаме в консоль, т.к. если объект выведен в косколь, он так и будет висеть в памяти, пока консоль не будет очищена (console.clear()), либо страница перезагружена.

    Второй пример корректный. Жать сюда: 62aba2885d1b5233390599.png

    К слову, аналогичный класс из Java — WeakHashMap.
    Ответ написан
    Комментировать
  • Почему в WeakMap key и value не удаляются, когда выводишь всю коллекцию, но удаляются, когда при выводе одного эл-та?

    Seasle
    @Seasle Куратор тега JavaScript
    1. В WeakMap Вы положили ссылку на объект obj по литералу объекта. После того, как Вы заменили значение в obj, оно будет существовать в WeakMap, т.к. объект, по которому было записано значение не был удален или перезаписан. Ну и получить значение по новому литералу объекта не выйдет, т.к. они не равны между собой (ссылаются на различные участки памяти).
    2. GC работает не мгновенно, с некоторой периодичностью. Можете его вызвать в Chrome DevTools: Ctrl+Shift+P -> Collect garbage.
    Ответ написан
    4 комментария
  • Сравнение "буквенных" и "числовых" строк. Как происходит?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Про сравнение, к сожалению, только на английском: оператор «меньше»

    • если обе части — строки, то сравниваются Unicode коды
    • иначе JS попытается привести к числу не-числовые аргументы
    • .. если при этом где-то получился NaN, вернёт false
    • .. а так сравнит как числа


    В примере в вопросе как раз обе части – строки, т.к. в кавычках.
    "a" имеет код 97
    "1" имеет код 49

    "a" больше.

    Получить код символа можно методом строки codePointAt():
    "1a".codePointAt(0) // 49 - ascii и Unicode код символа "1"
    "1a".codePointAt(1) // 97 - ascii и Unicode код символа латинской маленькой "a"

    А вот с NaN вообще беспорядок:
    123 < "Z"  // false
    123 > "Z"  // тоже false
    Ответ написан
    Комментировать
  • Почему for..in не работает для коллекции Map?

    sergiks
    @sergiks Куратор тега JavaScript
    ♬♬
    Документация (только англоязычная версия) вроде бы, исчерпывающе объясняет:
    The for...in statement iterates over all enumerable properties of an object
    that are keyed by strings
    (ignoring ones keyed by Symbols),
    including inherited enumerable properties.


    Ожидаются свойства-строки. Map заточен под другое и позволяет использовать в качестве ключей что угодно, в том числе объекты. Значения добавленные в Map – это не его свойства в привычном смысле.

    Map, как и «всё в JavaScript» — объект. Поэтому можно взять и назначить ему свои свойства. Вот они вполне себе попадут в перечислёж for..in:
    const m = new Map();
    m.set({}, 'obj');
    m.set('a', 'A');
    
    // это другое
    m.b = 'B';
    
    for (let prop in m) {
      console.log('property', prop);
    }
    
    // property b
    Ответ написан
    Комментировать
  • Правильно ли использовать внутри Set неитерируемые эл-ты?

    MvcBox
    @MvcBox
    Software Developer [C/C++/JS(for Node.js)/etc]
    Вам необходимо немного потренироваться читать документацию.
    [] означает опциональный аргумент, а не массив как Вы подумали.
    В своем примере Вы передаете массив, который являет собой итерируемый объект.
    Ответ написан
    Комментировать
  • Какое устройство предоставляет публичные IPv4 в мобильной сети?

    hint000
    @hint000
    у админа три руки
    Получается, что существует некий "большой" маршрутизатор, принадлежащий провайдеру, который поддерживает NAT
    Для этого даже отдельный термин придумали:
    https://www.google.com/search?q=carrier+grade+nat
    (в вольном переводе на русский: NAT, здоровенный, как авианосец)
    Ответ написан
    4 комментария
  • Какое устройство предоставляет публичные IPv4 в мобильной сети?

    @Drno
    Для мобильников маршрутизатор стоит на вышке сотовой связи. Работает по принципу вифи - подключились, он дальше выдал IP, далее NAT и погнали
    Ответ написан
    4 комментария
  • Какое устройство предоставляет публичные IPv4 в мобильной сети?

    fzfx
    @fzfx
    18,5 дм
    Получается так.
    Ответ написан
    Комментировать
  • Может ли одно устройство совмещать функции маршрутизатора и коммутатора?

    @mordo445
    А еще есть такая необходима машина как коммутатор с поддержкой L3 функций (L3 Switch), что есть самый настоящий маршрутизатор с кучей портов, но всё еще коммутатор. А еще такой всеми любимый хлам 840 tp-link сам себе коммутатор, маршрутизатор и точка доступа wi-fi.
    Ответ написан
    Комментировать
  • Может ли одно устройство совмещать функции маршрутизатора и коммутатора?

    mixatronik
    @mixatronik
    mixatronik.ru
    Конечно может! Например у меня в конторе стоял роутер Keenetic и 16 -портовый коммутатор 3COM. После очередной грозы коммутатору прилетело и он приказал долго жить. Решил сделать всё красиво и заказал девайс CRS326-24G-2S+. Он и маршрутизатор и коммутатор и VPN-сервер.
    Ответ написан
    Комментировать
  • Может ли одно устройство совмещать функции маршрутизатора и коммутатора?

    @TheBigBear
    СтарОдмины мы
    Воткни в компьютер несколько сетевых карт
    Объедини в мост - получишь коммутатор (но вот только зачем?)
    Установи например Kerio Connect - получишь маршрутизатор
    Когда ты на смартфоне включаешь функцию "точки доступа" - ты фактически превращаешь его в маршрутизатор где сотовая сеть - WAN-интерфейс, а подключенные по WiFi устройства - внутреннюю локальную сеть
    Ответ написан
    Комментировать
  • Что такое постоянная коммутация для коммутации пакетов?

    hekkaaa
    @hekkaaa
    C#/.NET Developer
    Постоянная коммутация это комплекс мер - проще говоря это налаживание соединения из вне (админом) которое ограничивает твоем время связи с другим хостом (оно может установить время, объём, скорость трафика).
    Пример: Если вспомнишь раньше на почте были кабинки разговора меж город., где ты говорил какое-то четко отведенное время.

    Динамическая идет по инициативе одного пользователя с хоста А до другого хоста Б, в том объёме который нужен (о позволяет тех возможность) инициатору.
    Соединение тут происходит свободно с другими участниками сети, если на сеть не наложены иные ограничения (хост в другом vlan например).
    Пример: Обычная офисная сеть, ты решил подключиться по удаленке на комп коллеги.
    Ответ написан
    7 комментариев
  • За счет чего падает пропускная способность при коммутации пакетов?

    @mordo445
    Если говорить о цитате в начале вопроса, то пропускная способность сети голосового абонентского трафика с коммутацией пакетов выше чем сети с коммутацией каналов, при равной физической пропускной способности оборудования, образующего среду передачи потому, что молчание абонента не передается в канале, даже если он открыт, в сети с коммутацией пакетов. В момент молчания или снижения нагрузки на голосовой канал объем полезной нагрузки трафика абонента уменьшается и канал занят меньшим числом пакетов. В системе коммутацией каналов канал открыт - открыт всегда, занят всегда, даже если гоняет тишину
    Ответ написан
    Комментировать
  • За счет чего падает пропускная способность при коммутации пакетов?

    leahch
    @leahch
    3Д специалист. Долго, Дорого, Дерьмово.
    Простая аналогия: сеть железных дорог (коммвтация каналов) и сеть автомобильных дорог (коммутация пакетов). В общом случае из пункта А в пункт В легче добраться на автомобиле...
    Ответ написан
    Комментировать
  • Где должна размещаться обложка журнала?

    @shmaroder
    https://creditpower.ru
    Линия обрезки в типографии.

    4.3. ВЫЛЕТЫ
    4.3.1. Обращайте особое внимание на то, что элементы, иллюстрации, фоновые заливки, печатаемые "под обрез", должны иметь "вылет" от 3 мм за линию реза для листовой продукции и от 5 мм за линию реза для продукции многополосной. При этом элементы оформления, текстовые блоки, не идущие под обрез, должны отстоять от линии реза не менее чем на 3-5 мм.

    Чтобы избежать возможных ошибок, перед началом работы в программе верстки установите размер страницы соответствующий послеобрезному формату (при этом элементы с напуском будут размещаться с вылетом за пределы страницы).
    Ответ написан
    Комментировать