当前位置: 首页 > 科技观察

面试官:为什么“false==[]”和“false==![]”都返回true?

时间:2023-03-19 09:49:49 科技观察

JavaScript是一种优秀的编程语言,但同时,它也经常让我感到困惑。可能是我理解不够!有时候真的想不通它是怎么回事,看完这5道怪题,你就知道我为什么这么说了,你知道这些怪题的正确答案吗?让我们现在开始吧。1、为什么“false==[]”和“false==![]”都返回true?朋友们,不要惊讶,这确实是正确答案。一旦我们了解了相等比较和恒等式,我们就可以完全理解它的全部内容。console.log(false==[])//trueconsole.log(false==![])//true让我简要解释一下它是如何工作的。当我们遇到一个布尔值要与一个对象进行比较时,会将这两个值转换为数字进行最后的比较。所以它经历了这些步骤。//1.将false转换为数字以获得0//2.将[]转换为数字以获得0//3."0==0"返回trueconsole.log(false==[])//true//1.执行"![]"的结果是false//2.false==false返回trueconsole.log(false==![])//true2.为什么"[]==![]"返回true?“1==!1”的结果是什么?'fatfish'==!'fatfish'返回什么?为什么空数组如此特别?//1."![]"执行的结果为false//2.接下来比较"[]==false"//3.将[]转换为数字得到0//4.将false转换为anumbertoget0//5."0==0"Returnstrueconsole.log([]==![])朋友们,请用"==="代替"==",它会让你的工作变得轻松A很多,否则你可能会做噩梦。3、关于奇怪的“trycatch”,请大家思考一下。getName返回你的好朋友fatfish还是我们的好朋友medium?constgetName=()=>{try{return'fatfish'}finally{return'medium'}}getName()//?我想你猜对了,答案是“fatfish”。不,这不对!答案是“中等”。这是因为在“try....catch....finally”语句中,无论是否抛出异常,finally子句都会被执行。另外,如果抛出异常,即使没有catch子句处理异常,finally子句中的语句也会被执行。4.关于箭头功能?是的,问题很简单,你会看到fatfish被打印出来了。constfn=()=>'fatfish'console.log(fn())//fatfish但我想让你试着回答这段代码会输出什么?constfn=()console.log(fn())//?'{}'是最终结果吗?不幸的是,这不是我们想象的那样。Undefined是最后的赢家。由于“{}”是fn函数的封闭块,因此它等效于以下代码。constfn=()={}console.log(fn())//理解5.为什么JSON.stringify('fatfish')!=='肥鱼'?name1会等于name2吗?constname1=JSON.stringify('fatfish')constname2='fatfish'console.log(name1===name2)//?我真的很困惑,为什么name1不等于name2?constname1=JSON.stringify('fatfish')//=>'"fatfish"'constname2='fatfish'console.log(name1===name2)//'"fatfish"'==='fatfish'=>false小心使用JSON.stringify与字符串进行比较,这会给您带来麻烦。最后,感谢您的阅读,期待您的关注,您将阅读到我们推送的更多优质文章。