变量不起作用

时间:2018-02-23 18:50:15

标签: javascript variables

为什么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

1 个答案:

答案 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的原始值进行比较。更新了上面的代码段以反映这一点。