2

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

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

4 回答 4

4
  1. 将值设置l.nodeValuesifn===7n===8
  2. 如果s不为假,则检查!/^\??somestring\b/.test(s)并反转逻辑值(!),如果不 - 检查是否n不等于或具有不同的类型3
  3. 查看/\S/.test(l.nodeValue)
  4. 如果 2. 或 3. 为真,那么break

这里有帮助的是知道它if...else可以写成condition ? true : false,这===意味着变量不仅在其值上相等,而且在其类型上也相等

于 2013-04-01T08:56:47.360 回答
1
var s = (n === 7 || n === 8) && l.nodeValue;

如果n等于 7 或 8 设置sl.nodeValue.

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

如果s不为假:

  • 如果s匹配/^\??somestring\b/什么都不做。
  • 否则break

如果s为假:

  • 如果n等于 3l.nodeValue且不匹配/\S/则什么也不做。
  • 否则break
于 2013-04-01T09:01:59.347 回答
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;
}
于 2013-04-01T09:04:16.180 回答
0

(n === 7 || n === 8)如果 n 等于 7 或 8,则等于 true

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

将返回an 最右侧的任何值&&- 不仅仅是trueor false
然而,为了让它发挥作用,当然,一切都必须到位。

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

那是第 1 行。

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

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

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

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

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

于 2013-04-01T09:11:37.747 回答