我遇到了这两个放在for
循环中的语句,我试图从中得出一些看法,但是徒劳无功。有人可以向我解释它们是如何工作的吗?
var s = (n === 7 || n === 8) && l.nodeValue;
if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;
答案 0 :(得分:4)
l.nodeValue
或s
n===7
至n===8
的值
s
不为假,则检查!/^\??somestring\b/.test(s)
并反转逻辑值(!
),否则 - 检查n
是否不相等或类型是否不同3
/\S/.test(l.nodeValue)
break
有用的是要知道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 || n === 8)
等于true
l.nodeValue
会返回其值,如果它不是假的(如果l.nodeValue
不是""
,undefined
,null
,NaN
,0
或false
)。
&&
最右侧的任何值都将被退回 - 不只是true
或false
。
然而,当然,为了工作,一切都必须到位。
因此,假设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
,则打破循环。