Чи повинні вони обоє посилатися на один і той же об’єкт?
Чи повинні вони обоє посилатися на один і той же об’єкт?
Відповіді:
За даними 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 , рекомендую дотримуватися їх.