这两个陈述的含义是什么?

时间:2013-04-01 08:48:39

标签: javascript regex

我遇到了这两个放在for循环中的语句,我试图从中得出一些看法,但是徒劳无功。有人可以向我解释它们是如何工作的吗?

 var s = (n === 7 || n === 8) && l.nodeValue;
 if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;

4 个答案:

答案 0 :(得分:4)

  1. 如果l.nodeValues
  2. ,请设置n===7n===8的值
  3. 如果s不为假,则检查!/^\??somestring\b/.test(s)并反转逻辑值(!),否则 - 检查n是否不相等或类型是否不同3
  4. 检查/\S/.test(l.nodeValue)
  5. 如果2.或3.为真,则为break
  6. 有用的是要知道if...else可以写成condition ? true : false===表示变量不仅与其值相等,而且在其类型中也是如此

答案 1 :(得分:1)

var s = (n === 7 || n === 8) && l.nodeValue;

如果n等于7或8,则s设为l.nodeValue

if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;

如果s不是假的:

  • 如果s匹配/^\??somestring\b/则不执行任何操作。
  • 其他break

如果s为假:

  • 如果n等于3且l.nodeValue/\S/不匹配,则不执行任何操作。
  • 其他break

答案 2 :(得分:0)

代码类似下面,我没有测试

var s;

if ( n === 7 || n === 8 ){
        s = l.nodeValue;

} else {
        s = false;
}

var isBreakLoop ;

if ( s ){
    isBreakLoop = !/^\??somestring\b/.test(s);
} else {
    if ( n !== 3 ){
        isBreakLoop = true;
    }else {
        isBreakLoop = /\S/.test(l.nodeValue)
    }
}

if( isBreakLoop ) {
    break;
}

答案 3 :(得分:0)

如果n等于7或8

,则

(n === 7 || n === 8)等于true

l.nodeValue会返回其值,如果它不是假的(如果l.nodeValue不是""undefinednullNaN0false)。

&&最右侧的任何值都将被退回 - 不只是truefalse。 然而,当然,为了工作,一切都必须到位。

因此,假设l.nodeValue = "Bob";n = 7;s = (true) && "Bob";s === "Bob";

那是第1行。

第2行有一个三元赋值,它返回if语句检查的值(n === 7 || n === 8为第1行第一次检查返回true的方式相同。< / p>

第一个正则表达式/^\??somestring\b/表示一个以"?somestring""somestring"开头,然后有一个字边界(空格/换行符/标点符号/字符串结尾)的字符串。

如果l.nodeValue已保存到s,请针对“somestring ...”或“?somestring ...”测试s的内容。如果匹配,则返回false。

如果s为假(如果第1行失败),则检查n是否等于3。 如果不匹配则返回true 如果选择的三元测试失败,则检查l.nodeValue以查看是否存在任何不是空格/换行符/制表符的字符。如果有,则返回true。

如果第2行中的任何测试分支导致true,则打破循环。