在Javascript中,为什么长度属性位于结束标记之后

在Javascript中,为什么长度属性位于结束标记之后,javascript,Javascript,我在理解“length”属性的位置时遇到了一些困难,我正在制作一个作为JavaScript课程一部分的待办事项列表应用程序 待办事项列表: const todos = [{ text: 'First task', completed: true }, { text: 'Second task', completed: false }, { text: 'Third task', completed: true }] 我的问题: 下面的代码为我提

我在理解“length”属性的位置时遇到了一些困难,我正在制作一个作为JavaScript课程一部分的待办事项列表应用程序

待办事项列表:

const todos = [{
    text: 'First task',
    completed: true
}, {
    text: 'Second task',
    completed: false
}, {
    text: 'Third task',
    completed: true
}]

我的问题: 下面的代码为我提供了仍然需要完成的全部任务。我不明白的是:为什么.length属性在结束“}”之后?我会假设代码是
!todo.completed.length
,而不是
!todo.completed})。长度
。我可以看出,只有后一种方法有效——但我正试图理解为什么。谢谢

let remaining = todos.filter(function(todo){
    return !todo.completed
}).length

这是因为
Array.prototype.filter
返回一个数组

例如,这两个语句是等效的:

[1,2,3]。过滤器(函数(){
返回错误
}).长度

[]长度
这是因为:

[1,2,3]。过滤器(函数(){
返回错误
})
返回
[]

varone=[1,2,3]。过滤器(函数(){
返回错误
})//从数组中删除所有元素
变量二=[]
console.log(一个,一个长度)

console.log(two,two.length)
这是因为
Array.prototype.filter
返回一个数组

例如,这两个语句是等效的:

[1,2,3]。过滤器(函数(){
返回错误
}).长度

[]长度
这是因为:

[1,2,3]。过滤器(函数(){
返回错误
})
返回
[]

varone=[1,2,3]。过滤器(函数(){
返回错误
})//从数组中删除所有元素
变量二=[]
console.log(一个,一个长度)

console.log(two,two.length)
首先:过滤器函数迭代每个todo对象,并返回一个新的todo对象列表

每个todo对象都会传递给作为参数提供的函数(在本例中为匿名函数),只有当该函数返回true时,todo对象才会添加到新列表中

既然您想知道仍需完成的待办事项数量,请返回!todo.completed,因为当todo.completed为false时,将返回true

当filter函数迭代每个对象时,它返回新的列表,此时您可以访问它的长度


回来!todo.completed.lenght实际上没有任何意义,因为您试图获取布尔值的长度,而筛选函数要求true或false。

首先:筛选函数迭代每个todo对象并返回新的todo对象列表

每个todo对象都会传递给作为参数提供的函数(在本例中为匿名函数),只有当该函数返回true时,todo对象才会添加到新列表中

既然您想知道仍需完成的待办事项数量,请返回!todo.completed,因为当todo.completed为false时,将返回true

当filter函数迭代每个对象时,它返回新的列表,此时您可以访问它的长度


回来!todo.completed.lenght实际上没有任何意义,因为您正在尝试获取布尔值的长度,而筛选函数要求true或false。

length
属性仅适用于字符串和数组。您的数据类型为布尔值(true/false)。
length
属性属于数组| JS中的字符串和数组的筛选方法为您返回一个新数组。获取新数组后,您可以使用长度来了解还剩多少个数组需要完成:)返回满足函数中条件的数组
length
属性仅适用于字符串和数组。您的数据类型为布尔值(true/false)。
length
属性属于数组| JS中的字符串和数组的筛选方法为您返回一个新数组。获取新数组后,使用长度来了解还剩多少个数组需要完成:)返回满足函数中条件的数组