1

jQueryのソースでこのコードを見ました。私はJavaScriptの初心者で、これがどのように機能するか知りたいです。

if ( "getBoundingClientRect" in document.documentElement ) {
// do something...
}

とどう違うの?

if(document.documentElement.getBoundingClientRect) {
// do something...
}

...?

4

4 に答える 4

6

inこれはoperatorを使用した式です。オペレーターはin、ターゲット オブジェクトに指定された名前のプロパティがあるかどうかを確認します (直接、またはオブジェクトのプロトタイプを介して)。

それが行っているのはdocument.documentElement、名前のプロパティがあるかどうかを確認することですgetBoundingClientRect(これは、ブラウザが提供する場合に jQuery が使用したい便利な関数です)。

とどう違うの?if(document.documentElement.getBoundingClientRect) { // do something... }

inプロパティのを取得する必要はなく、存在することを確認するだけです。リストする 2 番目のフォームは、プロパティのの真偽をテストすることにも注意してください。そのような関数の場合はgetBoundingClientRect問題ありませんが、値が誤って返される可能性があるもの ( 、 など) をテストしたい場合は0""プロパティが存在しても失敗します。

機能検出を行うと、この種のことがよく見られます。たとえば、ブラウザが HTML5placeholder属性をサポートしているかどうかを知りたい場合:

if ('placeholder' in document.createElement('input')) {
    // Yes, it does
}

これはフォームを使用できない例if (document.createElement('input').placeholder)です。条件が false の場合、プロパティが存在しないために false なのか、プロパティは存在するが偽の値 (およびのデフォルト値placeholder""であり、実際には false です)。

機能検出のリストへの無料リンク。

于 2012-05-15T05:30:59.437 に答える
3

from MDN in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。

構文:

prop in objectName 

prop プロパティ名または配列インデックスを表す文字列または数値式。

objectName : オブジェクトの名前。

document.documentElementオブジェクトも"getBoundingClientRect"プロパティも同様です。

于 2012-05-15T05:33:35.700 に答える
2

はif'a' in objとは異なります。obj.aa == false

obj = {a: false};
'a' in obj;
> true
obj.a
> false
于 2012-05-15T05:37:09.587 に答える
1

オペレーターはin、特定のプロパティが指定されたオブジェクト内に存在するかどうかを確認します。それで、

if ( "getBoundingClientRect" in document.documentElement ) {
// do something...
}

getBoudingClientRectプロパティがdocument.documentElementオブジェクトで利用可能かどうかを確認します。

さらに、なぜそれが使用されるのかをよく説明している John Resig 自身の記事を読みたいと思うかもしれません。

于 2012-05-15T05:38:08.953 に答える