ループ内に配置されたこれらの 2 つのステートメントに出くわしfor
ました。それらから何らかの意味を理解しようとしましたが、無駄でした。誰かが私にそれらがどのように機能するか説明してもらえますか?
var s = (n === 7 || n === 8) && l.nodeValue;
if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;
ループ内に配置されたこれらの 2 つのステートメントに出くわしfor
ました。それらから何らかの意味を理解しようとしましたが、無駄でした。誰かが私にそれらがどのように機能するか説明してもらえますか?
var s = (n === 7 || n === 8) && l.nodeValue;
if (s ? !/^\??somestring\b/.test(s) : n !== 3 || /\S/.test(l.nodeValue)) break;
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
false でない場合:
s
一致する場合/^\??somestring\b/
は何もしません。break
。s
false の場合:
n
が 3 に等しく、l.nodeValue
一致しない場合は/\S/
何もしません。break
。(n === 7 || n === 8)
n が 7 または 8 の場合は true
l.nodeValue
falsey でない場合 ( 、、、、またはl.nodeValue
でない場合) は、その値を返します。""
undefined
null
NaN
0
false
または&&
だけでなく、 の右端にある値が返されます。
ただし、それが機能するためには、もちろん、すべてが整っている必要があります。true
false
だからそれを仮定するl.nodeValue = "Bob";
とn = 7;
、s = (true) && "Bob";
したがってs === "Bob";
それが1行目です。
行 #2 には 3 項代入があり、if
ステートメントによってチェックされている値を返します (行 1 の最初のチェックでn === 7 || n === 8
a を返すのと同じ方法です。true
最初の正規表現は、またはで/^\??somestring\b/
始まり、単語境界 (スペース/改行/句読点/文字列の終わり) を持つ文字列を意味します。"?somestring"
"somestring"
l.nodeValue
が に保存された場合、 「somestring...」または「?somestring...」に対してs
の内容をテストします。s
一致する場合は、false を返します。
s
false の場合 (行 1 が失敗した場合)、3 に等しいかどうかを確認しn
ます。一致しない場合は true を返します。
選択した三項テストが失敗した場合は、l.nodeValue
スペース/改行/タブ以外の文字があるかどうかを確認してください。あれば真を返す。
行番号 2 のテスト分岐のいずれかで が発生した場合はtrue
、ループを中断します。