JavaScript array.some()函数不工作,因为它应该?
我正在做一个使用AngularJS的Web项目,但在我试图实现array.prototype.some()函数的控制检查之一。不幸的是,它不起作用,并且总是假的。JavaScript array.some()函数不工作,因为它应该?
以我在发现错误尝试,我试图执行其中具有数字的阵列用于检查值高于5
测试代码一个简单的测试情况下是这样的:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(function (element, index, array){
element > 5;
});
一些网页意味着我需要索引和数组作为强制参数,但只有元素是我需要的这个测试的唯一参数。
然而,结果仍然为假,但有至少一个大于5
什么我做错了更高的元素是什么?
你不是返回结果element > 5
比较;也许你已经看到了ES2015的“箭头函数”,并且正在将它们简洁的语法与function
函数语法混淆起来(或者你可能已经看过一些CoffeeScript)。
当使用function
语法,必须返回结果:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(function (element, index, array){
return element > 5;
// ^^^^^^
});
如果函数退出没有return xyz
语句(或不带操作数使用return;
),调用函数的结果是undefined
,这是错误的,所以some
不会停止循环。
有了ES2015,如果你用一个箭头功能和“简洁的函数体”的回报是隐:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(element => element > 5);
但是,只有以简洁机构(无{}
),否则你用return
与function
功能:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(element => {
return element > 5;
});
注意的是,虽然前沿的浏览器都在积极更新自己的JavaScript引擎添加ES2015的特性,在地面上支撑依然稀疏的话,你可能需要transpile使用ES2015具有箭头功能。 (尤其是,如果您需要支持IE10等旧浏览器。)
当然,我必须做出这样的疏忽......呃! 谢谢 –
'element> 5'评估谓词,但不返回其结果。 'return'语句在这里会有所帮助。 –