Загадка по js

Есть у нас обертка над XMLHttpRequest

function xhr(method, url, async, user, password) {

let r = new XMLHttpRequest();

r.open(method, url, async, user, password);

r.timeout = 10;

}


Отгадайте что может пойти не так?

Web-технологии

551 пост5.8K подписчиков

Правила сообщества

1. Не оскорблять других пользователей

2. Не пытаться продвигать свои услуги под видом тематических постов

3. Не заниматься рекламой

4. Никакой табличной верстки

5. Тег сообщества(не обязателен) pikaweb

Вы смотрите срез комментариев. Показать все
Автор поста оценил этот комментарий

Извиняюсь, что не всем оказался понятен смысл проблемы.


Попробую объяснить более подробно.


Открываем документацию к XMLHttpRequest (https://developer.mozilla.org/ru/docs/Web/API/XMLHttpRequest)


Где указано, что 3й параметр необязателен и по умолчанию равный true.


Вспоминаем, что если не передавать параметр в метод, то принимается undefined


т.е если верить данной документации, то вызовы

- open(method, url)

- open(method, url, undefined)

- open(method, url, true)

эквивалентны


В реальности оказывается, что есть два разных метода, вызываемых в зависимости от кол-ва передаваемых параметров. Причем дефолтное значение async в этих методах различное. Что несколько не очевидно.

раскрыть ветку (4)
2
Автор поста оценил этот комментарий

А вот и нифига=)

Открываем твою же документацию, самую что ни на есть официальную: https://xhr.spec.whatwg.org/#xmlhttprequest

И читаем там волшебную строчку под номером 7 (параграф 4.5.1. The open() method):

If the async argument is omitted, set async to true, and set username and password to null.

Потом смотрим на твой вызов open(method, url, undefined), и что мы видим?
Правильно: 3 аргумента.

Все переданные аргументы хранятся в специальном объекте arguments.

И в случае вызова open(method, url, undefined) arguments будет иметь вид:

{0: <method>, 1: <url>, 2: undefined}

но аргументов, тем не менее три, и это значит, что

аргумент async не опущен, и этот undefined преобразовывается в Boolean со значением false, что ожидаемо приводит к синхронному вызову.

ещё комментарии
Вы смотрите срез комментариев. Чтобы написать комментарий, перейдите к общему списку

Темы

Политика

Теги

Популярные авторы

Сообщества

18+

Теги

Популярные авторы

Сообщества

Игры

Теги

Популярные авторы

Сообщества

Юмор

Теги

Популярные авторы

Сообщества

Отношения

Теги

Популярные авторы

Сообщества

Здоровье

Теги

Популярные авторы

Сообщества

Путешествия

Теги

Популярные авторы

Сообщества

Спорт

Теги

Популярные авторы

Сообщества

Хобби

Теги

Популярные авторы

Сообщества

Сервис

Теги

Популярные авторы

Сообщества

Природа

Теги

Популярные авторы

Сообщества

Бизнес

Теги

Популярные авторы

Сообщества

Транспорт

Теги

Популярные авторы

Сообщества

Общение

Теги

Популярные авторы

Сообщества

Юриспруденция

Теги

Популярные авторы

Сообщества

Наука

Теги

Популярные авторы

Сообщества

IT

Теги

Популярные авторы

Сообщества

Животные

Теги

Популярные авторы

Сообщества

Кино и сериалы

Теги

Популярные авторы

Сообщества

Экономика

Теги

Популярные авторы

Сообщества

Кулинария

Теги

Популярные авторы

Сообщества

История

Теги

Популярные авторы

Сообщества

Недвижимость и ремонт

Теги

Популярные авторы

Сообщества