new URL(`http://12345678901`)
недействителен, а new URL(`http://1234567890`)
и new URL(`http://a12345678901`)
допустимы.
эти работы:
console.info(new URL(`http://1234567890`))
console.info(new URL(`http://a12345678901`))
Это не делает:
console.info(new URL(`http://12345678901`))
Вот ошибка в хроме:
VM2064:1 Uncaught TypeError: не удалось создать URL-адрес: неверный URL-адрес: 1:1 (анонимно) @ VM2064:1
Fire Fox:
Неперехваченная ошибка типа: конструктор URL: http://12345678901 не является допустимым URL-адресом. Код оценки отладчика: 1 Оценочный код отладчика: 1:1 Код оценки отладчика: 1
Я ожидаю, что URL-адрес будет работать. Я пробовал читать https://url.spec.whatwg.org/#concept-basic-url-parser но это очень запутанно, и я в этом не особо разбираюсь. Эти ошибки не похожи на обычные ошибки js, так что, я думаю, это ошибки?
@Nickistired, спасибо за это понимание. Я думаю, следующий вопрос: ожидается ли такое поведение? Очевидно, что ошибка невелика, но является ли она частью спецификации URL?
Вот этого я не знаю, поэтому и разместил комментарий, а не ответ, просто наблюдение :-)
Я попробовал это: console.info(new URL(http://12345678901234567890:5000))
и всё заработало без проблем. Также я попробовал два других варианта, все работает так же, без каких-либо проблем.
Это странно. Вот скриншот ошибки в Chrome: imgur.com/a/jxTPhbN. Если не секрет, какую систему вы используете?
Я использую macOS, но теперь, когда я читаю об этом, я увидел, что ошибка может быть связана с именем домена.
Можно ли превратить ваш ответ в комментарий, если вы передумали? Кроме того, я только что тестировал Safari и там тоже получаю странную ошибку. Я думаю, что на самом деле вам не хватает кавычек в URL-адресе вашего теста.
Это не ошибка, это спецификация. Если часть URL-адреса «имя хоста» представляет собой число, это должен быть действительный адрес IPv4, то есть 32-битное число. Разделение байтов точками (так обычно пишутся адреса IPv4) в URL-адресах не является обязательным.
Следовательно:new URL("http://4294967296/")
бросает из-за Invalid URL
.new URL("http://4294967295/")
работает и аналогичен new URL("http://255.255.255.255/")
.
Путь через спецификацию:
https://url.spec.whatwg.org/#hostname-state (шаг 3.3)
→ https://url.spec.whatwg.org/#concept-host-parser (шаг 8)
→ https://url.spec.whatwg.org/#concept-ipv4-parser (шаг 8)
Спасибо! По-прежнему странное сообщение об ошибке в моем Chrome («at :1:1 (anonymous) @ VM2064:1»), но, по крайней мере, оно есть в спецификации.
неважно, на самом деле это обычная ошибка.
1234567890
=>0x499602D2
=>0x49
,0x96
,0x02
,0xD2
=>73
,150
,2
,210
=>73.150.2.210
. Между тем12345678901
невозможно выразить в 4 байтах.