之前寫Javascript,無意中發現左一個唔小心用左duck typing 而做成嘅bug。
Context
有一個function,take一個array,之後check個array有冇某一個element1
2
3const hasApple = (myFridge) => {
return myFridge.includes("apple");
}
個function好straight forward,hasApple(['orange'])
return false, 而hasApple(['apple'])
return true。
但由於Javascript係冇type checking,programmer可以pass唔係array嘅野入去。如果佢咁岩pass一個string咁岩有”apple”係sub string就瀨野。因為String都有includes()
E個function,如果string入面有特定嘅sub string就會return true。
所以hasApple('pineapple')
就會瀨左野,無端端return true。
Solution
其實個solution好簡單,check一check pass入黎係咪array就得
1 | const hasApple = (myFridge) => { |
個難度係喺出事前就identify到個bug,除非真係熟曬D javascript built in functions。E個算係dynamic typing with duck typing langauge嘅弱點。