当使用Jquery的get函数时,我发现了一个代码片段,我已经实现了该代码片段,其中数据被发送到服务器。 数据作为字典提供给 get 函数。在此字典中,键充当字符串,但不用引号括起来。此字典中的值包装为字符串。谁能解释一下有什么区别?变量名称和时间未在脚本以前的任何地方定义。包括下面的整个脚本。
<script>
$(document).ready(function () {
$.ajaxSetup({ cache: false });
$('button').click(function () {
$.get('query.php',{ name: "John", time: "2pm" },function (data) {
alert(data);
});
});
});
</script>
你问的代码是一个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 标识符时,您可以省略引号。
在对象初始化器或文本中,键不会严格计算为表达式。
相反,它们仅限于 3 个可能的选项:
PropertyName :
IdentifierName
StringLiteral
NumericLiteral
虽然 StringLiteral
s 和 NumberLiteral
s 的值将按正常计算,但 IdentifierName
s 将按其名称进行评估。
因此,在您的代码段中,name
和time
是媒体资源的实际名称。即使确实存在类似的变量,它们实际上也不会被使用:
var time = 'foo';
console.log({ time: 'bar' });
// { "time": "bar" } rather than { "foo": "bar" }
如果要使用变量作为键,实际上需要使用括号成员运算符:
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" ] }