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