在in运算符中使用if语句

时间:2011-07-27 15:06:02

标签: javascript client-side

var srcType = source.slice(source.lastIndexOf('.'));
//srcType = fileExtension
var imageFormats = ['.jpg','.png','.gif'],
videoFormats = ['.ogv','.png','.gif'];
// two lists, acceptable video/image types
var htmlSting = ''; / /initialize the htmlstring

if (srcType in imageFormats) //heres where my question is!!!
    htmlString = '<img class="empty" id="it" src="'+source+'"> </img>';
else
    htmlString = '<video class="empty" id="it" src="'+source+'" controls> </img>';
// these statements choose the proper media type.

好的,所以继承人:我正在编写需要根据文件类型选择html的内容。 有没有办法实现(imageFormats中的srcType)?这不起作用。我需要一个for循环吗?我总是可以在html中使用或者,但是当我们添加格式时,这将是详尽无遗的。 我不喜欢for循环的原因是它在时间关键区域使用宝贵的时间。

2 个答案:

答案 0 :(得分:1)

'in'操作仅适用于对象的属性,而不适用于数组的值。我想你想要indexOf(srcType),如果找不到则返回-1,如果找到则返回索引。

imageFormats.indexOf('.jpg'); // => 0
imageFormats.indexOf('.foo'); // => -1

if(imageFormats.indexOf(srcType)){ }

var obj = {a: 1};
if('a' in obj){ } // evaluates to true
if('b' in obj){ } // evaluates to false

答案 1 :(得分:0)

您可以在Array对象上使用indexOf。有关javascript库中可用选项的详细信息,请参阅this question

indexOf可从JavaScript 1.6(ECMAScript第5版)获得,并且链接的MDC页面中的旧浏览器有后备。

  

我不喜欢for循环的原因是它在a中使用了宝贵的时间   时间紧迫的区域。

您必须提供更多详细信息。一个简单的循环不会花费太多时间,而你拥有的只是数组中的三个元素。即使有可能成为50或100,for循环也不应该是一个大问题。

另外,如果你可以表达你正在做的事情(以及何时),你可能会得到更好的答案。