酒吧里的食物';在';操作员javascript?
我最近读了一篇关于CSS浏览器功能检测的教程。。。最终产品是这样的酒吧里的食物';在';操作员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;
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
操作符。哦,是的,这一点很好,保留它是愚蠢的。嗯,关于这些东西,数组/对象之间的区别以及如何访问它们等等,有很多可以讨论的内容。感谢这些示例。现在更有意义了。