【问题标题】:Can I get a javascript object property name that starts with a number?我可以获得一个以数字开头的 javascript 对象属性名称吗?
【发布时间】:2011-08-14 03:58:57
【问题描述】:
var myObj = {"suppliers":[{"name":"supplier1","12m":"0.08","24m":"0.06"}]};

alert(myObj.suppliers[0].12m);

是否有不同的方法来获取此属性,或者我是否应该不使用以数字开头的键?

【问题讨论】:

  • 顺便说一句,这不是 JSON……从技术上讲,它是一个对象。
  • @NeXXeuS 您能否澄清该评论?我认为 Javascript Object Notation 是定义对象的方式。这些术语不是同义词吗?谢谢
  • 本质上它们是一样的,但是在javascript中你称它们为对象。另外,在 JSON 中,所有键都必须被引用:{ "key":123 }
  • @NeXXuS 我的对象是使用'javascript object notation'声明的,不是吗?我所有的键都有双引号,不是吗?我没有看到你所做的区分。
  • @bodine:我喜欢this explanation。这只是您使用对象表示法的上下文。

标签: javascript key


【解决方案1】:

您可以使用以下语法来执行您使用括号表示法描述的内容:

myObject["myProperty"]

方括号表示法与点表示法(例如myObject.myProperty)的不同之处在于它可用于访问名称非法的属性。非法意味着使用点表示法,您只能使用字母数字的属性名称(加上下划线_ 和美元符号$),并且不要以数字开头。括号表示法允许我们使用字符串来访问属性并绕过它。

myObject.1 // fails, properties cannot begin with numbers
myObject.& // fails, properties must be alphanumeric (or $ or _)

myObject["1"] // succeeds
myObject["&"] // succeeds

这也意味着我们可以使用字符串变量来查找和设置对象的属性:

var myEdgyPropertyName = "||~~(_o__o_)~~||";

myEdgyObject[myEdgyPropertyName] = "who's there?";

myEdgyObject[myEdgyPropertyName] // "who's there?";

您可以阅读有关点和括号表示法的更多信息here, on MDN

【讨论】:

    【解决方案2】:

    是的,使用括号语法:

    alert(myObj.suppliers[0]["12m"]);

    来自MDN

    JavaScript 标识符必须以字母、下划线 (_) 或 美元符号($);后续字符也可以是数字 (0-9)。 因为 JavaScript 区分大小写,所以字母包括字符 “A”到“Z”(大写)和字符“a”到“z” (小写)。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-11-03
      • 2017-04-23
      • 2021-12-19
      • 1970-01-01
      • 2015-05-23
      相关资源
      最近更新 更多