var ie = !-[1,];
このコードは、IE9 以前は世界最短の IE 判定コードと呼ばれていました。 コードは短いですが、JavaScript の基本的な知識がたくさん含まれています。 この例ではコードが実行されると、まず配列 の toString() メソッドが呼び出され、[1 ,].toString() IE6,7,8では「1,」となります。すると式は!-“1,”となります。 「1」を数値型に変換して NaN を取得し、次に負の NaN を変換して値を NaN のまま取得してみます。最後に!NaNを実行してtrueを返します。 次のステートメントを分解して、コードに含まれる javascript の知識を確認してみましょう:
ブラウザ間の配列リテラル解析の違い
[1,] は、JavaScript の配列リテラルを使用して配列が定義されていることを意味します。 IE6、7、8では、配列には2つの要素があり、配列内の値はそれぞれ1と未定義です。標準のブラウザでは、最初の要素の後の未定義は無視され、配列には要素 1 が 1 つだけ含まれます。
配列の toString() メソッド
配列オブジェクトの toString() メソッドを呼び出すと、配列内の各要素に対して toString() メソッドが呼び出され、要素の値が NULL または未定義の場合は、空の文字列が返されます。 , を取得し、それぞれ取得した項目の値をカンマ「,」で区切った文字列とします。
単項マイナス演算子
単項マイナス演算子を使用する場合、オペランドが数値型の場合、オペランドは直接負になります。それ以外の場合は、最初に オペランド を変換しようとします。数値型への変換プロセスは、Number 関数を実行し、負の結果を取得することと同等です。
論理否定演算
論理 NOT 演算を実行するときにオペランドが NaN、NULL、または未定義の場合に true を返します。上記の知識により、実際には
var ie = ! と同等のコード var ie = !-[1,]; を導き出すことができます。 (-Number([1,].toString())); 値は IE678 では true です。分析に間違いがある場合、または異なる意見がある場合は、修正してください。