set 的 size 和数组的 length 本质不同:size 是 set 动态计数的只读属性,length 是数组可写且自动更新的索引长度属性;二者类型归属、语法、语义、行为均不兼容,不可互换。

Set 集合的 size 是只读属性,数组的 length 也是只读属性,但二者本质不同:一个是集合对象的动态计数字段,一个是数组对象的编译期固定字段;语法、语义、适用类型均不兼容,不能互换使用。
类型归属完全不同
Set 是 JavaScript 中的内置集合对象(不是 Java 的 Set 接口),它没有 length 属性,只有 size 属性。而数组是独立类型,只有 length 属性,没有 size。
-
Set:属于集合类,内部用哈希表管理唯一值,
size实时反映当前元素个数 -
Array:是有序索引结构,
length在创建时确定,增删元素会自动更新(如arr.push()后length自增) - 两者不继承相同父类,也不共享任何长度相关接口
语法形式与调用方式不同
size 和 length 都是属性(不是方法),都不加括号,但它们所属对象不同,写错就会返回 undefined 或报错。
-
new Set([1,2,3]).size→ 返回3(正确) -
new Set([1,2,3]).length→ 返回undefined(Set 没有 length) -
[1,2,3].length→ 返回3(正确) -
[1,2,3].size→ 返回undefined(数组没有 size)
行为逻辑有本质差异
size 只随元素增删变化,不响应索引赋值;length 则对多种操作敏感,包括索引越界赋值、截断等。
- 对 Set:
set.add(4)→size变为 4;但set[0] = 5无效,size不变 - 对 Array:
arr[10] = 99→length可能变为 11(稀疏数组);arr.length = 0直接清空数组 - Set 的
size不可手动修改;数组的length可写(设小会截断,设大会留空位)
别和 Java 混淆
Java 中没有 Set.size 属性——那是 size() 方法(带括号);Java 数组也只有 length 字段(无括号)。JavaScript 的 Set.size 是属性,这是语言层面的差异,不是命名随意。
- JS Set:✅
set.size|❌set.size()(不是函数) - Java Set:✅
set.size()|❌set.size(编译报错) - JS 数组和 Java 数组都用
.length(无括号),这点一致











