【问题标题】:What does text != "" mean?文本!=“”是什么意思?
【发布时间】:2013-04-13 22:26:13
【问题描述】:

这是来自 Eloquent Javascript 的第 6 章:

代码:

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

 etc...

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

【问题讨论】:

  • 如果直接复制的话就谈不上雄辩了(是这样,还是省略了什么?)。它渴望成为一个无限循环和堆栈溢出。

标签: javascript string while-loop


【解决方案1】:

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

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

注意:实际上,在 JavaScript 中,!=== 运算符将以一种非常奇怪的方式进行计算:例如,0、[]"" 都将是认为相等:

  • "" != [] -> 错误
  • 0 != [] -> 错误
  • 0 != "" -> 错误

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

【讨论】:

  • !== 和 === 也更快。
  • 很好的建议。我应该总是使用!===== 而不是!===
  • 嗯,非严格运算符也有其用处。例如,2 == '2'2 !== '2'
【解决方案2】:

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

【讨论】:

  • 在这种特殊情况下,只要text 的长度不为 0(空),while 循环就会迭代。然后它将检查文本的第一个字符是否为“*”?
【解决方案3】:

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

这意味着如果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 发生了什么?

【讨论】:

    【解决方案4】:
    "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"});
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-02-23
      相关资源
      最近更新 更多