JavaScript中的未命名对象文字

JavaScript中的未命名对象文字,javascript,Javascript,以下代码在JavaScript中完全有效:- ({a:10,b:20,c:30}) 但是什么时候我们需要这样一个我们不能在代码中引用的对象呢?这个代码有点“毫无意义”,因为你不能引用它(正如你所说的) 您可以用许多语言构造“不做任何事情”的有效代码 比如说, function foo() { var bar = 42; } 同样,上面的函数完全有效,但作用不大。这段代码有点“无意义”,因为您不能引用它(如您所说) 您可以用许多语言构造“不做任何事情”的有效代码 比如说, functio

以下代码在JavaScript中完全有效:-

({a:10,b:20,c:30})


但是什么时候我们需要这样一个我们不能在代码中引用的对象呢?

这个代码有点“毫无意义”,因为你不能引用它(正如你所说的)

您可以用许多语言构造“不做任何事情”的有效代码

比如说,

function foo() {
    var bar = 42;
}

同样,上面的函数完全有效,但作用不大。

这段代码有点“无意义”,因为您不能引用它(如您所说)

您可以用许多语言构造“不做任何事情”的有效代码

比如说,

function foo() {
    var bar = 42;
}

同样,上面的函数是完全有效的,但做的不多。

({a:10,b:20,c:30})没有任何用处,因为您没有对象的引用。但我们可以用同样的方法定义匿名函数
(function(){})(
;这是非常有用的

({a:10,b:20,c:30})没有任何用处,因为您没有对象的引用。但我们可以用同样的方法定义匿名函数
(function(){})(
;这是非常有用的

您经常使用未命名文字作为函数调用的参数。一个流行的例子是对元素调用jQuery插件方法,例如:

$("div").someMethod({prop:'value',otherProp:'value2'});
也可以(而且通常是有益的)事先将这些对象分配给变量,然后传入,如下所示:

var options = {prop:'value',otherProp:'value2'};
$("div").someMethod(options);

但有时第一种方法更简单、更简洁。

您经常使用未命名文字作为函数调用的参数。一个流行的例子是对元素调用jQuery插件方法,例如:

$("div").someMethod({prop:'value',otherProp:'value2'});
也可以(而且通常是有益的)事先将这些对象分配给变量,然后传入,如下所示:

var options = {prop:'value',otherProp:'value2'};
$("div").someMethod(options);

但有时第一种方法更简单、更干净。

实际上,这非常方便。例如,您可以使用该方法完美地处理I18n:

({de: {title: 'foo'}, en: {title: 'bar'}})[navigator.language.slice(0,2)]
所以你可能会得到这样的smth:

var lang = navigator.language.slice(0,2)
var dict = ({de: {title: 'foo'}, en: {title: 'bar'}})[lang]
console.log(dict.title)

事实上这很方便。例如,您可以使用该方法完美地处理I18n:

({de: {title: 'foo'}, en: {title: 'bar'}})[navigator.language.slice(0,2)]
所以你可能会得到这样的smth:

var lang = navigator.language.slice(0,2)
var dict = ({de: {title: 'foo'}, en: {title: 'bar'}})[lang]
console.log(dict.title)
()
是分组运算符。 []

此表达式返回计算的结果。 这可能是参考类型

{a:10, b:20, c:30}['a'];   // invalid
({a:10, b:20, c:30})['a']; // valid. 
Because the object `{a:10, b:20, c:30}` is after being evaluated.
()
是分组运算符。 []

此表达式返回计算的结果。 这可能是参考类型

{a:10, b:20, c:30}['a'];   // invalid
({a:10, b:20, c:30})['a']; // valid. 
Because the object `{a:10, b:20, c:30}` is after being evaluated.


我们没有。但是,
“没有指向这个字符串”也是有效的JS…我们没有。但是,
“没有指向这个字符串”
也是有效的JS…你说的是真的,但它并没有真正解决一个问题,即在一行上谈论一个对象文字,而这个文字本身不能从其他任何地方引用。谢谢Andy..那么实际的函数(someMethod())如何处理我们传递的这个对象文字?@nnnnnn我理解,但我想他可能是在问什么时候会使用未命名的文字@RohitP,
someMethod
看起来像这样:someMethod=function(myObject){//然后使用属性控制台.log(myObject.prop,myObject.otherProp);}嘿,安迪..谢谢..看起来很整洁!!!你所说的是对的,但它并没有真正解决一个问题,即一行中的对象文字本身无法从其他任何地方引用。谢谢Andy..那么实际函数(someMethod())如何处理我们传递的这个对象文字?@nnnn我理解,但我想他可能是在问什么时候会使用未命名的文字@RohitP,
someMethod
看起来像这样:someMethod=function(myObject){//然后使用属性控制台.log(myObject.prop,myObject.otherProp);}嘿,安迪..谢谢..看起来很整洁!!!匿名函数只有在可能被调用时才有用。一个未调用的匿名函数与一个未调用的声明函数(即它不是)一样有用。@RobG-是的,但Shusl的示例是一个立即调用的匿名函数,所以(假设它有实际内容)这将是有用的。匿名函数只有在可能被调用时才有用。一个未调用的匿名函数和一个未调用的声明函数一样有用(即它不是)。@RobG-是的,但是Shusl的例子是一个立即调用的匿名函数,所以(假设它有实际内容)这会很有用。啊..我明白了..听起来很酷…啊..我明白..听起来很酷..即使对象本身出现在一行上,也需要用括号将其解释为表达式,因为否则,花括号
{}
会被解释为块。如果对象出现在需要表达式的位置,例如,
alert({a:10,b:20,c:30}['a']),则不需要括号
工作正常,
+{a:10,b:20,c:30}['a']-@nnnnnn谢谢你的例子…谢谢。如果使用函数
alert
,因为
在“{”之前到达)会被识别为未命名对象。需要使用括号强制将对象解释为表达式,即使它本身出现在一行上,否则花括号
{}
被解释为一个块。如果对象出现在预期表达式的位置,则不需要括号,例如,
警报({a:10,b:20,c:30}['a']);
工作正常,
+{a:10,b:20,c:30}['a'];
-@nnnnnn谢谢您的示例……谢谢。如果您使用函数
警报,因为
在“{”之前到达,被识别为未命名对象。