你真的會用JS寫Hello World麼?

自古,三百六十行,每一行入行的時候都有個儀式。現現在編程這個行當,也約定俗成出了一個入行儀式,就是選你將要使用的編程語言,寫段代碼輸出hello world!,這片文章講的就是這麼個事——寫個函數輸出hello world,請真的不要以爲很簡單。python

先立一個flag

軟件開發這個行業裏面,有這麼一句挺牛逼的話:「人生苦短,我用Python」,雖然Python我會用,也確實發自心裏地以爲,在言簡意賅這條路上,它配得上這句話。但今天我就想用JavaScriptpython叫叫板,比比更「」。問題只有一個:請使用JavaScript語言編寫一個函數,返回hello world!編程

可是我有些個附加條件,嘿嘿嘿數組

題目 1. 每行代碼不超過3個字符,總行數不超過9行

我先來作個示範,先拋開這條的附加條件,實現起來那就太簡單了瀏覽器

function f(){
    return "hello world!"
}
複製代碼

OK, 而後在控制檯用console.log(f())打印就能夠看到hello world!了。安全

當加上這個附加條件,傳統的函數定義方式顯然行不通了。bash

固然如今,ES6已經至關普及,能想到箭頭函數應在情理之中。其次就是一行字符串如何寫成多行,這也應該是編程基礎,不繞彎子了,直接上代碼:app

f=(
)=>
"h\ el\ lo\ w\ or\ ld\ !"
複製代碼

涉及的JavaScript知識點:箭頭函數字符串換行編程語言

題目 2. 每行代碼不超過2個字符,總行數不超過30行

每行兩個字符,你是否是連函數都不會定義了,反正箭頭函數是行不通了 總行數不超過30行,有點殘忍,算了40行也行吧函數

若是隻出題目和貼答案,對於各位看官來講,這也只能算是奇技淫巧。因此本着閱有所得得出發點,我仍是簡略剖析下個人思路,但願能給你些啓發:ui

  1. 在每行兩個字符的限時下,考慮到字符串換行符\的存在,所要返回的hello world!字符串仍是能夠輸出的,只不過多些幾行的事,問題不大。
  2. 基於第一步中的方法,在不考慮總行數限制的狀況下,其實什麼字符串都是能夠分拆成多行寫的。但每行兩個字符的限制,是把函數建立的生門堵死了。
  3. 想到JavaScript中一塊兒皆對象,不一樣類型的對象都有些許內置的屬性和方法,與此同時,最精妙絕倫的是,函數的調用除了用.符號外,還能夠用數組的方式,便可以在數組符號[]中,寫方法名的字符串進行方法的調用。可以使用的方法,僅供參考:''.trim()''.slice()[].join()
  4. 如此咱們即可用些內置的函數,來代替建立新函數。可想而知,在每行兩個字符的限制下,不管是箭頭函數,仍是function()什麼的,都顯得太過無力了。
  5. 你覺得到此爲止,問題就解決了麼?不,你會立馬遇到另外一個問題——每行兩個字符限制下,調用函數時怎麼傳參? 我只能說,ES6中有個好東西——帶標籤的模板字符串

不說啥了,看代碼吧

f=
''
[
'\ t\ r\ i\ m'
][
'\ b\ i\ n\ d'
]`
H\
e\
l\
l\
o\
,\
 \
w\
o\
r\
l\
d!
`
複製代碼

涉及的JavaScript知識點:字符串換行trim()join()bind()模板字符串

激不激動,刺不刺激。

其實還不夠,我是個有時間,就想把事情作到極致的人

握緊方向盤,繫好安全帶,咱們繼續

題目 3. 每行代碼不超過1個字符,總行數不超過120行

有沒有世界觀快要崩塌了,是否是開始以爲,本身歷來沒學過真的JavaScript。 有沒有不只函數不會建立使用了,沒有字符串換行符,是否是連字符串都不會寫了。

好了,言歸正傳,

若是你想挑戰一下本身,那麼就請先不要繼續往下閱讀,直接在瀏覽器的Console中嘗試一下。

[
,
j
,
,
o
,
,
i
,
,
n
,
,
b
,
,
d
,
,
s
,
,
p
,
,
l
,
,
t
]
=
`
j
o
i
n
b
d
s
p
l
t
`
f
=
[
]
[
j
+
o
+
i
+
n
]
[
b
+
i
+
n
+
d
]
(
`
H
e
l
l
o
,
 
w
o
r
l
d
!
`
[
s
+
p
+
l
+
i
+
t
]
`
`
,
[
]
+
[
]
)
複製代碼

在問題2時,已較爲詳細的分析了思路,問題3問題難度雖然加大,但思路基本不變,這裏爲了便於理解,僅彙總一下涉及到的知識點:

  1. 模板字符串,能夠自由換行,但換行處會有一個換行符\n
  2. 解構賦值,字符串能夠當作是單個字符組成的數組,因爲數組的定義能夠換行,經過將模板字符串解構賦值給數組,即可得到初始化爲單個字符的變量。
  3. 一些字符串和數組的內置方法:join()splite()
  4. 改變函數執行上下文的方法:bind(),同時可複習與apply()call()的區別和聯繫。
  5. 這或許算是一條奇技淫巧:[]+[]表示空字符''

其實我就一個想法,看過以後不要以爲這是篇講述什麼奇技淫巧的文章,假若能幫你回顧複習了些JavaScript的基礎知識,便就善莫大焉了。

相關文章
相關標籤/搜索