2017-02-28 43 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

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