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

JS构造函数创建实例输出键名无引号问题咨询

问题原因

你观察到的现象由两个核心原因导致,和构造函数本身的逻辑正确性无关:

  • 控制台打印原生JavaScript对象时,默认展示规则不会给符合合法标识符规范的键名包裹引号,只会以key: value的形式展示,这是控制台的可视化渲染逻辑,不代表对象内部的键名存储存在错误。
  • 你的代码本身存在键名不匹配的问题:构造函数中给实例挂载的属性是小写开头的title和rating,和你预期的Title键名完全不一致,自然不会得到对应键名的结果。
  • 额外逻辑问题:map+filter返回的本身已经是数组,你调用filteredList.push(var1)会把整个数组作为单个元素存入,最终得到嵌套的二维数组;同时你用parseInt处理小数评分会丢失小数部分,逻辑存在隐患。
解决方法

按以下步骤调整即可:

  1. 修正构造函数的属性名,和你预期的键名保持一致
function Movie(Title, imdbRating) {
  this.Title = Title;
  this.imdbRating = imdbRating;
}
  1. 修正数组处理逻辑,避免生成二维数组,同时用parseFloat处理浮点评分
const watchList = [{
  "Title": "Inception",
  "imdbRating": "8.8"
}]

const filteredList = watchList
  .map(function(element) {
    return new Movie(element["Title"], element['imdbRating'])
  })
  .filter(function(elem) {
    return parseFloat(elem.imdbRating) >= 8.0
  })
  1. 如果你需要得到键名带双引号的标准"key": "value"格式,不要直接打印原生JS对象,调用JSON.stringify()将对象转为标准JSON字符串后输出即可,该方法生成的字符串会自动给所有字符串类型的键、值包裹双引号:
// 第三个参数2表示格式化缩进2个空格,方便阅读
console.log(JSON.stringify(filteredList, null, 2))

补充说明:不要把控制台的对象展示格式和JSON格式混淆。JSON是一种数据序列化格式,有严格的引号要求;而原生JS对象在控制台的展示只是给开发者看的调试视图,只要你能通过.或者[]语法正常取到属性值,对象结构就是合法可用的,不需要纠结展示时有没有引号。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.09.02 05:12:24