对空对象参数这里不明白 老师解释下

对空对象参数这里不明白 老师解释下

let def = "default";

        function createEle(littele='div',{className=def,content=def}=con){

            

            let cdom;

            cdom =document.createElement(littele); 

            cdom.className=con.className;

            cdom.innerHTML=con.content;

            return cdom;

        }

        console.log(createEle('span'));


正在回答 回答被采纳积分+1

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

1回答
好帮手慕慕子 2021-03-29 16:00:19

同学你好,直接测试同学粘贴的这部分代码,控制台出现报错,找不到con,如下图所示:

http://img1.sycdn.imooc.com//climg/606186af09ebe5c510420202.jpg

老师猜测同学这里是提前定义了一个空对象con,如下图所示:

http://img1.sycdn.imooc.com//climg/606186e10978ee8c10550410.jpg

如果是的话,那么同学的代码没有效果是因为等号左侧的con表示要被解构的对象,而等号左侧的才是解构后的值,由于con是一个空对象,所以不可以使用con获取属性值。

建议修改:直接使用解构后的值即可。

http://img1.sycdn.imooc.com//climg/6061879809a33ccf10260308.jpg

因为{ className = def, content = def } = con表示给函数的参数设置默认值为空对象,并对这个空对象进行解构赋值,防止代码报错。如果设置默认值为空对象的话,那么当调用函数,没有传递第二个参数或者传递的第二个参数不是一个对象格式,代码就会报错,示例:

http://img1.sycdn.imooc.com//climg/60618859091779f610380508.jpg

控制台报错,如下图所示:

http://img1.sycdn.imooc.com//climg/606188660983144108770198.jpg

祝学习愉快~

  • 老师你这里好像不对?,

    《因为{ className = def, content = def } = con表示给函数的参数设置默认值为空对象,并对这个空对象进行解构赋值,防止代码报错。如果设置默认值为空对象的话,那么当调用函数,没有传递第二个参数或者传递的第二个参数不是一个对象格式,代码就会报错,示例:》


    这个我试了可以运行不会报错



    <script>

            let con={};

            const createElement = (x = 'div', { content = 'default',className='default' } = con=> {

                let dom = document.createElement(x);

                dom.className = className;

                dom.innerText = content;

                // let body = document.querySelector('body');

                document.body.appendChild(dom);

                return dom;

            };

            // console.log(createElement());

            console.log(createElement('a'));

            console.log(createElement('span', { content: '慕课网' }));

            // console.log(createElement('span', {className:'feild', content: '函数某个参数是对象' }));

            createElement();

            createElement('a');

            createElement('span', { content: '慕课网' });

            createElement('span', {className:'feild'content: '函数某个参数是对象' });

        </script>

    https://img1.sycdn.imooc.com//climg/62442a52096cfc0205940658.jpg

    搜索

    复制

    搜索

    复制

    收藏
    2022-03-30 18:01:36
  • 同学你好,非常抱歉,老师这里漏掉了一个不字,应该是“如果设置默认值为空对象的话”,如下:

    https://img1.sycdn.imooc.com//climg/624433430958cced11100505.jpg

    非常抱歉给同学带来不好的体验,老师以后会更加严谨的,祝学习愉快~

    2022-03-30 18:39:07
问题已解决,确定采纳
还有疑问,暂不采纳

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

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

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

在线咨询

领取优惠

免费试听

领取大纲

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