草莓和熊熊想換個地方,今天打算去另外一間咖啡廳上課,發現店內 Wi-Fi 的密碼很不尋常。
「熊熊,這間店是不是沒 Wi-Fi 呀?」
「不太可能吧,去問看看好了~」
草莓跑去櫃台問店員。
「你好~請問這裡的 Wi-Fi 密碼是多少呢?」
「密碼的話在門口旁邊的黑板上喔!」
熊熊和草莓兩人原本想在黑板上找到 Wi-Fi 密碼是多少,卻只看到一段程式碼。
var coffeeShop = {
hint1: 'rip',
hint2: [...'avaj'].reverse().join(''),
hint3: 'sc',
request() {
return ` Wi-Fi 密碼是:${this.hint2}${this.hint3}${this.hint1}t`
}
}
coffeeShop.request();
「我好慘啊~我只是想喝個咖啡而已,沒想到大家都對恐龍這麼不友善嗚嗚,我明明是一隻好恐龍」草莓難過地說。
「痾 ... 草莓先不要難過啦,這沒有很難啦,而且你不是最近有學了點程式,應該可以解出來啦!」熊熊說。
「讓我看看~」
草莓定睛仔細看了黑板上所寫的程式碼。
「草莓,太近了...」
「好像有點難呀!而且有沒看過的東西出現了~」莓頭一皺。
「你先說說看你能理解的部分吧草莓~」
「我大概知道 hint1 那幾個變數的意思,也知道 request 的一個方法,當我們去呼叫它的時候就會把密碼回傳回來,可是 hint2 的部分就看不太懂了。」
「沒關係,那我們就來獨立看看這段。」
[...'avaj'].reverse().join('')
「首先你看到了一個陣列,這裡的 ... 是特殊語法,它叫做展開運算子 (spread operator),如同字面意義所說,經過展開之後會變成這樣。」
['a', 'v', 'a', 'j']
「喔~」草莓說。
「那你知道 reverse 是麼意思嗎草莓?」
「我知道,是反轉的意思~」
「沒錯,reverse 是 JavaScript 中內建的一個方法,使用之後的結果就跟你說的反轉是同樣的意思。」
['j', 'a', 'v', 'a']
「好像越來越接近正確答案了~」草莓很開心地說。
「最後這個 join(''),可以把陣列裡頭的每個元素串接起來,回傳一個字串,所以結果會是這樣。」
'java'
「哇!我應該知道 Wi-Fi 密碼是什麼了,不過 return 裡出現了一些奇怪的東西可以請熊熊順便解釋一下嗎?」
` Wi-Fi 密碼是:${this.hint2}${this.hint3}${this.hint1}t`
「這個語法叫做 template literal,你想想看,如果我們想要把很多變數串在一起,傳統上我們可能需要用加號一直串起來,寫越多就會越難閱讀,現在透過 template literal,我們就只需要幾個簡單的錢字號讓回傳值變得很容易閱讀,至於 this 的部分,它是一個比較不好理解的概念,我們之後會再開一個進階的主題介紹它,可以暫時先把 this 理解成 coffeeShop 這個變數~」
「了解~所以密碼好像呼之欲出了耶!」
'Wi-Fi 密碼是: javascript'
「搞了半天,原來密碼遠在天邊近在眼前」草莓說。
「javascript 也是生活的一部分啊~」熊熊跟著說。
明日待續~