越自信,Bug 越多
大家好,我是魚皮。
標(biāo)題是說給自己聽的,最近,又因?yàn)槲业淖孕?,搞出了一個(gè)影響項(xiàng)目正常運(yùn)行的 Bug。
事情是這樣的,最近在搞一個(gè)新項(xiàng)目,之前基本都是我和另外一個(gè)前端朋友在開發(fā)。后來呢,我又拉了幾位朋友加入進(jìn)來,結(jié)果他們都反饋說代碼在本地裝不上依賴,導(dǎo)致運(yùn)行不起來。
于是,有一位朋友就修改了項(xiàng)目中某一個(gè)依賴的版本號(hào),然后依賴就安裝成功了。結(jié)果運(yùn)行項(xiàng)目時(shí),出現(xiàn)了報(bào)錯(cuò):試圖從 undefined 未定義變量中獲取屬性。

代碼如下:
//?e.props?可能為?undefined
e.props.searchValue
這種錯(cuò)誤其實(shí)是很低級(jí)的,有點(diǎn)類似 Java 中的 NPE(空指針異常)。于是估計(jì)這位朋友也是和我一樣的心態(tài),覺得這是個(gè)小問題,就直接加了個(gè)可選鏈操作符:
e?.props?.searchValue
這下代碼不報(bào)錯(cuò)了,愉快提交,我也是想都沒想就給他通過合并了,大伙都因?yàn)榻鉀Q了問題,老開心了。

雖然后來我才發(fā)現(xiàn)是因?yàn)樽约和颂峤?yarn.lock 文件到代碼倉庫中,導(dǎo)致他們下載的依賴版本號(hào)和我本地不同,所以才出現(xiàn)了我本地能運(yùn)行,他們卻運(yùn)行不了的情況。
不過既然現(xiàn)在項(xiàng)目已經(jīng)能跑了,就不管了吧,接著開心。

結(jié)果,今天我自己要使用系統(tǒng)時(shí),才發(fā)現(xiàn)這個(gè)改過代碼的功能怎么突然不能用了?。?/p>
排查后才發(fā)現(xiàn),原來之前升級(jí)版本后,組件的函數(shù)參數(shù)發(fā)生了改變,通過之前的代碼再也獲取不到需要的屬性值了。雖然通過加可選鏈操作符可以防止報(bào)錯(cuò),但實(shí)際上,這行代碼邏輯已經(jīng)不對了,毫無意義。
對啊,我早該想到,為什么同樣的代碼,之前沒因?yàn)?undefined 報(bào)錯(cuò),升級(jí)后報(bào)錯(cuò)了呢?既然我們沒改變,那變的肯定是第三方依賴啊!
所以還是太自信了,很多時(shí)候?qū)е?Bug 產(chǎn)生的原因就是 “我以為的就是我以為的”。

最后總結(jié)兩點(diǎn):
能不升版本,就別升(代碼能運(yùn)行,就別去動(dòng)他)。 升級(jí)版本后,一定要做充分的測試,不要盲目自信(代碼能跑,不一定系統(tǒng)就可用)。
希望大家能記在心里,千萬別小看它們。我現(xiàn)在發(fā)現(xiàn),工作中往往越自信,就越打臉。
肝項(xiàng)目到現(xiàn)在才抽空寫了篇文章,明天又得上班了,這小 Bug 值一個(gè)點(diǎn)贊么?

往期推薦
