Javascript: настройка location.href в зависимости от местоположения
Когда бы вы установили location
на строку URL в сравнении с настройкой location.href
?
location = "http://www.stackru.com";
против
location.href = "http://www.stackru.com";
8 ответов
Вы могли бы установить location
непосредственно, потому что это немного короче. Если вы хотите быть кратким, вы можете опустить window.
тоже.
URL назначения для обоих location.href
а также location
определены для работы в JavaScript 1.0, обратно в Netscape 2, и с тех пор были реализованы в каждом браузере. Так что выбирайте и используйте то, что вы найдете наиболее ясным.
Даже если оба работают, я бы использовал последний.location
является объектом, и назначение строки объекту не сулит ничего хорошего для удобства чтения или обслуживания.
Вроде как уже было сказано, location
это объект. Но этот человек предложил использовать либо. Но вы будете лучше использовать .href
версия.
Объекты имеют свойства по умолчанию, которые, если ничего не указано, они предполагаются. В случае с location
объект, он имеет свойство под названием .href
, И, не указав ЛЮБОЕ свойство во время присваивания, он примет "href" по умолчанию.
Это все хорошо, пока не изменится более поздняя версия объектной модели и не будет больше свойства по умолчанию или свойства по умолчанию. Тогда ваша программа неожиданно обрывается.
Если ты имеешь ввиду href
, вы должны указать href
,
Пару лет назад, location
у меня не сработало в IE и location.href
сделал (и оба работали в других браузерах). С тех пор я всегда просто использовал location.href
и никогда не было проблем снова. Я не могу вспомнить, какая версия IE была.
Однако нужно помнить одно различие.
Допустим, вы хотите создать какой-то URL, используя текущий URL. Следующий код фактически перенаправит вас, потому что он не вызывает String.replace
но Location.replace
:
nextUrl = window.location.replace('/step1', '/step2');
Работают следующие коды:
// cast to string
nextUrl = (window.location+'').replace('/step1', '/step2');
// href property
nextUrl = window.location.href.replace('/step1', '/step2');
Просто чтобы уточнить, вы не можете сделать location.split('#')
, location
это объект, а не строка. Но вы можете сделать location.href.split('#');
так как location.href
это строка
С использованием TypeScript window.location.href
как window.location
технически объект, содержащий:
Properties
hash
host
hostname
href <--- you need this
pathname (relative to the host)
port
protocol
search
Настройка window.location
выдаст ошибку типа, аwindow.location.href
имеет строковый тип.
Использовать
global.location.href
вместо этого, работая с
React
.