window.location.indexOf не работает в Javascript

Ниже то, что у меня есть.

var myString = "http://localhost:8888/www.smart-kw.com/";
alert(myString.indexOf("localhost"));

Это дает мне предупреждение... однако, если я изменю var myString = "http://localhost:8888/www.smart-kw.com/"; на var myString = window.location;, это не сработает (я не получу предупреждение).

var myString = window.location;
alert(myString.indexOf("localhost"));

person Fahim Parkar    schedule 02.12.2012    source источник
comment
@MartijnPieters: Хорошо, я позабочусь об этом.   -  person Fahim Parkar    schedule 03.12.2012


Ответы (3)


window.location — это свойство доступа, и получение его значения дает вам объект, а не строка, поэтому у него нет функции indexOf. (Вполне понятно, что люди иногда думают, что это строка, поскольку, когда вы устанавливаете ее значение, установщик свойства доступа принимает строку, то есть window.location = "some url"; действительно работает. Но когда вы получаете это, вы не получите строку.)

Вы можете использовать window.location.toString(), String(window.location) или window.location.href, чтобы получить строку для него, если хотите, или использовать любой из различные свойства для уточнения деталей. По ссылке приведен пример URL http://www.example.com:80/search?q=devmo#test:

  • hash: часть URL-адреса, следующая за символом #, включая символ #. Вы можете прослушивать событие hashchange, чтобы получать уведомления об изменениях хеша в поддерживаемых браузерах.
    Пример: #test
  • host: имя хоста и номер порта.
    Пример: www.example.com:80
  • hostname: имя хоста (без номера порта).
    Пример: www.example.com
  • href: весь URL.
    Пример: http://www.example.com:80/search?q=devmo#test
  • pathname: путь (относительно хоста).
    Пример: /search
  • port: номер порта URL-адреса.
    Пример: 80
  • protocol: протокол URL.
    Пример: http:
  • search: часть URL-адреса, следующая за ? символ, включая ? символ.
    Пример: ?q=devmo

Например, для приведенного вами примера вы можете проверить window.location.hostname === "localhost".

person T.J. Crowder    schedule 02.12.2012

Насколько мне известно, window.location — это Location object.

Например, window.location.href даст вам полный URL-адрес.

var url = window.location.href;
alert(url.indexOf("domain"));

Но такая проверка обязательно вызовет ложные срабатывания. Вам лучше использовать свойство window.location.hostname, которое содержит имя хоста. часть.

var hostname = window.location.hostname;
alert(hostname === "my.domain.com");
person Alexander    schedule 02.12.2012

Я нашел способ сделать эту работу:

(window.location.href).indexOf("localhost") > -1)

Я на самом деле использую это для своих проектов в качестве условных выражений, и это работает просто отлично.

person Edward    schedule 03.03.2016