JavaScript中window.location.indexOf不起作用

11

以下是我所拥有的。

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"));

@MartijnPieters:好的,我会处理的。 - Fahim Parkar
3个回答

33

window.location是访问器属性,获取它的值会给你一个对象而不是字符串,所以它没有indexOf函数。(人们有时会认为它是一个字符串,这是可以理解的,因为当你设置它的值时,访问器属性的setter接受一个字符串;也就是说,window.location = "some url";实际上是有效的。但是当你获取它时,你得到的不是一个字符串。)

如果你愿意,你可以使用window.location.toString()String(window.location)window.location.href来获取它的字符串,或者使用其各种属性来检查细节。从链接中给出的示例URLhttp://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"

3
据我所知,window.location 是一个Location 对象
例如,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");

2
我找到了一种使这个工作的方法:
(window.location.href).indexOf("localhost") > -1)

我实际上在我的项目中使用这个作为条件语句,它运行良好。


很奇怪,我的代码在window.location.href周围没有加括号时无法正常工作,但是添加后就可以了!奇怪。 - sMyles

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接