我遇到了这两个放在for循环内的语句,我试图从它们中找出一些意义,但徒劳无功。有人可以向我解释他们是如何工作的吗?
var s = (n === 7 || n === 8) && l.nodeValue;
if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;
我遇到了这两个放在for循环内的语句,我试图从它们中找出一些意义,但徒劳无功。有人可以向我解释他们是如何工作的吗?
var s = (n === 7 || n === 8) && l.nodeValue;
if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;
l.nodeValue 为sifn===7或n===8s不为假,则检查!/^\??somestring\b/.test(s)并反转逻辑值(!),如果不 - 检查是否n不等于或具有不同的类型3/\S/.test(l.nodeValue)break这里有帮助的是知道它if...else可以写成condition ? true : false,这===意味着变量不仅在其值上相等,而且在其类型上也相等
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等于 3l.nodeValue且不匹配/\S/则什么也不做。break。类似下面的代码,我没有测试
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;
}
(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,则中断循环。