前端口试题No.1
满意(a==1a==2a==3)为true
此日给众人讲一路我特别恼火的题,即是a==1a==2a==3为true,我第一次看到这道题的时分,我是特别活力特别恼火的,我感触这个口试官即是想来刁难我,你a要不就即是一,要不即是二,要不即是三,何如或许同时即是一即是二即是三呢?
这不是故意刁难我吗?不过,活力之余,我想了一下,原来想要完成也不难哈,此日我就给众人讲一下我完成的三种办法:
处理办法目标隐式更动挪用toString哄骗了目标的一个隐式更动的时分会挪用的toString办法,以是,咱们把a界说成一个目标,尔后它身上有一个i属性,i属性的一个原始值是1,尔后它身上有个toString办法,咱们屡屡都返回一下,return的i再++。尔后咱们console.log一下,看能不能到达咱们想要的成绩,谜底是true,为甚么呢?
由于第一次双等号的时分,a它是一个目标,它会实行一下隐式更动,隐式更动的话就会挪用目标上的一个toString办法。那第一次toString办法return的是甚么东西?是一个a.i++,咱们都领会,++放在背面的话,那末return的时分确定是return前方的这个东西以后,才会实行加1,是不是?
以是说第一次返回的是1,尔后第二次的时分以此类推即是2,第三次即是3,到达咱们想要的成绩。
01数组隐式更动挪用join目标隐式更动是会挪用toString,那数组它隐式更动的时分是会直接也许直接挪用join办法,
以是,咱们把a界说成一个数组[1,2,3],并改写它的join办法,第一次双即是号的时分,由于双等号是会实行隐式更动,隐式转折就会挪用它的一个join办法,那join办法被我改为了shift办法.
shift办法是一个甚么东西?它即是返回一个数组的第一个元素,而且会改动元素组自己:把它元素组的第一个元素给清除,以是说第一次双等号以后,就会返回1,
尔后元素组就会清除第一个元素,变为[2,3],尔后第二次双等号的时分,就会返回2,第三次的时分a即是3,以是说这到达了咱们想要的成绩。
02哄骗defineProperty咱们界说一个变量val即是1,咱们行使一下Object.defineProperty,为甚么这边是global?由于note.js处境内部的全面目标即是global,若是在涉猎器处境里的话即是window。
尔后界说一个a变量,尔后猎取这个a变量的时分,就return一下val++。console.log的后果为true,为甚么?
能够看一下a,第一次双等号对比1,那确定是要猎取一下a才干去对比1,以是会挪用它的get办法,那get办法内部就会return一个val++,++在背面的话即是先return再加,
以是说,第一次即是true,尔后第二次的时分,val曾经是2了,对比以后再为true,第三次val为3,再对比后为true,到达了咱们想要的成绩。
03预览时标签不成点收录于合集#个