JavaScript数组字面量是Array实例,索引和length为自有数据属性,方法继承自Array.prototype;方括号访问通用,点号仅限合法标识符;判断属性存在需结合in操作符与hasOwnProperty。

JavaScript 数组字面量(如 [1, 2, 3])本质上是 Array 构造函数的实例,它既具备普通对象的属性访问能力,又拥有专为序列数据设计的内置方法和特性。理解其“属性”与“方法”的访问方式,关键在于区分:哪些是数组自身的数据属性(如索引、length),哪些是继承自 Array.prototype 的方法(如 push、map),以及访问时的语法限制与隐式行为。
数组字面量的属性:索引与 length 是核心数据属性
数组字面量创建的对象,其数值型索引(0、1、2…)是可读写的自有数据属性,length 是一个特殊的可变属性,反映当前最大索引加一。
- 索引属性名本质是字符串(即使写成数字),
arr[0]等价于arr["0"];点号访问(arr.0)非法,必须用方括号 -
length属性可读可写:增大它会补undefined元素;减小它会截断尾部元素(不可逆) - 非数字键(如
arr.custom = "data")可自由添加,但不计入length,也不影响数组迭代行为
数组方法只能通过原型链调用,不能直接作为属性值使用
像 push、filter、forEach 这些方法并不存储在数组实例自身上,而是定义在 Array.prototype 上,靠原型链继承获得。因此它们只能被调用,不能被当作普通属性值读取或赋值。
在 Java 中初始化和管理阿里云 SDK客户端。包括单例模式、线程安全、endpoint 与 region 配置、VPC 终端节点、同步与异步等。
-
arr.push返回的是函数本身(即function push() { [native code] }),不是执行结果 -
arr.push === Array.prototype.push为true,说明是共享方法 - 不能写
arr.push = null来“禁用”,这只会遮蔽原型上的同名属性,不影响其他数组
访问方式选择:方括号是通用方案,点号仅限合法标识符
数组支持两种属性访问语法,但适用范围不同:
立即学习“Java免费学习笔记(深入)”;
- 方括号
[]总是安全且通用:支持变量、表达式、含特殊字符的键(虽然数组极少用)、甚至null/undefined(会被转成字符串"null"或"undefined") - 点号
.只适用于键名为合法标识符的情况——而数组索引(如0、1)不是标识符,所以arr.0语法错误;只有像arr.length、arr.constructor这类原型上定义的标识符属性才能用点号
判断属性是否存在需结合语义,避免误判
数组中判断某个索引是否“有值”,不能只看 arr[i] !== undefined,因为该位置可能被显式设为 undefined,或根本未定义(稀疏数组)。
-
i in arr:检查索引i是否为数组的自有或继承属性(对稀疏数组有效,0 in [,,2]是false) -
Object.hasOwn(arr, i)或arr.hasOwnProperty(i):仅检查是否为数组自身的索引属性(排除length等原型属性) -
arr[i] !== undefined && arr.hasOwnProperty(i)组合更稳妥,能区分“值为 undefined”和“未定义”

















