每日3题22下面代码执行后,控制台输出什么?变量a=[1,2,3];a.join=a.shift;控制台日志(a==1&&a==2&&a==3);23下面代码执行后,控制台输出内容为?vararr=[0,1];arr[5]=5;varnewArr=arr.filter((x)=>{returnx===undefined;});console.log(newArr.length);below24代码执行后,控制台输出什么?constvalue='valueis'+!!Number(['0'])?'aaa':'bbb';console.log(value);公众号【今天写个bug】获取更多前端面试题答案分析22//答案:true//考察强制转换//==操作将执行强制转换//如果其中一个操作数是对象而另一个是数字或字符串,//它将尝试使用对象的valueOf()和toString()方法将对象转换为原始值。//如果valueOf返回基本类型,则根据值进行转换,否则根据toString的返回值进行转换//数组的valueOf返回自身,所以根据toString的返回值进行转换//对于数组对象,toString方法在内部调用join()方法vara=[1,2,3];a.join=a.shift;//在数组a上定义了一个join方法,这个方法是shift的函数console.log(a==1&&a==2&&a==3);//a==1,触发类型转换//触发a.toString()在内部调用a.join(),即a.shift()返回1,a改变为[2,3]//所以a==1为真//同理,a==2anda==3arebothtrue23//Answer:0//Checkthefiltermethodofthearray//filter()methodcreation一个新数组,包含所有通过提供的函数实现的测试的元素。//过滤器为数组中的每个元素调用一次传递的回调函数,//并创建一个新数组,其中包含导致回调函数返回true或等于true的值的所有元素。//回调函数只会在已分配的索引上调用,不会在那些已删除或从未分配过的索引上调用。vararr=[0,1];arr[5]=5;//直接给索引为5的元素赋值5,跳过的元素都是'空',这些索引不会触发回调函数varnewArr=arr.filter((x)=>{returnx===不明确的;});//所以没有等于未定义的元素console.log(newArr.length);//输出024//答案:aaa//检查运算符优先级并强制转换//优先级:函数调用>!>+>三元运算符//constvalue="valueis"+!!Number(["0"])?"aaa":"bbb";console.log(value);//Number('0')=>0//!0触发类型转换=>true,这些值会被转换为false:null,NaN,0,空字符串(""or''or``),undefined//!true=>false//'valueis'+false=>'valueisfalse'//条件运算符触发类型转换=>'valueisfalse'转换为true//最终输出aaa
