2017-01-25 6 views
0

私はこれをGoogleで検索し、JavaScriptの文書による検索が、私は、この演算子の一切の言及を見つけることができませんしました:私は自分自身で作業をしようとすると、私は次のコードにそれを実行したときにa |ǀ| b||| JavaScriptの意味ですか?

私はエラーを取得するが、完全に罰金実行:

var a, b = 0; tex = '\u0076\u0061r' 
 
var players, score = 0, x, y, z = 1; 
 
function f(s) { 
 
\t var t = 0, r = 0; 
 
    var js = 'window'; 
 
    while (t == r) { 
 
    \t if (t == 1) { 
 
     \t r = s.length; 
 
      return false; 
 
     } else { 
 
     \t t += 1; 
 
     } for (var i = 0; i < 20; i++) { 
 
     \t r = 20;i+=9000;eval(s); x = 50; y =+ 8; 
 
      z = -20; y = s; 
 
     } 
 
     if (r < 20) { 
 
     \t return t + 2; 
 
     }} 
 
\t  return true; 
 
\t } while (f(tex + ' \u01C0='+'0') && score < 900) { 
 
\t score = 9000.0001;}eval(y); a = 1; b += a; 
 
\t x = 50;{y =+ 8; 
 
} 
 

 
// testing: 
 
document.writeln(false |ǀ| false); // 0 
 
document.writeln(false |ǀ| true); // 1 
 
document.writeln(true |ǀ| false); // 1 
 
document.writeln(true |ǀ| true); // 1

とbの値を変更すると、それが||ように動作しますが、それは前のコードで動作しますなぜ私はちょうどうまくいかないことができますが、ないことをお勧めその上で働く自分の。誰でもここで何が起こっているのか知っていますか?

+0

正直なところ、不気味な謎の行動についての質問は本当に時間の無駄です。ここには実用的価値は全くありません。それはパーラートリックです。 – Pointy

+2

@Pointy私はこの特定のものを面白いと思っています:-) – zerkms

答えて

5

これはオペレータではありません。 |の演算子で、2度、 "Latin Dental Click 'という文字が間にあります。その文字はJavaScript識別子で有効です。このように表現:ǀと呼ばれる本当の変数がありませんので

false |ǀ| false 

は(おそらく)

false | undefined | false 

と同じことを意味します。 (編集 —実際、おそらくそうしないと、参照エラーを取得したい、があります。)

|(ビット単位-OR)演算子は数値としてのオペランドを扱い、falseundefinedの両方が0なります。

その機能f()は、ǀという名前のwindowプロパティを定義しています。

+0

参照例外ではなく「未定義」に変わる理由は明白ではありません。 – zerkms

+0

@zerkmsなぜそれが本当かわかりません。おそらく実際にはOPの実際のコードのどこかに*定義されています。 – Pointy

+0

コードが動作し、定義されていません。だからそれ以外の何か:-) – zerkms

関連する問題