我想看看NewEgg产品ID的格式,所以我们从他们的主页上尝试运行以下脚本,将所有链接产品的ID吐出到控制台:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("Product.aspx")!=-1) {
var itemNo=document.links[i].href.split("Item=")[1];
console.log(itemNo);
}
}
(如您所见,产品链接中包含“Product.aspx”,后跟?Item=[itemid]
。简单split
以获取?Item=
之后的部分。这个脚本运行正常。但是,当我试图获得“发烧友”时,我开始收到itemNo
未定义的错误消息。这是我试过的脚本:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("Product.aspx")!=-1) {
var itemNo=document.links[i].href.split("Item=")[1];'
if (itemNo.charAt(0)=="N") {//look at only IDs that start with 'N'
console.log(itemNo);
}
}
}
这报告在第二个if
语句(上面第四行的内部if
)中未定义itemNo。评论if
声明(第4和第6行)使它再次正常工作。基本上,我可以记录它,但我不能if
它。在记录之前我还尝试了一些字符串操作来代替if
,但是在定义itemNo
的行之后,除了记录它之外我做不了多少。我尝试更改变量名称无效。
不可否认,这是来自Firebug控制台(也尝试过Firefox的原生Scratchpad),因此环境有点不同,但我认为没有理由为什么有时应该定义变量,但其他时候未定义。
答案 0 :(得分:2)
这实际上并不是Firebug的问题。如果您尝试以下操作:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("Product.aspx")!=-1) {
// Added log
console.log(document.links[i].href);
var itemNo=document.links[i].href.split("Item=")[1];
if (itemNo.charAt(0)=="N") {
console.log(itemNo);
}
}
}
您会注意到第一个链接不在查询字符串中有Item=
。因此,当您尝试拆分href时,您将返回undefined
,然后尝试运行charAt()
,这当然会引发TypeError。
基本上,您没有检查undefined
。一个简单的检查应该这样做:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("Product.aspx")!=-1) {
var itemNo=document.links[i].href.split("Item=")[1];
// Right here
if (itemNo && itemNo.charAt(0)=="N") {
console.log(itemNo);
}
}
}
答案 1 :(得分:1)
问题在于您的搜索条件。
正如您所看到的,某些链接具有“Product.aspx”但不是产品的链接,如下所示: “http://www.newegg.com/Store/NewProduct.aspx?Name=What%27s-New”
你应该更加具体,如:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("/Product.aspx?")!=-1) {
// Added log
console.log(document.links[i].href);
var itemNo=document.links[i].href.split("Item=")[1];
if (itemNo.charAt(0)=="N") {
console.log(itemNo);
}
}
}
答案 2 :(得分:0)
查看第一个脚本的第一个结果(工作正常)。这是未定义的。这就是你的第二个脚本出错的原因。
你应该重写它,检查itemNo是否未定义:
for (var i=0;i<document.links.length;i++) {
if (document.links[i].href.indexOf("Product.aspx")!=-1) {
var itemNo=document.links[i].href.split("Item=")[1];
if (itemNo!=undefined&&itemNo.charAt(0)=="N") {//look at only product ideas that start with N
console.log(itemNo);
}
}
}