Чи повинні вони обоє посилатися на один і той же об’єкт?
Чи повинні вони обоє посилатися на один і той же об’єкт?
Відповіді:
За даними W3C, вони однакові. Насправді для безпеки між веб-переглядачами слід скористатися, window.locationа не використовувати document.location.
Дивіться: http://www.w3.org/TR/html/browsers.html#dom-location
window.location), не надаючи жодних обґрунтувань. Якщо ви не надасте обґрунтування, навіщо хтось приймати вашу пораду? Відповідь Крістофа в цьому плані набагато корисніша.
Канонічним способом отримання поточного об’єкта розташування є window.location(див. Цю сторінку MSDN з 1996 р. Та проект W3C з 2006 р.).
Порівняйте це з тим document.location, що спочатку повертався лише поточний URL у вигляді рядка (див. Цю сторінку на MSDN ). Ймовірно, щоб уникнути плутанини, document.locationйого замінили document.URL(див. Тут на MSDN ), який також є частиною рівня DOM 1 .
Наскільки я знаю, всі сучасні браузери на карту document.locationдо window.location, але я все одно вважаю за краще , window.locationяк це те , що я використовував , так як я написав свій перший DHTML.
window.location, чи не однаково справедливо просто користуватися location?
window. Таким чином, будь-яка змінна або функція, яку ви визначаєте на верхньому рівні вашого сценарію, є властивістю об'єкта, на який посилається, і window, як буває, є глобальним об'єктом. Глобальний об’єкт мається на увазі, коли він відсутній, як window.- отже location, інтерпретується як такий window.location. Caveats - fe if(an_undefined_variable)видасть помилку, якщо змінна не була визначена - if(window.an_undefined_variable)не буде.
window.location читається / записується у всіх сумісних браузерах.
розташування document.location доступне лише для читання в Internet Explorer (принаймні), але читання / запис у веб-переглядачах Gecko (Firefox, SeaMonkey).
document.locationдоступну лише для читання в IE. Я можу його успішно призначити в IE 10, 9, 8 і 6 (використовуючи VM від modern.ie ).
console.log(location);? !!
document.locationспочатку було властивістю лише для читання, хоча браузери Gecko дозволяють також призначати його. Для безпеки крос-браузера використовуйте window.locationзамість цього.
Детальніше:
Цікаво, що якщо у вас є кадр, зображення або форма з назвою "розташування", то "document.location" надає посилання на вікно кадру, зображення або форму відповідно замість об'єкта Location. Мабуть, це тому, що пошук колекції document.forms, document.images та window.frames набирає пріоритет перед відображенням до window.location.
<img name='location' src='location.png'>
if (document.location.tagName == 'IMG') alert('Hello!')
window.locationі document.locationне може бути затіненими в Chrome або Firefox.
Наскільки я знаю, обидва однакові. Для безпеки між веб-переглядачами ви можете window.locationскоріше використовувати document.location.
Всі сучасні браузери на карту document.locationдо window.location, але я до сих пір вважаю за кращеwindow.location , як це те , що я використовував , так як я написав свою першу веб - сторінку. це більш послідовно.
Ви також можете бачити document.location === window.locationприбутки true, що пояснює, що обидва однакові.
document.location === window.location повертає true
також
document.location.constructor === window.location.constructor є true
Примітка. Щойно перевірена на, Firefox 3.6, Opera 10 та IE6
===і ==рівнозначні.
"abc" == new String("abc")повертається trueпід час "abc" === new String("abc")повернення false.
==і ===вони є рівнозначними. Дивіться розділи специфікації 11.9.3 та 11.9.6. Для ненульових, недефінованих, нечислових, небулових, не рядкових значень одного типу, ==поведінка регулюється 11.9.3 частина 1f, а ===поведінка - 11.9.6 частина 7, яка ідентично читає повернення, trueякщо x і y посилаються на один і той же об'єкт. В іншому випадку поверніться false.
document.locationі window.locationвказують на об’єкти. Вам не вистачає цілої точки потрійних рівних; використання 2 рівних не доводить, що вони однакові. Ми повинні використовувати 3 рівні, а не 2 рівні, тому що 2 рівні дадуть нам помилковий позитив. У веб-переглядачі, за яким document.location - це рядок URL-адреси window.location.toString(), Тоді document.location==window.locationповернеться true, тоді як document.location===window.locationповернеться false.
document.location === window.locationпорівняння. Те, що .constructorпорівняння закинуто занадто означає, я вважаю, що ця відповідь все ще звучить, але використання ===спростить міркування.
Так, вони однакові. Це одна з багатьох історичних химерностей API JS браузера. Спробуйте зробити:
window.location === document.location
Зараз різко можна побачити різницю, оскільки html 5 вже не підтримує набори фреймів. Але тоді, коли ми маємо набір фреймів, document.location переспрямовує лише кадр, в якому виконується код, а window.location переспрямовує всю сторінку.
Я б сказав, що window.locationце більш надійний спосіб отримати поточну URL-адресу . Далі йде різниця між window.locationіdocument.url що вийшло напроти одного із сценаріїв, де я додавав хеш-параметри в URL-адресу та читав її пізніше.
Після додавання хеш-параметрів у URL.
У старшому браузері я не зміг отримати хеш-параметри з URL-адреси за допомогою document.url, але коли я використовувавwindow.location мені вдалося отримати хеш-параметри з URL-адреси.
Тому завжди краще використовувати window.location.
document.URL- мова йшла про window.locationі document.location. Також document.urlне існує = це повинно бути великим регістром.
document.location.constructor === window.location.constructor є true .
Це тому, що це точно той самий об’єкт, який ви можете бачити з document.location===window.location .
Тому немає потреби порівнювати конструктор чи будь-яку іншу властивість.
Ну так, вони однакові, але ....!
window.location не працює в деяких браузерах Internet Explorer.
Незважаючи на більшість людей, які рекомендують тут, саме так виглядав динамічний протокол Google Analytics на віки (до того, як вони нещодавно перейшли з ga.js на analytics.js):
ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
Більше інформації: https://developers.google.com/analytics/devguides/collection/gajs/
У новій версії вони використовували "//", щоб браузер міг автоматично додавати протокол:
'//www.google-analytics.com/analytics.js'
Так що, якщо Google вважає за краще document.location щоб , window.locationколи вони потребують в протоколі в JS, я припускаю , що у них є якісь - то причини для цього.
НАВЧАЛЬНО : Я особисто вважаю, що це document.locationі window.locationте саме, але якщо гігант з найбільшою статистикою щодо використання браузерів, таких як Google, використовуючи document.location , рекомендую дотримуватися їх.