我正在使用AngularJS进行一个Web项目,但在其中一个控件检查中,我正在尝试实现array.prototype.some() - 函数.不幸的是,它不起作用,总是假的.
在我尝试找到错误时,我尝试实现一个简单的测试用例,其中检查具有数字的数组的值是否大于5.
测试代码是这样的:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(function (element, index, array){
element > 5;
});
Run Code Online (Sandbox Code Playgroud)
一些网页暗示我需要索引和数组作为必需参数,但只有元素是我测试所需的唯一参数.
但是,结果仍然是假的,但至少有一个元素高于5.
我究竟做错了什么?
你没有返回element > 5比较的结果; 也许你已经看过ES2015"箭头函数",并且他们的简洁语法与function函数语法相混淆(或者你可能已经看过一些CoffeeScript).
使用function语法时,必须返回结果:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(function (element, index, array){
return element > 5;
// ^^^^^^
});
Run Code Online (Sandbox Code Playgroud)
如果函数在没有return xyz语句的情况下退出(或者return;在没有操作数的情况下使用),则调用函数的结果undefined是假的,因此some不会停止循环.
使用ES2015,如果使用箭头函数和"简洁函数体",则返回隐含:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(element => element > 5);
Run Code Online (Sandbox Code Playgroud)
但只有简洁的机构(否{}),否则你使用return与function函数一样:
var arrayForTesting = [2, 5, 18];
var result = arrayForTesting.some(element => {
return element > 5;
});
Run Code Online (Sandbox Code Playgroud)
请注意,虽然尖端浏览器正在积极更新其JavaScript引擎以添加ES2015功能,但实际支持仍然很少,您可能需要转换为使用箭头功能等ES2015功能.(尤其是如果您需要支持IE10等旧版浏览器.)