酒吧里的食物';在';操作员javascript?

酒吧里的食物';在';操作员javascript?,javascript,arrays,Javascript,Arrays,我最近读了一篇关于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;

我最近读了一篇关于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');
var前缀=['Moz','webkit','O','ms','Khtml'],
test_style=document.createElement('div').style;
变量css_check=函数(prop){
if(测试_样式中的道具){
返回true;
}
对于(变量i=0;i
我不明白的是

if(测试样式中的道具)
if(条形图中的食物)

根据我所读的
if(foo in bar)
用于检查数组中是否有值,但我可能在这里错了,我没有找到太多关于这方面的文档。另外,如果这用于检查数组中的值,那么
test\u style=document.createElement('div').style
数组是什么?没有道理

我非常困惑。如有任何澄清,将不胜感激

 document.createElement('div').style
将返回具有CSS属性的对象。您可以使用
键输入
检查对象中是否存在特定属性。

语句if(foo in bar)
测试对象
bar
是否具有名为
foo
的属性。它不测试值为
foo
的属性

即:

var bar = {"a" : "x", "b" : "y"};
alert("a" in bar); // true
alert("x" in bar); // false
可以在数组上使用此语法,因为它们是对象的一种类型。如果
bar
是一个数组,那么如果
foo
是具有值的数组的数字索引,或者
foo
是其他属性或方法名称,则bar中的
foo将为真

另外,如果这用于检查数组中的值,那么
test\u style=document.createElement('div').style
数组是什么


test\u style
是一个对象,而不是数组。

中的
操作符用于检查数组或对象中是否存在键,例如

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
属性有一个实例,其中包含活动浏览器中每个受支持的样式属性的属性

您在帖子中提供的代码片段检查查看浏览器是否支持该样式的某些版本(官方版本或带有多个常见供应商前缀之一)。

如果(foo in bar)
用于检查名为
foo
的值是否为对象
bar
的属性。由于数组只是经过特殊处理的对象,因此您可以正确地假设它可以用于检查数组中的值


test\u style=document.createElement('div')。style
返回具有属性的对象;既然是这种情况,您可以使用
foo-in-bar
语法来检查它。

我不建议使用
foo-in-bar
来检查数组中是否存在值-您应该使用
indexOf
()。在您的例子中,
test\u style
是一个对象文本,在这种情况下,
foo-In-bar
用于检查键的存在是正确的。使用
foo-in-bar
检查数组中是否存在正在填充的索引(其中索引与对象的键相同)“假设可以使用它检查数组中的值是正确的。”-它不检查值,而是检查属性名称(或者,在数组中,特定索引是否有值)。将条形图中的
foo
与数组一起使用将不起作用。你是对的,它就像一个对象,但在数组中,它的“键”将是索引。因此,在条形码中使用
foo将检查是否存在索引。感谢您的澄清!我认为
hasOwnProperty
也适用于此。如果您只想检查索引是否存在,那么可以使用
If(“1”在array&&array.hasOwnProperty(“1”)中)
——如果要检查的对象是动态的,而不是硬编码为
“1”
。这样,它将忽略任何本机方法。对吗?只是wondering@ianpgall-如果您使用的是
.hasOwnProperty()
(我可能应该在我的回答中提到),那么您也不需要
in
操作符。哦,是的,这一点很好,保留它是愚蠢的。嗯,关于这些东西,数组/对象之间的区别以及如何访问它们等等,有很多可以讨论的内容。感谢这些示例。现在更有意义了。