2017-06-18 48 views
3
function function_name() 
{ 
    var a=1; 
    var b=2; 

    return {a, b} 
} 

let {p1, q1} = function_name() 

爲什麼我得到有關的p1值的錯誤消息,q1undefined?但是,下面的代碼給出了預期的結果:JavaScript函數返回多個值作爲對象在ES6

var o = {p: 42, q: true}; 
var {p, q} = o; 

console.log(p); // 42 
console.log(q); // true 

任何人都可以解釋這兩個代碼示例之間的區別嗎?

+0

您是否在使用babel轉譯器?您正在測試哪個版本的瀏覽器? – meteorzeroo

回答

8

你得到期望的輸出,因爲函數名()返回了由具有兩個變量的對象,並且具有一些值b 。

function function_name() 
{ 
    var a=1;var b=2; 
    return {a,b} 
} 

這裏return {a, b}相當於return {a: a, b: b}等同於return {a: 1, b: 2}

要得到你需要更新您的調用方法簽名的確切值:

let {a, b} = function_name() 

注意:這是不是一個使用a或b作爲變量名稱的好習慣。你應該使用有效的名字。

5

這是一個解構,它使用大括號中的鍵來獲取與賦值相同的鍵的值。你的功能retuns對象

{ a: 1, b: 2 } 

,然後你想用的名字p1p2獲取屬性。顯然,對象中沒有這個名稱的鍵,因此結果中沒有屬性。

{ a: 1, b: 2 } => get { p1 and p2 } => {} 

工作實施例

{ p: 42, q: true } => get { p and q } => { p: 42, q: true } 

與另一屬性

{ p: 42, q: true, foo: 42 } => get { p and q } => { p: 42, q: true }