有几个疑问

有几个疑问

<!DOCTYPE html>

<html lang="en">


<head>

    <meta charset="UTF-8">

    <title>Document</title>

</head>


<body>

    <script type="text/javascript">

        //补充代码

        function Add({

            a,

            b = "bb",

            c = 5

        }) {

            console.log('a:' + a);

            console.log('b:' + b);

            console.log('c:' + c);

        }

        new Add({

            a: true,

            b: 'a',

            c: 8

        });

    </script>

</body>


</html>

1、为什么形参里面给默认值必须使用‘=’,用了‘:’就会报错?而实参必须用‘:’?实参和形参不都是对象吗?这个错误信息是在说什么意思呢?翻译说:无效的析构分配目标,不太理解。

http://img1.sycdn.imooc.com//climg/5eb29bda09da704d04480077.jpg

2、实参里面为什么必须给值呢?不写值也会报错,会说未被定义?不是说实参里面没有给值的就使用形参的默认值吗?

new Add({

            a: true,

            b,

            c: 8

        });


http://img1.sycdn.imooc.com//climg/5eb29b3f09f8bc2b04720084.jpg

正在回答

登陆购买课程后可参与讨论,去登陆

2回答

同学你好,关于你的问题,回答如下:

1、是都是对象,但是实参这里是声明的对象,声明对象必须使用冒号(:),而形参这里是解构的对象,等号是设置的默认值,就是若是调用的时候,传递的对象参数中没有这个属性,那么就使用默认值。设置默认值,是需要使用等号的(=)。

报错信息就是属性的结构不合理,写法是错误的哦。

2、es6中,只写一个值表示属性与属性值都是这里,所有这里表示属性与属性值都是b,而b不是变量,作为属性值的时候,需要使用引号。所有会报错。

默认值这里,是指没有设置属性的时候,比如,如下:

传递的没有sex这个属性,所有使用默认的。

http://img1.sycdn.imooc.com//climg/5eb36b570998505302630408.jpg

如果我的回答帮助了你,欢迎采纳,祝学习愉快~ 

  • Aurora_Meteor 提问者 #1
    ‘只写一个值表示属性与属性值都是这里,所有这里表示属性与属性值都是b,而b不是变量,作为属性值的时候,需要使用引号。’ 这意思是在实参里面只要传值就必须是属性和属性值都一起写上,要不就两个都不写?不能只写一个在那里,因为属性值可能是字符串或者数值,而属性名只能是个变量,它们是不会相等的,不能用一个东西来表示它们俩?
    2020-05-07 12:48:04
好帮手慕糖 2020-05-07 13:52:23

同学你好,若是使用同一个的话,可以提前声明个变量,例:

http://img1.sycdn.imooc.com//climg/5eb3a21409d92b3304370369.jpg

祝学习愉快~

问题已解决,确定采纳
还有疑问,暂不采纳

恭喜解决一个难题,获得1积分~

来为老师/同学的回答评分吧

0 星

相似问题

登录后可查看更多问答,登录/注册

请稍等 ...
意见反馈 帮助中心 APP下载
官方微信

在线咨询

领取优惠

免费试听

领取大纲

扫描二维码,添加
你的专属老师