【问题标题】:why does accessing an array object by name gives undefined为什么按名称访问数组对象会给出未定义的
【发布时间】:2018-03-12 12:04:59
【问题描述】:

如果我尝试访问这样的字符串,为什么会得到未定义:

obj.prop = JSON.stringify(otherObj);

如果我这样访问它:

prop = JSON.stringify(otherObj.propertyIwant);

它有效并给了我想要的价值??

【问题讨论】:

  • 什么是otherObj?我猜它不是一个可字符串化的对象。
  • obj 定义在哪里?
  • 检查你在 obj 和 otherObj 中的内容
  • 'otherObj' 是类型对象
  • @Rob 那是你的问题。 prop 在obj 中不存在,因为obj 没有分配给它。您应该将其定义为:var obj = {};

标签: javascript angularjs json


【解决方案1】:

因此,stringify 会将obj 转换为字符串,这意味着尝试访问其上的属性(就像您对obj.prop 所做的那样,将导致undefined。

在第二个示例中,您正在对对象的属性进行字符串化(假设 otherObj 是有效对象)并将其分配给变量。

【讨论】:

  • 这很公平,但可以肯定的是,尝试访问其上的属性会导致该属性被字符串化,或者至少只是将对象及其属性转换为字符串文字。未定义绝对不会告诉您错误发生的原因或方式!
【解决方案2】:

Rob,你为什么要将 JSON 对象转换为字符串?

您可以在其中按名称访问属性并将其存储在任何变量中。

解决办法:

var jObject = {name : 'Rob',age: 20};
var myVar = jObject.age;

【讨论】:

  • 因为我在 POST 中将 JSON 字符串作为正文有效负载发送到 webapi,并且我发送的数组需要匹配后端模型:plannedRosterEntries.push({"JobNo" :e.jobNo,“EmployeeID”:e.employeeID,“PlanStart”:e.shiftDate,“ShiftLength”:e.shiftHours,“DutyCodeID”:Duty_Code,“HAVSIdentified”:havs,“PreShiftNotes”:e.notes,“ PlannedShiftByEmployeeId" : e.plannedShiftByEmployeeId, "ContractTypeID" : contractTypeID});
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多