iT邦幫忙

第 12 屆 iThome 鐵人賽

DAY 28
0

草莓和熊熊想換個地方,今天打算去另外一間咖啡廳上課,發現店內 Wi-Fi 的密碼很不尋常。

img

「熊熊,這間店是不是沒 Wi-Fi 呀?」

「不太可能吧,去問看看好了~」

草莓跑去櫃台問店員。

「你好~請問這裡的 Wi-Fi 密碼是多少呢?」

「密碼的話在門口旁邊的黑板上喔!」

img


熊熊和草莓兩人原本想在黑板上找到 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();

「我好慘啊~我只是想喝個咖啡而已,沒想到大家都對恐龍這麼不友善嗚嗚,我明明是一隻好恐龍」草莓難過地說。

img

「痾 ... 草莓先不要難過啦,這沒有很難啦,而且你不是最近有學了點程式,應該可以解出來啦!」熊熊說。


「讓我看看~」

草莓定睛仔細看了黑板上所寫的程式碼。

img

「草莓,太近了...」


img

「好像有點難呀!而且有沒看過的東西出現了~」莓頭一皺。


「你先說說看你能理解的部分吧草莓~」

「我大概知道 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 也是生活的一部分啊~」熊熊跟著說。


img

明日待續~


上一篇
Day27
下一篇
Day29
系列文
StrawBeary 網頁工程三十天30
圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

尚未有邦友留言

立即登入留言