2

ループ内に配置されたこれらの 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

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;

sfalse でない場合:

  • s一致する場合/^\??somestring\b/は何もしません。
  • そうでなければbreak

sfalse の場合:

  • nが 3 に等しく、l.nodeValue一致しない場合は/\S/何もしません。
  • そうでなければbreak
于 2013-04-01T09:01:59.347 に答える
0

(n === 7 || n === 8)n が 7 または 8 の場合は true

l.nodeValuefalsey でない場合 ( 、、、、またはl.nodeValueでない場合) は、その値を返します。""undefinednullNaN0false

または&&だけでなく、 の右端にある値が返されます。 ただし、それが機能するためには、もちろん、すべてが整っている必要があります。truefalse

だからそれを仮定するl.nodeValue = "Bob";n = 7;s = (true) && "Bob";したがってs === "Bob";

それが1行目です。

行 #2 には 3 項代入があり、ifステートメントによってチェックされている値を返します (行 1 の最初のチェックでn === 7 || n === 8a を返すのと同じ方法です。true

最初の正規表現は、またはで/^\??somestring\b/始まり、単語境界 (スペース/改行/句読点/文字列の終わり) を持つ文字列を意味します。"?somestring""somestring"

l.nodeValueが に保存された場合、 「somestring...」または「?somestring...」に対してsの内容をテストします。s一致する場合は、false を返します。

sfalse の場合 (行 1 が失敗した場合)、3 に等しいかどうかを確認しnます。一致しない場合は true を返します。
選択した三項テストが失敗した場合は、l.nodeValueスペース/改行/タブ以外の文字があるかどうかを確認してください。あれば真を返す。

行番号 2 のテスト分岐のいずれかで が発生した場合はtrue、ループを中断します。

于 2013-04-01T09:11:37.747 に答える