簡體   English   中英

括號的功能是什么意思?

[英]What is function with brackets mean?

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

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

用一個例子來解釋這個問題最簡單:

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

這會將一個名為“foo”的屬性添加到對象test ,該屬性的值是一個函數。 在這種情況下,對象test實際上是一個函數並不重要,您可以像在JavaScript中的任何其他對象一樣為函數分配屬性。

您可以使用以下任何方法調用此函數:

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

請注意,如果將name變量分配給不同的name ,則test[name]()將不起作用,例如name = 'bar'

Javascript有兩組用於訪問對象的表示法,點表示法(obj.property)和括號表示法(object [property])。 有關MDN的更多信息。

test[name] = function (){}test對象上的name屬性指定一個匿名函數(它本身就是一個函數)。 在這種情況下(如注釋所述),變量name用於訪問屬性。

起初這看起來有點奇怪,但記住在javascript中,函數是對象是有幫助的。

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"

當然,就像任何對象一樣,您也可以使用括號表示法

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

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

在JavaScript中, 函數是對象 他們有財產。 test[name]為函數設置一個屬性(命名為變量name )。

當你有一個具有已定義屬性的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');

取自Mozilla頁面

人們可以將對象視為關聯數組(也就是地圖,字典,散列,查找表)。 此數組中的鍵是對象成員的名稱

有兩種方法可以訪問對象成員:點表示法和括號表示法(也就是下標運算符)。

所以

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(key).valueOf()完成( String函數將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']

等等...

括號是如何通過鍵將屬性引用到javascript對象的哈希值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM