* something * if * expression * JavaScript in JavaScript(FF)

我看到一些例子表明,Firefox支持某种 JavaScript语法,如* * * * * * * * *.

作为我正在谈论的例子,请参阅this MDN article,其中包含以下示例:

var evens = [i for each (i in range(0,21)) if (i % 2 == 0)];

我的问题是:

用什么名字来描述这种语法?我主要想知道这一点,所以我可以把谷歌和更多的阅读.我已经尝试了谷歌最好的我可以想出来,但没有能够把正确的术语在一起,以获得有用的结果.

这个语法是否存在于数组解析之外的其他地方?我觉得我已经看到在数组之外使用的其他例子(例如上面的例子),但我不确定.

在哪里可以阅读有关此语法的更多信息?

除Firefox之外,其他任何浏览器都支持这种浏览器?

这是ES5中的这个功能还是计划用于ES和谐?

解决方法

正如其他人所说,这被称为“阵列理解”,它是为ECMAScript Harmony建议的许多功能之一:

http://wiki.ecmascript.org/doku.php?id=harmony:array_comprehensions

然而,正如几乎每一个和谐的“功能”,我不认为有没有真正的概念是否将真正包括在最终版本.您可以在Firefox中使用它作为“JavaScript 1.7”的一部分(真正仅适用于基于Mozilla的东西的模糊的“标准”规范);但是,您最好避免使用特定于FF的语法,特别是在其他浏览器中会导致语法错误.

您可以通过Google搜索“Array Comprehensions”来阅读更多信息,但正如我所提到的,由于它具有Mozilla特有的性质,因此它不是一个非常有用的工具.

您可以使用ES5中引入的reduce()Array方法实现类似的效果,而不需要更多的代码

//JavaScript has no "range" function,so let's make one
var range = function (begin,length) { 
    var i,ret = [];
    for (i = begin; i < begin + length; i++) {
        ret.push(i);
    }
    return ret;
};

var evens = range(0,21).reduce(function (arr,cur) { 
    if (cur % 2 === 0) arr.push(cur);
    return arr; 
},[]);

与您正在寻找的内容相比,这可能有点冗长(甚至记住我们必须创建一个range()函数).但它是一个相对紧凑的解决方案,不需要大量的“设置”,主要解决问题:从一个数组过滤元素以形成第二个数组.

我能够把它减少到一个单行,但是变得有点不健康,所以我决定建议两行版本.如果你对一线感兴趣,这里是:

//Don't forget to define "range()"
var evens = range(0,cur) { 
    return (cur % 2 === 0) ? (arr.push(cur) && arr) : arr; 
},[]);

再次,这是ES5代码.如果您希望它在旧版浏览器中工作,那么您需要提供一个垫片来为Array.reduce()提供支持. MDN有一个

https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/Reduce

更新:

看起来我应该使用filter()而不是reduce().使代码更清洁.感谢OP建议!

var evens = range(0,21).filter(function (cur) { return cur % 2 === 0; });

再次,filter()是ES5,所以你需要一个垫片,以确保它在旧的浏览器上正常工作.

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐


什么是深拷贝与浅拷贝?深拷贝与浅拷贝是js中处理对象或数据复制操作的两种方式。‌在聊深浅拷贝之前咱得了解一下js中的两种数据类型:
前言 今天复习了一些前端算法题,写到一两道比较有意思的题:重建二叉树、反向输出链表每个节点 题目 重建二叉树: 输入某二叉树的前序遍历和中序遍历的结果,请重建出该二叉树。假设输入的前序遍历和中序遍历的结果中都不含重复的数字。例如输入前序遍历序列 {1,2,4,7,3,5,6,8} 和中序遍历序列 {
最近在看回JavaScript的面试题,this 指向问题是入坑前端必须了解的知识点,现在迎来了ES6+的时代,因为箭头函数的出现,所以感觉有必要对 this 问题梳理一下,所以刚好总结一下JavaScript中this指向的问题。
js如何实现弹出form提交表单?(图文+视频)
js怎么获取复选框选中的值
js如何实现倒计时跳转页面
如何用js控制图片放大缩小
JS怎么获取当前时间戳
JS如何判断对象是否为数组
JS怎么获取图片当前宽高
JS对象如何转为json格式字符串
JS怎么获取图片原始宽高
怎么在click事件中调用多个js函数
js如何往数组中添加新元素
js如何拆分字符串
JS怎么对数组内元素进行求和
JS如何判断屏幕大小
js怎么解析json数据
js如何实时获取浏览器窗口大小
原生JS实现别踩白块小游戏(五)