2016-03-06 47 views
0

我在一个函数传递的变量没有被拾起传递的变量,看foollowing例如:JavaScript不是捡的功能

<html> 
<head> 
</head> 

<body> 
</body> 

<script> 
function sample (item, value){ 
    var object = { 
    item: value 
    } 

console.log(object); 
} 

sample("one", false); 
</script> 

</html> 

这将输出:

{ item: "false" } 

,而不是:

{ "one": "false" } 

为什么item未被选为输入?

+0

“为什么”是因为对象文字/初始化程序不将键/属性解析为*表达式* s。当你提供一个标识符时,标识符本身的名称就是所使用的。这意味着通过允许在许多情况下关键字的引用是可选的方便。 - 虽然正如我在另一条评论中提到的那样,在关键字周围放置括号是一种新的语法选项,它将决定* Expression *的关键字,允许您使用变量等。 –

回答

0

JavaScript对象定义以这种方式工作。解释器假定item是一个字符串,而不是一个变量。您应该这样做:

function sample(item, value){ 
    var obj = {}; 
    obj[item] = value; 
    return obj; 
} 
+1

在[支持的浏览器/引擎](https: //kangax.github.io/compat-table/es6/#test-object_literal_extensions),现在可以是'return {[item]:value};'。 –

+0

'{\'$ {item} \':value}'会更有意义tbh – JCOC611

+0

也许吧。从ES6开始,这是无效的语法(仍然需要围绕模板字符串的括号)。可能值得在[es-discuss]上提出建议(https://mail.mozilla.org/listinfo/es-discuss)。 –