【问题标题】:Data sent to server using jquery get not requiring strings to be declared in quotations?使用 jquery 发送到服务器的数据不需要在引号中声明字符串?
【发布时间】:2013-09-18 23:07:11
【问题描述】:

当使用 Jquery 的 get 函数时,我发现了一个我已经实现的代码 sn-p,其中数据被发送到服务器。数据作为字典提供给 get 函数。在这本字典中,键充当字符串,但不包含在引号中。此字典中的值被包装为字符串。谁能解释一下有什么区别?变量名称和时间未在脚本中先前的任何位置定义。 包括下面的整个脚本。

<script>
    $(document).ready(function () {
        $.ajaxSetup({ cache: false });
        $('button').click(function () {
            $.get('query.php',{ name: "John", time: "2pm" },function (data) {
                alert(data);
            });
        });
    });
</script>

【问题讨论】:

    标签: jquery get


    【解决方案1】:

    您要询问的代码是 JavaScript 对象文字:

    {
        name: "John",
        time: "2pm"
    }
    

    你可以这样写对象字面量,它的意思完全一样:

    {
        "name": "John",
        "time": "2pm"
    }
    

    您在前一行中有另一个对象字面量:

    $.ajaxSetup({ cache: false });
    

    这和它写成的意思是一样的:

    $.ajaxSetup({ "cache": false });
    

    或:

    $.ajaxSetup({ 'cache': false });
    

    换句话说,对象字面量中的属性名称通常不需要引号。如果名称不是有效的 JavaScript 标识符,您只需引用属性名称,例如,如果其中包含空格:

    {
        "my name": "John",
        "the time": "2pm"
    }
    

    如果你这样写,那将是无效的:

    {
        my name: "John",
        the time: "2pm"
    }
    

    所以这里需要引号。但是在你使用的对象字面量中,它们不是必需的,无论你是否使用它们都意味着同样的事情。

    请注意,这与其他一些语言不同,在这些语言中,哈希或映射中带引号的名称或不带引号的名称实际上表示不同的含义。在 Ruby 中,散列中未加引号的名称是变量引用。在 JSON 中,必须始终引用属性名称。但是在 JavaScript 对象字面量中,当名称是有效的 JavaScript 标识符时,您可以省略引号。

    【讨论】:

      【解决方案2】:

      Object Initialiserliteral 中,键不会被严格评估为表达式

      相反,它们仅限于 3 个可能的选项:

      PropertyName :
          IdentifierName
          StringLiteral
          NumericLiteral
      

      虽然StringLiterals 和NumberLiterals 的值会被正常评估,但IdentifierNames 的值会被评估。

      因此,在您的 sn-p 中,nametime 是属性的实际名称。即使确实存在类似的变量,它们实际上也不会被使用:

      var time = 'foo';
      
      console.log({ time: 'bar' });
      // { "time": "bar" } rather than { "foo": "bar" }
      

      如果你想使用一个变量作为键,你实际上需要使用bracket member operators

      var o = {};
      o[time] = 'bar';
      
      console.log(o);
      // { "foo": "bar" }
      

      另一方面,这些值被评估为普通表达式。因此,变量和其他文字都可以使用。

      console.log({ bar: time, baz: true, qux: [ "Lorem", "ipsum" ] });
      // { "bar": "foo", "baz": true, qux: [ "Lorem", "ipsum" ] }
      

      【讨论】:

        猜你喜欢
        • 2011-05-02
        • 1970-01-01
        • 2016-02-10
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-07-12
        相关资源
        最近更新 更多