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

JavaScript中使用class与不使用class编写代码有什么区别

核心错误说明

首先纠正两个基础认知偏差:

  • 你对Set的运行结果理解错了。Set是ES6新增的独立值集合结构,不是普通键值对对象,执行mySet.add("hello")后,内部存储的是"hello"这个值本身,不存在hello: true的键值对,你看到的{hello: true}是调试工具做的格式转换,不是代码实际运行的结构。
  • 方括号属性访问语法从来不是ES6类的专属特性。你写的car[built] = 2019报错,和是不是在类里写没有任何关系。
报错根本原因

JS里用方括号访问/赋值对象属性时,方括号内部接收的是变量或者可执行表达式,引擎会先计算括号里内容的值,再把这个值作为属性名操作。
你写car[built] = 2019时,从来没有在当前作用域定义过名为built的变量,引擎找不到这个变量,自然会抛出built is undefined的错误。

正确写法

根据你的需求,对应两种正确写法:

  1. 如果你就是要给car加一个名为built的属性,直接用点语法,或者在方括号里传字符串字面量即可:
const car = {
  color: "red"
}
// 点语法直接写属性名
car.built = 2019
// 方括号传字符串字面量,效果和上面完全一致
car["built"] = 2019
  1. 如果你要做动态键名赋值,也就是用变量里存的值当属性名,必须先定义对应变量:
const car = {
  color: "red"
}
// 先定义变量,存你要设置的属性名
const built = "productionYear"
// 这行等价于 car["productionYear"] = 2019
car[built] = 2019

你觉得这个语法只能在类里用,大概率是把类/对象字面量里的计算属性名语法和普通属性赋值搞混了。不管是在类里、对象字面量里还是普通赋值场景,只要方括号里写的是未定义的变量,都会报一样的错,不存在类专属的规则。比如下面的代码不管在哪写都会报错:

// 没定义built,不管是写在对象字面量还是类里,都会报built未定义
const car = {
  [built]: 2019
}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.30 01:09:34