僅用六種字元來完成Hello World,你能做到嗎?
阿新 • • 發佈:2020-11-05
Hello World 對於每一個開發者來說都不陌生,因為在我們學習任何一個語言或框架的時候,都會有一個Hello World的案例來幫助我們快速入門。
如果我們使用JavaScript來輸出Hello World的話,可以這樣寫:
```javascript
alert("Hello World");
```
放入HTML:
```html
```
在瀏覽器中開啟就可以如下情況輸出Hello World了:
![](https://img2020.cnblogs.com/other/626506/202011/626506-20201105113104799-1811237800.png)
## 挑戰:僅用六種字元來編寫JavaScripte
上面我們在JavaScript中實現Hello World的時候,除去HTML相關的標籤和屬性,上面的實現語句`alert("Hello World");`一共使用了13個字元,那麼有沒有辦法用更少的字元來實現一樣的功能呢?今天我們就來挑戰一下:**有沒有辦法僅使用6個字元來編寫JavaScripte程式,以實現Hello World的輸出?**
...
...
...
先思考一下,有思路沒?沒思路的話,下面有提示...
...
...
...
...
...
...
...
**提示**:使用這六個字元:`(`,`)`,`+`,`[`,`]`,`!`
...
...
...
...
...
...
...
再思考一下,有思路沒?沒思路的話,下面有答案和解析...
...
...
...
...
...
...
...
**答案**:
```html
```
什麼?你不信這可以輸出Hello World?那麼你可以將其複製下來,放到HTML檔案中,再開啟試試吧!
## 為什麼?
為什麼我們可以僅使用這6個字元來編寫這些奇奇怪怪的JavaScript程式碼?這完全是由於JavaScript獨特的型別系統和轉換機制。
上面的6個字元可以分為三類:
- `[`,`]`:用於建立陣列
- `!`,`+`:對陣列執行一些操作
- `(`,`)`:對操作進行分組
**基礎原理**
- `[]`可以用來建立陣列,而`![]`則可以返回`false`
- 預定義的規則:`2 + true`,會轉化為`2 + 1`,最後得到`3`
- 預定義的規則:`2 + "2"`,會轉化為`2 + "2"`,最後得到`"22"`
**提取字母**:`![]`可以獲取`false`,`![] + []`那可以獲取`"false"`字串,那麼我們就可以通過下標獲取其中的字母,比如:`(![] + [])[1]`可以獲取`false`字串中第二位的字母`a`
**提取數字**:`![]`可以獲取`false`,由於`+false`可以獲取`0`,所以`+![]`就可以獲取到`0`;由於`+true`可以獲取`1`,所以`+!![]`就可以獲取到`1`。這樣依靠運算就可以獲取更多其他數字
好了,有了這些基礎基礎知識之後,對於這個神奇的答案知道是怎麼來的了吧?
> 本文首發:[僅用六個字元來完成Hello World,你能做到嗎?](http://blog.didispace.com/javascript-6-char-hello-world/),轉載請註明該文章連結
## 參考資料
- https://www.cnblogs.com/lzkwin/p/12131718.html
- http://www.jsfuck.com/
> 歡迎關注我的公眾號:程式猿DD,獲得獨家整理的免費學習資源助力你的Java學習之路!另每週贈書不停哦~