過去の最短のIE判断は、IEが垂直タブをサポートしていないという機能によって行われました。
コードコピーは次のとおりです。
var ie =!+"/v1";
たった7バイトが必要です!この記事「32バイト、ehr ... 9、ehr ... 7 !!!ブラウザがIEであるかどうかを知るために」を参照してください。しかし、この記録は今年1月8日にロシア人によって破られました。今では6バイトしかかかりません! Arrayの処理でIEと標準のブラウザの違いを使用します。標準のブラウザの場合、配列の最後の文字がコンマの場合、JSエンジンは自動的に削除されます。
コードコピーは次のとおりです。
var ie =! - [1、];
このコードは、IE9の前の世界最短のIE判断コードと呼ばれていました。コードは短いですが、多くの基本的なJavaScriptの知識が含まれています。この例では、コードが実行されると、配列のtoString()メソッドが最初に呼び出されます。 ie6、7、8で[1、]。toString()を実行します。次に、式は! - 「1」になります。次に、「1」を数値タイプに変換してNANを取得し、ネガティブナンを服用してまだnanを取得します。最終的に実行!nanはtrueを返します。以下は、このステートメントを分解して、コードに関連するJavaScriptの知識を確認するためです。
1.ブラウザのアレイリテラル解析の違い
[1、]は、JavaScriptのアレイリテラルを使用して配列が定義されていることを意味します。 IE6、7、8には、配列には2つの要素があり、配列内の値は未定義です。標準のブラウザでは、最初の要素の後に定義されていないものが無視され、配列には1つの要素1のみが含まれます。
2。アレイのtoString()メソッド
配列オブジェクトのtoString()メソッドを呼び出すと、Arrayの各要素でtoString()メソッドが呼び出されます。要素の値がnullまたは未定義の場合、空の文字列が返され、各アイテムの値はコンマで区切られた文字列に綴られます」。
3.一方的なマイナス演算子
単位マイナス演算子を使用する場合、操作番号が数値タイプの場合、操作数を直接無効にします。それ以外の場合、最初に操作数を数値タイプに変換しようとします。変換プロセスは、数値関数の実行と同等であり、結果を負にします。
4。論理的な非操作
オペランドがNAN、null、または定義されていない場合は、論理的な非操作を実行する場合にtrueを返します。
JavaScriptは次のように書くことができます:
コードコピーは次のとおりです。
var ie =! - [1、];
アラート(つまり);
非IEの観点から判断した場合、私たちが互換性があるとき、ほとんどの場合、IEと非IEの開始構造があるため、少し節約できます。 var notie = - [1、];
コードコピーは次のとおりです。
if( - [1、]){
alert( "これはブラウザではありません!");
}それ以外{
alert( "これはIEブラウザ!");
}
上記の知識から、コードvar ie =! - [1、];実際にはvar ie =!( - number([1、]。toString()))に相当します。 IE6/7/8の値は真です。
IE6/7/8はバグ[1、]。toString()を無視しないため、つまり、あなたが得るものは「1」です。および-number([1、]。toString())は-number( "1、")です。結果はnanです。次に!すべての前提は、IE6/7/8にバグ[1、]。toString()=> "1"があるということです。一方、他のブラウザー(それらのほとんどは~~)です。
最近、友人がこれを使用してユーザーにブラウザをアップグレードするよう促すことがわかりました
<script>! - [1、] && alert( 'ブラウザのIE6-8バージョンを使用しています。Chrome、Firefox、IE9+を使用して/n/n!'); </script>