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

JS中除数组与字符串外,[length]的适用对象、术语及属性查询

关于JavaScript中length属性与属性访问的问题解答

嘿,这问题问到点子上了,结合你贴的Underscore源码片段,我给你逐个拆解清楚:

一、除了数组,还有哪些对象可以用[length]访问?

其实length并不是数组独有的属性,很多内置对象甚至你自定义的对象都可以拥有这个属性,常见的有这些:

  • 字符串(String):就像你例子里的'123'['length'],字符串的length表示字符个数(注意:对于Unicode码点大于U+FFFF的字符,它会被算作两个“单元”,但length统计的是单元数)
  • 类数组对象(Array-like Objects):这类对象不是数组,但结构类似,比如:
    • arguments对象:函数内部的arguments有length属性,表示传入的实参个数
    • DOM集合:比如document.querySelectorAll('div')返回的NodeList,或者document.getElementsByTagName('p')返回的HTMLCollection,都有length表示集合内元素的数量
  • TypedArray类型:比如Uint8Array、Float64Array等二进制数组,length表示数组包含的元素个数
  • 函数(Function):函数的length属性表示它定义时的形参个数,比如:
    function bar(a, b, c) {}
    console.log(bar.length); // 3
    
  • 自定义对象:你完全可以给自己的对象添加length属性,比如:
    const myObj = { length: 5, name: 'test' };
    console.log(myObj['length']); // 5
    

二、obj['length']这种用法的专业术语是什么?

这个用法叫做方括号表示法(Bracket Notation),它属于JavaScript的属性访问器(Property Accessor)的一种,另一种对应的是大家更常用的点表示法(Dot Notation)(比如obj.length)。

方括号表示法的优势在于,它可以访问属性名是变量、包含特殊字符,或者是数字的属性——而length刚好是一个合法的标识符,所以两种写法都能用,但如果属性名是比如'my-length',那就只能用方括号表示法了。

三、除了length,怎么获取对象可用的全部键/属性列表?

根据属性的来源(自身/原型链)、是否可枚举,有几种不同的方法:

  • 获取自身可枚举的属性键:用Object.keys(obj),它返回一个数组,包含对象自身所有可枚举的字符串类型属性键
  • 获取自身所有属性键(包括不可枚举):结合Object.getOwnPropertyNames(obj)(获取字符串类型的属性键,不管是否可枚举)和Object.getOwnPropertySymbols(obj)(获取Symbol类型的属性键)
  • 获取包括原型链在内的所有可枚举属性键:用for...in循环,记得可以用obj.hasOwnProperty(key)来过滤掉原型链上的属性,比如:
    for (const key in obj) {
      if (obj.hasOwnProperty(key)) {
        console.log(key); // 只输出自身的可枚举属性
      }
    }
    
  • 获取自身所有属性键(包括Symbol和不可枚举):用Reflect.ownKeys(obj),它会返回对象自身所有的属性键,不管是字符串还是Symbol类型,也不管是否可枚举

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.28 09:18:12