我遇到了这两个放在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
为s
ifn===7
或n===8
s
不为假,则检查!/^\??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
或)。""
undefined
null
NaN
0
false
将返回an 最右侧的任何值&&
- 不仅仅是true
or false
。
然而,为了让它发挥作用,当然,一切都必须到位。
所以假设l.nodeValue = "Bob";
和n = 7;
, s = (true) && "Bob";
, 因此s === "Bob";
那是第 1 行。
第 2 行有一个三元赋值,它返回语句检查的值(与第 1 行的第一次检查返回的if
方法相同。n === 7 || n === 8
true
第一个正则表达式表示一个字符串,该字符串以或/^\??somestring\b/
开头,然后具有单词边界(空格/换行符/标点符号/字符串结尾)。"?somestring"
"somestring"
如果l.nodeValue
保存到s
,则s
针对“somestring...”或“?somestring...”测试内容。如果匹配,则返回 false。
如果s
为假(如果第 1 行失败),则检查是否n
等于 3。如果不匹配则返回真。
如果选择的三元测试失败,则检查l.nodeValue
是否有任何不是空格/换行符/制表符的字符。如果有则返回真。
如果第 2 行中的任何测试分支导致true
,则中断循环。