1

我正在使用 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>

如果数组在最后一个元素中具有有效图像,则上述方法似乎返回 true。我不知道为什么,但是在我研究了代码之后,这是我的结论。

感谢有人可以帮助我理解上述内容并给我一个文档链接。我到处搜索,但没有找到任何参考。

单击此处查看具有来自 ng-flow 的此表达式的 html

我认为代码的目的是在文件不是图像的情况下禁用文件的上传。

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

塔雷克

4

1 回答 1

3

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

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

例如

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 逗号运算符

正如您可能已经猜到的那样,!返回一个布尔表达式,将 or 语句的值反转为truthytrue并将 or 语句falsefalsey值反转falsetrue

{png:1,gif:1,jpg:1,jpeg:1}['jpg'];1哪个truthy值。!1变成false. 最后!false很简单true

在这里查看更多:

真实的

假的

逻辑运算符

于 2016-08-22T16:44:05.373 回答