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

对象字面量与JSON对象有何区别?为何JSON不支持计算属性?

JSON与JavaScript对象字面量的核心区别:为什么计算属性在JSON里不生效?

你遇到的问题本质是JSON和JS对象字面量完全是两回事,前者是静态数据格式,后者是JS语言的语法结构,两者的规则和能力天差地别。

核心区别点

  • 键的定义规则

    • JSON的键必须是双引号包裹的固定字符串,不支持任何表达式、变量或计算逻辑——不管你写什么,只要在双引号里,就会被当成键名本身,不会被求值。
    • JS对象字面量的键灵活得多:可以是不带引号的标识符、字符串,还支持计算属性(用[]包裹表达式),表达式会被实时求值,最终结果作为键名。
  • 功能定位

    • JSON是跨语言的数据交换格式,只包含最基础的数据类型(字符串、数字、布尔、数组、对象、null),目的是让不同语言都能解析和生成,完全没有编程逻辑能力。
    • JS对象字面量是JS语言的一部分,用来创建JS对象,支持所有JS特性:计算属性、方法、变量引用、原型继承等等。

你的代码问题分析

你写的json变量只是个普通字符串,里面的[personType === 'student' ? ...]会被当成字符串的一部分,而且单引号嵌套的写法本身就有语法错误,JSON解析器根本无法正确识别它。

正确实现方式

如果要生成带动态键的JSON,得先在JS里用对象字面量创建好带计算属性的对象,再转换成JSON字符串:

const personType = 'student'

// 先用JS对象字面量创建带动态键的对象
const personObj = {
  name: 'jane',
  age: 20,
  [personType === 'student' ? 'studingAt' : 'workingAt']: personType === 'student' ? 'oxford university' : 'Audi'
}

// 转换成合法的JSON字符串
const json = JSON.stringify(personObj)
// 最终结果:{"name":"jane","age":20,"studingAt":"oxford university"}

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.24 19:41:05