jQueryのソースでこのコードを見ました。私はJavaScriptの初心者で、これがどのように機能するか知りたいです。
if ( "getBoundingClientRect" in document.documentElement ) {
// do something...
}
とどう違うの?
if(document.documentElement.getBoundingClientRect) {
// do something...
}
...?
jQueryのソースでこのコードを見ました。私はJavaScriptの初心者で、これがどのように機能するか知りたいです。
if ( "getBoundingClientRect" in document.documentElement ) {
// do something...
}
とどう違うの?
if(document.documentElement.getBoundingClientRect) {
// do something...
}
...?
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 です)。
from MDN in 演算子は、指定されたプロパティが指定されたオブジェクトにある場合に true を返します。
構文:
prop in objectName
prop プロパティ名または配列インデックスを表す文字列または数値式。
objectName : オブジェクトの名前。
document.documentElement
オブジェクトも"getBoundingClientRect"
プロパティも同様です。
はif'a' in obj
とは異なります。obj.a
a == false
obj = {a: false};
'a' in obj;
> true
obj.a
> false
オペレーターはin
、特定のプロパティが指定されたオブジェクト内に存在するかどうかを確認します。それで、
if ( "getBoundingClientRect" in document.documentElement ) {
// do something...
}
getBoudingClientRect
プロパティがdocument.documentElement
オブジェクトで利用可能かどうかを確認します。
さらに、なぜそれが使用されるのかをよく説明している John Resig 自身の記事を読みたいと思うかもしれません。