You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

为何在filter函数中用`.`而非`[]`调用对象属性失效?

为什么不能用.运算符代替[]访问对象属性?

一、.和[]的核心区别

  • .运算符(点符号):仅支持静态属性名,也就是写代码时就固定的属性名,比如x.name里的name是字面量,无法用变量替代。
  • []运算符(方括号):支持动态属性名,可以用变量、表达式的结果作为属性名,比如x[prop]里的prop是变量,运行时会取它的实际值(比如你传入的"name")作为属性名去访问对象。

你的第一段代码用x[prop],正是正确的动态属性访问方式,所以能根据传入的prop参数,灵活获取对应属性的值。

二、第二段代码返回[undefined, undefined]的原因

你第二段代码的逻辑完全偏离了目标需求:

function filter(array, prop) {
  var result = array.map(x=>{
    if(x.name===prop){ // 这里是判断x的name属性值是否等于prop参数
      return x
    }
  })
  return result
}

当你传入prop="name"时,x.name的实际值是"TV LCD"和"PC",这两个值和字符串"name"完全不相等,导致if条件永远不成立。而map的回调函数如果没有返回值,会默认填充undefined,最终结果自然是[undefined, undefined]。

如果想用点符号实现类似第一段的效果,只能固定写死属性名(比如return x.name),但这样函数就失去了动态性,无法通过prop参数指定不同属性。要保留动态获取属性的能力,必须使用x[prop]的方括号写法。

内容的提问来源于stack exchange,提问作者Bytexr

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.20 05:07:10