跟著開發(fā)者的腳步,JavaScript 已經(jīng)成為互聯(lián)網(wǎng)領(lǐng)域最為流行的語言之一。官方提供的特性早已滿足不了高級開發(fā)者的需求,于是在很長一段時間里,各種第三方庫如雨后春筍般冒了出來。其中大部分都是用來解決 JavaScript 在不同瀏覽器之間的兼容性問題。歷時多年,這個問題在不斷被解決的過程中,一個奇怪的特性 %x 便經(jīng)常在前端開發(fā)者的代碼里出現(xiàn)。
造成這個特性出現(xiàn)的原因是因為在一些瀏覽器里,當(dāng) JavaScript 的字符串格式無法被正確解析時,瀏覽器會去查詢字符串格式是否符合URL Percent-encoding。%x
中的x
代表一個 ASCII 碼的十六進(jìn)制數(shù)。比如下面這個例子:
console.log("你好%0A世界"); // 輸出 "你好\n世界"
這里的字符串 "你好%0A世界" 中的 "%0A" 表示換行 (\n) 的 ASCII 碼,因為 JavaScript 的字符串前面沒有加上use strict
,所以它允許字符串中出現(xiàn)一些奇怪的字符。但是這并不是一個好習(xí)慣。對于嚴(yán)謹(jǐn)?shù)拇a編寫來說,一定要避免這種習(xí)慣。
另外還有一件事情就是,如果這種特性出現(xiàn)在了 CSS 中,就會有一些十分意外的后果。比如這個例子:
div { margin-top: 1%; /* something went wrong */ }
這里我們想設(shè)置一個 `div` 的 `margin-top` 為 `1%`,但是瀏覽器會認(rèn)為這個 `%1` 是一個十六進(jìn)制編碼,于是它會在這個 CSS 文件里尋找 `%1` 所表示的 ASCII 碼的十六進(jìn)制對應(yīng)的字符。最后的結(jié)果就是這個 `div` 的上邊距被調(diào)整到了一個很奇怪的位置。
總之,對于這種特性,我們必須認(rèn)真對待。在編寫 JavaScript 時不應(yīng)該使用這種奇怪的特性。如果不得不使用,也要把它們當(dāng)作異常處理。在編寫 CSS 的時候也要十分小心,盡量避免這種錯誤的操作發(fā)生。尊重 JavaScript 和 CSS 的語法規(guī)范是我們編寫高質(zhì)量代碼的第一步。