为什么这个脚本返回''null'不是一个对象'?

时间:2014-09-26 23:39:48

标签: javascript

请您指出一下这个脚本返回'null' is not an object的原因的正确方向?

<script>
var pageDetailsSecond = "aaaaa";
if(pageDetailsSecond.match("&center=(.*)&zoom=").length) { 
    var mapSrc = pageDetailsSecond.match("&center=(.*)&zoom=");
    var mapSrc = mapSrc.split(",");
    var card_Latitude = mapSrc[0];
    var card_Longitude = mapSrc[1];
}
else {
    var card_Latitude = '';
    var card_Longitude = '';
}
</script>

感谢您的帮助。

4 个答案:

答案 0 :(得分:1)

如果没有匹配,

match将返回null,并且您无法编写null.length。实际上,Chrome报告 TypeError:无法读取null 的属性“length”。

这是一个解决方案,以及正则表达式修复:

var pageDetailsSecond = "aaaaa";
var mapSrc = pageDetailsSecond.match("&center=(.+?),(.+?)&zoom=");
if (mapSrc) { 
    var card_Latitude = mapSrc[1];
    var card_Longitude = mapSrc[2];
} else {
    card_Latitude = '';
    card_Longitude = '';
}

我修改了正则表达式,因此您之后不必split

答案 1 :(得分:1)

"aaaaa".match("&center=(.*)&zoom=")为空,因此,.length来电将失败。

尝试将代码更改为:

<script>
var pageDetailsSecond = "aaaaa";
var matches = pageDetailsSecond.match("&center=(.*)&zoom="); 
if(matches != null && matches.length > 1) { 
    var mapSrc = matches[matches.length - 1];
    var mapSrc = mapSrc.split(",");
    if(mapSrc.length == 2) {
        var card_Latitude = mapSrc[0];
        var card_Longitude = mapSrc[1];
    }
}
else {
    var card_Latitude = '';
    var card_Longitude = '';
}
</script>

答案 2 :(得分:1)

这里有两件事需要解决。

首先,您的条件语句假定.length属性,但.match()方法在找不到匹配项时返回null值(因此,没有.length属性)。有关.match()

的详细信息,请查看this MDN page

其次,在正则表达式中,您已将匹配的lat,lng(.*)进行了分组。这意味着.match()将返回一个包含2个匹配项的数组 - 第一个匹配整个表达式,第二个匹配您的组:

["&center=34,-83&zoom=", "34,-83"]

你对第二场比赛很感兴趣。这是一个有效的例子:

<script>
var pageDetailsSecond = "&center=34,-83&zoom=",
    matches = pageDetailsSecond.match("&center=(.*)&zoom=");

if(matches) {
    var mapSrc = matches[1].split(",");
    var card_Latitude = mapSrc[0];
    var card_Longitude = mapSrc[1];
}
else {
    var card_Latitude = '';
    var card_Longitude = '';
}
</script>

答案 3 :(得分:0)

您的pageDetailsSecond.match("&center=(.*)&zoom=")null,因此它没有length属性。因此,当您尝试检查length时会发生错误。

请改为尝试:

if(pageDetailsSecond.match("&center=(.*)&zoom=") !== null) {