Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/366.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
*JavaScript中的something*if*expression*语法(FF)_Javascript_Ecmascript Harmony - Fatal编程技术网

*JavaScript中的something*if*expression*语法(FF)

*JavaScript中的something*if*expression*语法(FF),javascript,ecmascript-harmony,Javascript,Ecmascript Harmony,我已经看到一些例子表明Firefox支持某种JavaScript语法,如*something*if*expression* 作为我所说的示例,请参见,其中包含以下示例: var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)]; 我的问题是: 用什么名字来描述这种语法?我主要想知道这一点,这样我就可以在谷歌上搜索并阅读更多关于它的信息。我已经尽了最大努力在谷歌上搜索,但是没有找到合适的术语来获得有用的结果 这个语法是否存在于数组理

我已经看到一些例子表明Firefox支持某种JavaScript语法,如
*something*if*expression*

作为我所说的示例,请参见,其中包含以下示例:

var evens = [i for each (i in range(0, 21)) if (i % 2 == 0)];
我的问题是:

用什么名字来描述这种语法?我主要想知道这一点,这样我就可以在谷歌上搜索并阅读更多关于它的信息。我已经尽了最大努力在谷歌上搜索,但是没有找到合适的术语来获得有用的结果

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

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

除了Firefox,还有其他浏览器支持此功能吗?


这是ES5中的功能还是为ES harmony计划的功能?这种类型的语句称为a。有一些语法非常相似的好例子。

正如其他人所指出的,这被称为“数组理解”,它是ECMAScript的众多功能之一:

然而,就像几乎每一个Harmony“特性”一样,我不认为有任何关于它是否真的会包含在最终版本中的真正概念。您可以在Firefox中使用它作为“JavaScript 1.7”(一个模糊的“标准”规范,实际上只适用于基于Mozilla的东西)的一部分;但是,最好避免使用FF特定的语法,尤其是在其他浏览器中可能导致语法错误的情况下

你可以通过谷歌搜索“数组理解”来了解更多关于它的信息,但正如我提到的,由于它是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; 
}, []);
同样,这是ES5代码。如果您希望它在较旧的浏览器中工作,则需要提供一个垫片来支持
Array.reduce()
。MDN在这里有一个:

更新:

看起来我应该使用
filter()
而不是
reduce()
。使代码更加清晰。感谢OP的建议

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

同样,
filter()
是ES5,因此您需要一个垫片,以确保它在较旧的浏览器上正常工作。

“用什么名称来描述这种语法?”-您链接的文章称之为“数组理解”。我可能错了,但我认为该术语是指数组部分中每个
。我想我已经看到了数组之外使用的不同的
if
语法,但我不确定?数组理解不仅更加紧凑,而且一旦您熟悉了这个概念,它实际上更容易阅读。一旦我确定每个人都知道语法,我才敢用它。维护者是一个暴力的精神病患者,所有…“我想我看到了数组之外使用的不同的if语法”-在这种情况下,
if
仍然是数组理解的一部分。通常情况下,
if
在其结束后会有一个语句或一个
{}
块(
)-事实上它在数组中没有一个,这就是你所说的“different if syntax”?相关:+1,但“JavaScript 1.7”不是任何标准。JavaScript是Mozilla在浏览器中使用的ECMAScript的专有实现。它甚至没有一个规范,唯一接近的文档是,它作为社区wiki维护。+1,感谢所有信息!对于ES5变体,我将使用
filter
而不是
reduce
。但是如果我在做一个只适合FF的项目,那么我也可以使用JS1.7的功能。@NathanWall我将不得不查看
filter()
。我仍在学习ES5的所有内容。谢谢你的反馈!
var evens = range(0,21).filter(function (cur) { return cur % 2 === 0; });