2

最近、CSSブラウザの機能検出に関するチュートリアルを読みました...最終製品は次のようなものでした...

var prefix = ['Moz', 'webkit', 'O', 'ms', 'Khtml'],
    test_style = document.createElement('div').style;

var css_check = function(prop) {
    if (prop in test_style) {
        return true;
    }
    for (var i = 0; i < prefix.length; i++) {
        if (prefix[i] + prop in test_style) {
            return true;
        }
    }
    return false;
};

css_check('whatev_css_property');

私が理解していない部分はこれです...

if (prop in test_style)またはif (foo in bar)

私が読んだものからif (foo in bar)、値が配列にあるかどうかをチェックするために使用されますが、ここでは間違っている可能性があります。これに関するドキュメントはあまり見つかりません。また、これを使用して配列の値をチェックする場合、配列はどのようになりtest_style = document.createElement('div').styleますか?意味がありません...

私はひどく混乱しています。どんな説明でも大歓迎です。

4

4 に答える 4

3

このステートメントは、オブジェクトに。という名前のプロパティがあるif (foo in bar)かどうかをテストします。値が。のプロパティはテストされません。bar foofoo

あれは:

var bar = {"a" : "x", "b" : "y"};
alert("a" in bar); // true
alert("x" in bar); // false

配列はオブジェクトの一種であるため、この構文を配列で使用できます。barが配列の場合、が値を持つ配列の数値インデックスである場合、またはが他のプロパティまたはメソッド名foo in barである場合はtrueになります。foofoo

また、これを使用して配列の値をチェックする場合、配列はどのようになりtest_style = document.createElement('div').styleますか?

test_styleはオブジェクトであり、配列ではありません。

于 2012-10-31T00:15:37.750 に答える
2

演算子は、配列またはオブジェクト内のキーinの存在を確認するために使用されます。

3 in [1, 2, 3] // false, since the array indices only go up to 2
2 in [1, 2, 3] // true
'x' in { x: 5 } // true
'toString' in Object.prototype // true

styleプロパティにはCSSStyleDeclarationのインスタンスがあり、アクティブなブラウザでサポートされている各スタイル属性のプロパティが含まれています。

投稿で指定したコードスニペットは、表示ブラウザがそのスタイルのバージョン(公式のもの、またはいくつかの一般的なベンダープレフィックスのいずれか)をサポートしているかどうかを確認します。

于 2012-10-31T00:15:51.127 に答える
1
 document.createElement('div').style

CSSプロパティを持つオブジェクトを返します。key inオブジェクトに特定のプロパティが存在するかどうかを確認するために使用できます。

于 2012-10-31T00:15:26.740 に答える
1

if (foo in bar)指定された値fooがオブジェクトのプロパティであるかどうかを確認するために使用されますbar。配列は特別に処理されたオブジェクトであるため、配列内の値をチェックするために使用できると想定するのは正しいことです。

test_style = document.createElement('div').styleプロパティを持つオブジェクトを返します。この場合なので、foo in bar構文を使用して確認できます。

于 2012-10-31T00:16:15.853 に答える