为什么这个 getter 返回未定义
Why does this getter return undefined?
下面是一个 getter 的示例,它迭代数组并期望返回a
true
的元素。但test.active
回报undefined
.
var test = {
arr: [
{id: 1, a: false},
{id: 2, a: false},
{id: 3, a: true},
{id: 4, a: false},
{id: 5, a: false},
],
get active() {
this.arr.forEach(item => {
if(item.a) return item
})
}
}
为什么?
> 您的 return
语句位于内部函数中,导致该函数返回。实际上,您的外部函数不会返回任何内容。
如果要返回外部函数,请改用普通的for
循环。
var test = {
arr: [
{id: 1, a: false},
{id: 2, a: false},
{id: 3, a: true},
{id: 4, a: false},
{id: 5, a: false},
],
get active() {
for (var i = 0, e = this.arr.length; i < e; i++) {
var item = this.arr[i];
if (item.a) return item;
}
}
}
console.log(test.active);
如果您了解forEach
的工作原理,可能会有所帮助。
在内部,它看起来很像以下内容,尽管这非常简化。
function forEach (array, block) {
var i, length = array.length;
for (i = 0; i < length; i++) {
// This is where your return would end up, unused, in a different context.
block(array[i], i);
}
}
forEach(['a', 'b', 'c', 'd'], item => {
return 'is meaningless here';
});
或者,您可以使用 Array.prototype.find() 函数来测试给定条件并返回找到的元素。
var test = {
arr: [
{id: 1, a: false},
{id: 2, a: false},
{id: 3, a: true},
{id: 4, a: false},
{id: 5, a: false},
],
get active() {
return this.arr.find(item => {
return (item.a === true);
});
}
}
alert(test.active.id)
https://jsfiddle.net/arqxcbkv/1/
相关文章:
- 这.SOMETHING 总是返回未定义的 - extjs
- React+Meteor:this.ops返回未定义
- 解析-为什么user.getSessionToken()返回未定义的结果
- Javascript函数返回未定义
- JavaScript-获取数据属性的值返回未定义的值
- .val()返回未定义的.text返回随机代码
- 为什么innerHTML返回“未定义”
- "这个“;正在返回未定义的
- 谷歌地图:函数返回未定义的值在console.log中运行良好
- Javascript json返回未定义
- importScripts在web工作程序中返回未定义的
- 访问嵌套 json 对象的属性将返回未定义
- NativeAppEventEmitter返回未定义的
- 我的函数返回“未定义”
- 新手Javascript函数返回未定义的石头剪刀游戏
- Nodejs模块函数返回未定义的,而不是异步的
- .getElementById在.createTextNode中返回未定义
- javascript函数不返回未定义的值
- Typeahead的Javascript类型返回未定义
- Javascript可见元素返回未定义