【问题标题】:JavaScript Function Returns Multiple Values as Object in ES6JavaScript 函数在 ES6 中将多个值作为对象返回
【发布时间】:2020-08-27 03:22:08
【问题描述】:
function function_name()
{
    var a=1;
    var b=2;

    return {a, b} 
}

let {p1, q1} = function_name()

为什么我会收到关于 p1、q1 的值作为 undefined 的错误消息?但是,下面的代码给出了预期的结果:

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

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

谁能解释一下这两个代码示例的区别?

【问题讨论】:

  • 你是否使用了 babel 转译器?您正在测试哪个版本的浏览器?

标签: javascript ecmascript-6


【解决方案1】:

您正在获得所需的输出,因为 function_name() 正在返回一个对象,该对象具有两个变量 a 和 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 作为变量名不是一个好习惯。您应该使用有效的名称。

【讨论】:

    【解决方案2】:

    它是一种解构,它使用花括号中的键来获取具有相同键的值的赋值。你的函数返回一个对象

    { a: 1, b: 2 }
    

    然后您想要获取名称为p1 和p2 的属性。显然,对象中没有具有此名称的键,因此结果中没有属性。

    { 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 }
    

    【讨论】:

      【解决方案3】:

      这样使用

      function function_name()
      {
          var a=1;
          var b=2;
      
          return [a, b] 
      }
      
      let [p1, q1] = function_name()
      

      将多个值作为数组返回

      【讨论】:

      • 您的回答根本无法解释 OP 提出的问题。此外,通常提供一个代码示例是好的,但它应该是 a) 尽可能简单,b) 代码示例应附有说明,说明您的示例为何有效,而来自 OP 的示例无效。
      猜你喜欢
      • 2018-04-09
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2019-11-16
      • 1970-01-01
      相关资源
      最近更新 更多