De facto standard 世界上不可思議的事實(shí)標(biāo)準(zhǔn)
前些天IEBlog中提到實(shí)現(xiàn)互通并不是只靠標(biāo)準(zhǔn)就行,其中舉出了一些關(guān)于事實(shí)上的標(biāo)準(zhǔn)的考慮——所謂“事實(shí)上的標(biāo)準(zhǔn)”,也就是并非標(biāo)準(zhǔn),但大家都遵循著它去做事情的那么一種東西。
這些事實(shí)上的標(biāo)準(zhǔn)(也寫(xiě)作“De facto standard”)往往是在某一種事物還沒(méi)有標(biāo)準(zhǔn)的時(shí)候由當(dāng)事的各方相互妥協(xié)而形成的,——有趣的是,作為妥協(xié)的結(jié)果,這些“事實(shí)上的標(biāo)準(zhǔn)”自身往往和其它的東西并不協(xié)調(diào);而真正被稱作“標(biāo)準(zhǔn)”的東西往往是在發(fā)生了很多事情之后才產(chǎn)生的,所以幾乎任何地方都有“事實(shí)上的標(biāo)準(zhǔn)”和“標(biāo)準(zhǔn)”有些格格不入的感覺(jué)。
說(shuō)了半天廢話,該說(shuō)正題了:
在本文開(kāi)頭的那個(gè)鏈接中的博文里,提到了一個(gè)關(guān)于正則表達(dá)式的語(yǔ)法問(wèn)題:
像是“/]/”這樣的形式,由于“]”本身是“匹配這些字符中的任意一個(gè)”的語(yǔ)法中的一部分,故ECMAScript標(biāo)準(zhǔn)中把這樣的形式標(biāo)記為“無(wú)效的表達(dá)式”——但是同時(shí)這樣的用法由于構(gòu)成簡(jiǎn)單,理解起來(lái)也并不容易產(chǎn)生歧義,所以實(shí)際上在大部分瀏覽器中這么用都是被認(rèn)為“有效”的。
當(dāng)IE9的開(kāi)發(fā)團(tuán)隊(duì)剛開(kāi)始測(cè)試他們的新JavaScript引擎“Chakra”的時(shí)候,它們發(fā)現(xiàn)有一些本來(lái)運(yùn)行得很好的JavaScript代碼在“Chakra”中不能運(yùn)行,其中一個(gè)原因就是最初“Chakra”是按照ECMAScript標(biāo)準(zhǔn)來(lái)實(shí)現(xiàn)的,而舊代碼中包含很多像是這樣的在標(biāo)準(zhǔn)中無(wú)效的東西——若要兼容,并且“互通”,“Chakra”需要做的就不只是和標(biāo)準(zhǔn)一致,還要能認(rèn)可這樣的表達(dá)式。
這是“實(shí)現(xiàn)互通并不是只靠標(biāo)準(zhǔn)就行”的一個(gè)好例子。
除了這個(gè)以外,JavaScript中一些其它的事實(shí)標(biāo)準(zhǔn),比方說(shuō):
在一個(gè)字符串中如果在反斜線“\”之后輸入一個(gè)換行標(biāo)記,無(wú)論是[LF](\n實(shí)際代表的含義),還是[CR](\r實(shí)際代表的含義),還是[CR][LF](\r\n實(shí)際代表的含義),都會(huì)和反斜線一起完全被忽略掉——說(shuō)“忽略掉”還不夠準(zhǔn)確,也許應(yīng)該說(shuō)“這種組合會(huì)被認(rèn)為是把一個(gè)字符串拆在多行代碼里”之類的。
如果這樣說(shuō)還是覺(jué)得不好理解(甚至是莫名其妙)的話,通過(guò)一些代碼例子就應(yīng)該比較容易理解了。
比方說(shuō),這樣的代碼:
var s = "This is an\
one line string.";
其實(shí)是和
var s = "This is an" +
" one line string.";
等價(jià)的。
而如果寫(xiě)成
var s = "This is an
one line string."
就會(huì)產(chǎn)生一個(gè)語(yǔ)法錯(cuò)誤,原因是“未結(jié)束的字符串”。
剛開(kāi)始的時(shí)候它只是在IE中使用的JScript引擎獨(dú)有的一個(gè)特性,但是現(xiàn)在幾大主流瀏覽器都支持了這種寫(xiě)法,就像我剛剛提到的,它也是“事實(shí)上的標(biāo)準(zhǔn)”之一。
我很有興趣多講一些關(guān)于“事實(shí)上的標(biāo)準(zhǔn)”的事情,但是無(wú)奈這種東西實(shí)在是太多了,我只知道其中的很小一部分——而且還常常記不起來(lái),所以今天我也只能寫(xiě)到這里了,如果我再想起來(lái)什么的話也許會(huì)另外寫(xiě)篇新博文吧
相關(guān)文章
document.getElementById獲取控件對(duì)象為空的解決方法
今天寫(xiě)個(gè)網(wǎng)頁(yè),想在頁(yè)面加載onLoad時(shí),動(dòng)態(tài)顯示由后臺(tái)其他程序傳來(lái)的數(shù)據(jù)時(shí),用document.getElementById獲取控件對(duì)象總是為空。但是檢查了這個(gè)id確實(shí)是存在的。看下文的示例和解決方法2013-11-11
JavaSacript中charCodeAt()方法的使用詳解
這篇文章主要介紹了JavaSacript中charCodeAt()方法的使用詳解,是JS入門(mén)學(xué)習(xí)中的基本知識(shí),需要的朋友可以參考下2015-06-06
window.location.reload 刷新使用分析(去對(duì)話框)
這篇文章主要介紹了window.location.reload 刷新使用分析(去對(duì)話框),需要的朋友可以參考下2015-11-11
JavaScript 無(wú)符號(hào)右移運(yùn)算符
無(wú)符號(hào)右移運(yùn)算符 (>>>)是右移表達(dá)式的位,不保留符號(hào)。2009-04-04
javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解
這篇文章主要介紹了javascript實(shí)現(xiàn)用戶必須勾選協(xié)議實(shí)例講解,寫(xiě)頁(yè)面的時(shí)候經(jīng)常會(huì)用到,有感興趣的同學(xué)可以學(xué)習(xí)下2021-03-03
全選復(fù)選框JavaScript編寫(xiě)小結(jié)(附代碼)
這篇文章主要介紹了全選”復(fù)選框JavaScript編寫(xiě),分別附上html和js代碼以供大家更深刻了解,具體操作步驟大家可查看下文的詳細(xì)講解,感興趣的小伙伴們可以參考一下。2017-08-08

