Javascript表达式:对象数组;

Javascript expression: object array;

我正在使用 ng-flow 示例进行基本图像上传。我看到一个表达式,我不明白它是如何工作的。

基本上,这是表达式:

<p>Demo object array expression in Javascript:</p>
<p id="demo"></p>

<script>
  var expr = !!{png:1,gif:1,jpg:1,jpeg:1}['pdf', 'gif', 'jpg'];
  document.getElementById("demo").innerHTML = expr ;
</script>

似乎上面的意思是 return 如果数组的最后一个元素中有有效图像则为真。我不知道为什么,但是在我研究了代码之后,这是我的结论。

如果有人可以帮助我理解上述内容并给我 link 文档,我将不胜感激。我到处搜索但没有找到任何参考。

Click here to see the html which has this expression from ng-flow

我认为代码的目的是禁止上传不是图像的文件。

任何人都可以推荐更简单的替代方案,请告诉我。

塔雷克

该语句中实际上发生了很多事情,但主要只是布尔逻辑。

先看语句['pdf', 'gif', 'jpg']。这包含 javascript , 运算符,它将其包含的语句的 return 值设置为最后一个逗号后的值。

例如

var a = 1, 2, 'foo'; // a -> 'foo'

var foo = ['a', 'b', 'c'];
foo[0, 2, 1]; // foo[0, 2, 1] -> foo[1] -> 'b' 

在这种情况下,它解析为 ['jpg']

这里有一些相关的文档:

Javascript comma operator

您可能已经猜到了,! return 是一个布尔表达式,它将 truthytrue 语句的值反转为 false falseyfalse 声明 true

{png:1,gif:1,jpg:1,jpeg:1}['jpg'];1,这是一个 truthy 值。 !1 变为 false。最后 !false 就是 true;

在此处查看更多内容:

Truthy

Falsy

Logical operators