当前位置: 首页 > Web前端 > JavaScript

面试题:一道关于解构赋值和参数默认值的编程题

时间:2023-03-27 01:23:27 JavaScript

在前端社的QQ群里,有朋友发了这么一道题,说是最近面试遇到的,如下图functionfun(?){return{a,b}}console.log(fun())//{a:1,b:2}console.log(fun({a:3}))//{a:3,b:456}console.log(fun({}))//{a:123,b:456},fun的参数应该填什么?提示:使用结构赋值和参数默认值进行一些测试后,结果如下:functionfun({a=123,b=456}={a:1,b:2}){return{a,b}}解题思路先看第一次执行:console.log(fun())//{a:1,b:2}fun()不传参直接执行,结果a为1andbis2.Description默认值是a:1,b:2可以得出functionfun(a=1,b=2){return{a,b}}再看下第二次执行:console.log(fun({a:3}))//{a:3,b:456}fun({a:3}),参数传入一个对象,对象中a为3,结果a为3,b为456,说明其参数的默认值是一个对象,对象中的值有默认参数a和b。结合“Execute1”,如果不传参数,默认使用选项a=1,b=2;如果传入参数,则使用对象中的默认参数。即functionfun({a=XX,b=456}={a:1,b:2}){return{a,b}}最后看第三次执行:console.log(fun({}))//{a:123,b:456}显然,我们还不知道对象中默认的a代表什么。第三次执行告诉我们它是123所以最后我们的答案是functionfun({a=123,b=456}={a:1,b:2}){return{a,b}}我正在做一个问题,我被作业的=和:搞糊涂了。这里注意一下:给对象赋值=默认值如图:constobj={a:1,b:2,c:3,d:4,}const{a,b}=obj//解构assignmenta,b,ais1,bis2const{a=11,b=21,e=51}=obj//设置解构赋值的默认值,a为1,b为2,e为51,defaultvalue是当你的object中没有value的时候赋给变量的默认值=assignthedefaultvaluetothevariable然后:在什么地方使用,当解构赋值中的value是一个对象时,设置object中的值:constobj={a:{aa:11,bb:22,},b:2,c:3,d:4,}const{a,b}=obj//a={aa:11,bb:22}b=2const{a={aa:111,bb:222},b=22,e={aa:111,bb:222}}=obj//a={aa:11,bb:22},b=22,e={aa:111,bb:222}这里要注意:当对象中存在解构值时,即使设置了默认值,仍以该值为准;如果解构后的值不在对象中,则将使用默认值形式出现在结果值中。回头看题functionfun(?){return{a,b}}console.log(fun())//{a:1,b:2}console.log(fun({a:3}))//{a:3,b:456}console.log(fun({}))//{a:123,b:456}为什么a=123,b=456用等号=代替冒号:?,因为它本来就是一个“键”,所以只能赋一个默认值,不能重命名。总结在解构赋值的时候,冒号:表示重命名,等号=表示赋默认值。《面试官?》,欢迎正在阅读的你加入。