作者:fatfish译者:前端小智来源:medium有梦想,有干货,微信搜索【大千世界】关注这个清晨还在洗碗的刷碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。前言最近,我被问到一些奇怪的面试问题。它们不同于一般的问题:这些面试题看起来很简单,但是考验你对JavaScript的透彻理解。你能答对几个?x!==x可以是真的吗?请问打印大千世界constx=x的值是多少?//??if(x!==x){console.log('Greatmovetotheworld')}奇怪,有没有不等于自己的值?在JS中确实有一个值NaN不等于任何东西,甚至不等于它自己。constx=NaNif(x!==x){console.log('伟大的走向世界')}console.log(NaN===NaN)//falseconsole.log(x!==x)//真正的控制台。log(Number.isNaN(x))//true(!isNaN(x)&&x!==x)可以是真的吗?现在我们排除了NaN,那么什么值不能等于它自己呢?常数x=?if(!isNaN(x)&&x!==x){console.log('hellofatfish')}viewrawq2-1.jshostedwithmaybeyouknowobject.Defineproperty,它可以帮助我们解决这个问题。window.x=0Object.defineProperty(window,'x',{get(){returnMath.random()}})console.log(x)//0.12259077808826002console.log(x===x)//falseconsole.log(x!==x)//true3.如何让x===x+1可能并不容易,但是只要懂JS,就会知道Number.MAX_SAFE_INTEGER,也就是常量表示JavaScript中最大的最大安全整数(2^53-1)。因此,我们可以将Number.MAX_SAFE_INTEGER分配给x:constx=Number.MAX_SAFE_INTEGER+1if(x===x+1){console.log('Greatmovetotheworld')}4.x>x可以是真的吗?不想看了,这是什么垃圾问题?常数x=?if(x>x){console.log('hellofatfish')}虽然看起来不太可能,但一个值怎么可能比它自己大呢?但是,我们可以使用Symbol.toPrimitive函数来完成此操作。constx={value:1,[Symbol.toPrimitive](){console.log('x',this.value)return--this.value}}if(x>x){console.log('大动作这个世界')}真是奇(垃圾)奇(垃圾)。5.typeofx==='undefined'&&x.length>0constx=?if(typeofx==='undefined'&&x.length>0){console.log('Greatmovetotheworld')}我不能承认,JS是一门神奇的语言。除了undefined本身之外还有什么值会使typeofx===undefined为真?答案是document.all,代表页面上的所有元素。constx=document.allif(typeofx==='undefined'&&x.length>0){console.log('伟大的走向世界')}console.log(x)console.log(typeofx)安慰。log(x===undefined)最后,大家遇到了什么奇葩面试题,欢迎留言补充!!编辑过程中可能存在的BUG无法实时获知。之后为了解决这些bug,花费了大量的时间在日志调试上。顺便推荐一个好用的BUG监控工具Fundebug。原文:https://javascript.plnenglish...交流有梦想,有干货,微信搜索【伟大的走向世界】关注这位凌晨还在洗碗的洗碗智慧。本文已收录到GitHubhttps://github.com/qq449245884/xiaozhi,里面有完整的测试站点、资料和我的一线厂商访谈系列文章。
