括号的功能是什么意思?

时间:2013-08-14 15:07:50

标签: javascript

有谁知道test[name]是什么意思?

function test(value){
  copy(value||{},this);
}
test[name] = function(){
    return "test"
}

7 个答案:

答案 0 :(得分:6)

这最容易通过一个例子解释:

var name = "foo";
test[name] = function(){
    return "test"
};

这将向对象test添加名为“foo”的属性,该属性的值是一个函数。在这种情况下,对象test实际上是一个函数并不重要,您可以像在JavaScript中的任何其他对象一样为函数指定属性。

您可以使用以下任何一种方法调用此函数:

  • test[name]()
  • test["foo"]()
  • test.foo()

请注意,如果将test[name]()变量分配给不同的内容,name将不起作用,例如name = 'bar'

答案 1 :(得分:1)

Javascript有两组用于访问对象的符号,点符号(obj.property)和括号符号(object [property])。有关详情,请参阅MDN

test[name] = function (){}name对象(它本身就是一个函数)的test属性分配一个匿名函数。在这种情况下(如注释所述),变量name用于访问该属性。

一开始看起来有些奇怪,但记住在javascript中,函数是对象是有帮助的。

答案 2 :(得分:1)

Javascript中的所有函数也是对象。这会向test函数对象添加一个属性,其值为匿名函数。

例如:

function test(){
  return "foo";
}

// test is a function, so it is also an object and 
// it can have properties assigned to it
test.x = function(){
   return "bar";
};

test();   // "foo"
test.x(); // "bar"

当然,就像使用任何对象一样,您也可以使用bracket notation

var name = 'hello';
test[name] = function(){
  return "HELLO!";
};

test.hello(); // "HELLO!"

答案 3 :(得分:0)

在JavaScript中,functions are objects。他们有财产。 test[name]为函数设置一个属性(以name变量保存的名称命名)。

答案 4 :(得分:0)

如果您拥有定义属性的javascript对象,则可以使用点表示法obj.property或方括号表示法obj[property]来访问该属性 如果你有一个对象,该属性也可以是一个函数:

var test = { foo : function(arg){ console.log(arg) }, bar : 'hello' };

您也可以通过test.foo('bar')致电test['foo']('bar') 这在迭代中或当您不知道属性的名称将会是什么时特别有用。例如:

var fun = 'foo';
test[fun]('hello world');

当然,您需要进行适当的检查,例如

if ('function'==typeof test['foo']){ test['foo']('bar'); }

另请注意,您可以像这样执行检查:

test[ fun || 'foo']('hello');

答案 5 :(得分:0)

取自Mozilla page

  

可以将对象视为关联数组(a.k.a.map,dictionary,hash,lookup table)。此数组中的键是对象成员的名称

     

有两种方法可以访问对象成员:点表示法和括号表示法(a.k.a.下标操作符)。

所以

test[name] = function (

表示:有(如果一切正常)两个对象:testname(我们知道至少存在test,因为您之前定义了一行: function test(value)

获取test对象(如果没有测试object,则会发生错误)。然后使用从name对象计算出的密钥访问键/值对,然后放置一个函数。

现在,如何从name对象计算密钥?之前的同一页告诉我们:

  

属性名称必须是字符串。这意味着非字符串对象不能用作对象中的键。任何非字符串对象(包括数字)都通过toString方法转换为字符串。

请注意,描述有点错误...... test[null] == test["null"]test[undefined] == test["undefined"],所以也许事实是,String(key).valueOf()之类的内容已完成(String } function会将null转换为"null"undefined转换为"undefined"

一些例子(其中=>表示“相当于,使用此值”)

var name = 'foo';
test[name] => test['foo']

var name = 123;
test[name] => test['123']

var name = 123.3;
test[name] => test['123.3']

var name = new Date();
test[name] => test['Wed Aug 14 2013 17:35:35 GMT+0200 (...)']

var name = null;
test[name] => test['null']

var name = undefined;
test[name] => test['undefined']

var name = [];
test[name] => test['']

var name = [1,2,3];
test[name] => test['1,2,3']

var name = {};
test[name] => test['object Object']

依旧......

答案 6 :(得分:-1)

括号是指如何通过键将属性引用到javascript对象的哈希值。