Javascript 如何使用while循环解决未定义的属性?

Javascript 如何使用while循环解决未定义的属性?,javascript,Javascript,下面的脚本将替换真实图像对象的所有图像标记。不幸的是,我收到了一个uncaughttypeerror错误。这是因为在我的示例中,Javascript计数从0到3,而不是1到4。数组的长度为4 如何避免此错误(因此,在while循环之后,我还会获取控制台日志) 这个问题与1-4对0-3无关,它与你所做的有关 String#search将给定的内容解释为正则表达式。所以[image]表示“这些字符中的任何一个:i,m,a,g,或e”,因为[…]是正则表达式中的字符类。(稍后,您的String#rep

下面的脚本将替换真实图像对象的所有图像标记。不幸的是,我收到了一个
uncaughttypeerror
错误。这是因为在我的示例中,Javascript计数从0到3,而不是1到4。数组的长度为4

如何避免此错误(因此,在
while
循环之后,我还会获取控制台日志)


这个问题与1-4对0-3无关,它与你所做的有关

String#search
将给定的内容解释为正则表达式。所以
[image]
表示“这些字符中的任何一个:
i
m
a
g
,或
e
”,因为
[…]
是正则表达式中的字符类。(稍后,您的
String#replace
工作正常,因为如果您给
String#replace
一个字符串,它会按字面意思使用它。)因此,由于该字符串在四次替换后都有这些字符,因此您尝试运行第五次,这就是您遇到问题的时候。另外,
String#search
会分别返回找到字符串的索引,该索引将是一个数字(-1,如果没有找到),它将始终是
!==空

如果您只是将循环更改为:

while ( text_buffer.indexOf('[image]') !== -1 ) {
    replaceTag();
}
…您不会超出数组的末尾(只要文本和数组匹配,例如,文本中出现的
[match]
不会多于数组中的条目)

现场示例:

var原始内容={
“文本”:“测试图像1[图像]测试图像2[图像]测试图像3[图像]测试图像4[图像]”,
“媒体”:[
{
“src”:http://placehold.it/400x200",
“标题”:“这是一个标题”
},{
“src”:“images/gallery/sh0.png”,
“标题”:“这是一个标题”
},{
“src”:http://placehold.it/400x200",
“标题”:“这是一个标题”
},{
“src”:“images/gallery/sh0.png”,
“标题”:“这是一个标题”
}
]
};
//逐一查找img
var图像_计数器=0;
var text\u buffer=raw\u content.text;
var replaceTag=函数(){
text\u buffer=text\u buffer.replace(“[image]”),原始内容.media[image\u counter].src);
/*
日志(文本缓冲区);
控制台日志(图像计数器);
console.dir(原始内容.media[image\u counter]);
*/
图像_计数器++;
};
while(text_buffer.indexOf('[image]')!=-1){
replaceTag();
}
document.body.innerHTML=

'循环时生成的字符串='+文本缓冲区第一个while循环正在工作,另一个带有正则表达式的while循环不工作。还想知道另一个:)@Caspert:因为我们都很傻:
String#search
返回找到字符串的索引,而不是字符串或
null
:-)我已经修正了答案。如果具体的索引不重要,我认为最好使用
/\[image\]/.test(text\u buffer)
而不是
搜索
@Oriol:我可能会使用
索引
,在非正则表达式匹配中不需要涉及正则表达式引擎。但是是的,如果使用regex,我会使用
test
。谢谢你的解决方案。
while ( text_buffer.indexOf('[image]') !== -1 ) {
    replaceTag();
}