为什么javascript中的这两个代码彼此不同?这是第一个代码:
var string = "I am 21 years old. My number is 0799340540"
string += " and I am 19. My number is 0786432560";
var validate = /\d+/g;
var result;
while ((result = validate.exec(string)) != "null") {
document.write(result[0] + "<br>");
}
这是第二个代码
var string = "I am 21 years old. My number is 0799340540"
string += " and I am 19. My number is 0786432560";
var validate = /\d+/g;
var result = validate.exec(string);
// while (result != "null") {
// document.write(result[0] + "<br>");
//}
// the commented lines will create an infinite loop
答案 0 :(得分:0)
正如一些评论中所述,差异主要归结于这样的事实:在第一个代码片段中,正则表达式被连续评估,直到它到达字符串的末尾,在第二个代码片段中,它被评估一旦。这会导致你的例子是第一个将在while循环中执行代码4次,然后退出。而第二个将陷入无限循环。例如:
while((result = validate.exec(string)) != null){
document.write(result[0] + "<br>");
}
如果是循环,每次迭代都会执行validate.exec()
,每次从中断的地方搜索字符串,直到它最终完成搜索并返回null,此时while条件为false,因此它退出循环。
现在在这段代码中:
var result = validate.exec(string);
while(result != null){
document.write(result[0] + "<br>");
}
validate.exec()
仅在第一行中执行一次,并返回一个包含搜索信息的数组。它是不为空。因此,当你的while循环运行时,在循环的每次迭代中都会检查result != null
是否为result
,并且由于你在循环中没有更新result != null
的值,它将永远不会改变,所以{{1}将始终评估为true,从而永远不会退出循环。
<强>更新强>
正如所指出的,您还需要正确检查null,而不是与字符串值“null”进行比较,您需要与null
的原始值进行比较。更新了上面的代码段以反映这一点。