【问题标题】:Json first object is a *, how to get it? [duplicate]Json第一个对象是一个*,如何获取呢? [复制]
【发布时间】:2017-07-25 23:31:20
【问题描述】:

如果我跑:

$("#results ul").append(data.parse.langlinks.map(function(val){ return "<li>" + val.lang + "</li>" }));

我得到了lang 的所有正确值,但我需要得到第一个对象,它没有口头命名,但它有

*

所以当我尝试像val.* 一样访问它时,我得到:

Uncaught SyntaxError: Unexpected token *

JsFiddle

【问题讨论】:

    标签: javascript jquery json wikipedia wikipedia-api


    【解决方案1】:

    像这样访问您的对象:val['*']

    【讨论】:

    • 哈!没办法,我用的是双重" "!谢谢
    • 双引号也可以,都是有效的字符串分隔符。
    • @DarthJDG 是的,但它在 .append 中,它已经在使用 double quotes。见!
    • 我的意思是我的真实案例场景不在此处,因为我们在此处的问题上使用的 .append 上没有 double quotes
    【解决方案2】:

    访问包含特殊字符的对象时需要使用括号表示法:

    return val['*'] + "</li>";
    

    https://jsfiddle.net/ryanpcmcquen/fg395Lp9/

    还值得注意的是,在使用变量或保留关键字访问对象时需要使用括号表示法(感谢@DarthJDG 指出):

    var foo = '*';
    return val[foo];
    

    此外,如果您正在探索 JavaScript 的一些新方面,计算属性名称包含括号表示法:

    https://ryanpcmcquen.org/javascript/2016/10/25/computed-property-names-are-awesome.html

    【讨论】:

    • 值得注意的是,如果属性名称是保留关键字,您还需要使用括号表示法,例如class.
    • 谢谢@DarthJDG,我已经添加了。
    • @rob.m,当使用不带引号的括号表示法时,您提供了一个变量。我扩展了我的示例以使其更加明显。
    • @ryanpcmcquen 完美,有道理。谢谢你
    • @rob.m 不客气!
    【解决方案3】:

    我的回答和其他人一样,只是解释的多一点……

    val["*"]  // Bracket notation
    

    JavaScript 中的对象实际上不过是字典、键/值对的分组,或者换句话说,关联数组。

    因此,您始终可以通过将字符串作为索引传递给对象来访问对象的属性(也称为键)。但是,如果索引/键/属性名称不包含任何非法语言标识符字符,那么您可以使用更常见的“点表示法”。

    把这个放到一个极端,大多数人可能会说对象属性名称不能包含空格,因为这当然不会编译并且似乎没有任何意义:

     obj.some property name = "10";    // won't compile
    

    但是,如果您将对象视为数组并将属性名称视为键,您实际上可以拥有包含空格的属性名称:

     obj["some property name"] = 10;  // perfectly fine
    

    这也为动态代码提供了一些很好的机会,因为它允许您动态传递一个键(字符串):

    var keyName = new Date().toLocaleTimeString();
        
    var obj = {};
    obj[keyName] = "some value";
         
    for(var prop in obj){ 
         console.log("The obj." + prop + " property has a value of: " + obj[prop]);
    }

    【讨论】:

      猜你喜欢
      • 2019-11-26
      • 2013-10-20
      • 2019-04-19
      • 2022-01-19
      • 1970-01-01
      • 2013-07-18
      • 2023-03-18
      • 2021-03-23
      • 1970-01-01
      相关资源
      最近更新 更多