2016-03-06 48 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)。 –