2017-02-28 44 views
-3

我想obj[key_name]對象的鍵名(注,KEY_NAME是不帶引號!):通不帶引號

function myfunc(name){ 
 
    obj = {'key_name': 'hello', key_name: 'world' }; 
 
    return obj[name]; 
 
} 
 
//myfunc("key_name"); // <--------- this returns obj["key_name"], instead of obj[key_name] 
 
//myfunc(key_name); // <--------- error. key_name is undefined 
 

 
alert(myfunc("key_name"));

如何處理呢?

+1

你的f聯合應該按原樣工作。你能告訴我們一個[mcve]它不工作的地方嗎? –

+0

您是否在調用'myfunc(key_name)'時檢查了key_name var是否已初始化?嘗試使用'console.log(key_name)'檢查瀏覽器控制檯中變量的值 –

+1

引號表示**字符串**。如果你刪除了引號,那麼你試圖將**變量**'key_name'的值傳遞給'myfunc'。請提供一個*完整的*例子。您提供的信息不足以解決您的問題。有了16k代表,你應該知道如何提出正確的問題。 –

回答

2

在對象中不能有兩次相同的密鑰。該物業

'key_name' 

是完全一樣的

key_name 

所以第二個聲明將覆蓋第一個。

DEMO(foo將有1個屬性 - 這樣的鍵陣列長度將是1):

let foo = { 
 
    key_name: 'foo', 
 
    "key_name": 'bar', 
 
    'key_name': 'baz' 
 
} 
 

 
console.log(Object.keys(foo).length); // 1 
 
console.log(foo.key_name); // baz

+0

不理解,反應或問題,反正看不到疑問 –

+0

我已更新問題。 –

0

您的代碼已經工作:

function myfunc(name){ 
 
    obj = {key_name:"blah"}; 
 
    return obj[name]; 
 
} 
 

 
console.log(myfunc("key_name")); // shows "blah"

+0

我已更新問題。 –

+0

......答案是一樣的。有用。 –