0

这是来自 Eloquent Javascript 的第 6 章:

代码:

 function splitParagraph(text) {
     var fragments = []; 
     while( text != "" )                         // ?
         if (text.charAt(0) == "*") {
               fragments.push({type: "emphasized"});

 etc...

我无法理解 while 循环在做什么。文本是一个字符串。while 循环是否读取“while 文本没有剩余任何字符..” while 循环是否一个接一个地查看字符串中的每个字符以确保还有另一个字符?

4

4 回答 4

4

while内部条件为真时,循环继续运行。在这种情况下,text != ""如果所讨论的字符串不是空字符串,则为 true。

在这种特殊情况下,我想必须在循环内的某个地方进行更改,否则在这里使用构造text是没有意义的。while

注意:实际上,在 JavaScript 中,!=and==运算符会以一种非常奇怪的方式求值:例如, 0[]和将被认为是相等的:""

  • "" != []-> 假的
  • 0 != []-> 假的
  • 0 != ""-> 假的

===并可!==用于强制执行严格相等。

于 2013-04-20T17:17:29.220 回答
1

它检查文本是否不是空字符串(长度为 0 且不包含字符)。

于 2013-04-20T17:17:37.570 回答
1
"Is the while loop looking at every character in the string 
one by one making sure there is another character left?"

是的,尽管没有显示整个循环,但这几乎可以肯定是正在做的事情。

while 条件检查text字符串是否为空。如果不为空,则循环遍历循环体。检查字符串的text.charAt(0)第一个字符。如果找到“*”字符,则将一个元素添加到fragments数组中。

在正文中将有代码删除字符串的第一个字符,text然后循环处理字符串的下一个字符。

while( text != "" )                        
         if (text.charAt(0) == "*") {
               fragments.push({type: "emphasized"});
于 2013-04-20T17:27:07.537 回答
0

文本!=“”是什么意思?

这意味着如果 的值text不能被强制匹配""

考虑这段代码

if ("abc" != "") {
    console.log("1 ok");
}

if ([] != "") {
    console.log("2 ok");
}

if (0 != "") {
    console.log("3 ok");
}

if (false != "") {
    console.log("4 ok");
}

jsfiddle上

天哪,案例 2、3 和 4 发生了什么?

于 2013-04-20T17:22:27.553 回答