我一直認爲JavaScript源代碼中的所有空格(空格,製表符,換行符)都是「相等的」,即它們都有效地區分了諸如標識符,關鍵字,運算符等語言元素JavaScript源代碼中的換行符或空格/製表符有所不同? (甚至在評論中!?)
但是,我注意到了新行與空格或製表符之間的奇怪差異。 即使在評論裏面!
該工程確定:
var bla = function() { alert('hello') }
bla();
這也適用(函數定義和函數調用,但別無分號之間換行符):(分號收盤之間}字符和bla(下)函數調用)
var bla = function() { alert('hello') };bla();
然而,這並不工作:(無差異是否只是一個空格或製表符,或多次,或無)
var bla = function() { alert('hello') } bla();
它變得更加陌生。
這不起作用或者:
var bla = function() { alert('hello') } /* ; */ bla();
(含有空格,製表符和分號隔開評論)但這:(含註釋換行符)
var bla = function() { alert('hello') }/*
*/bla();
直播的jsfiddle演示:
- line break (OK)
- semicolon (OK)
- space or tab (not OK)
- comment containing space, tab and semicolon (not OK)
- comment containing line break (OK!)
這是在JavaScript中的錯誤,還是我失去了一些東西?
[Here's](http://coding.smashingmagazine.com/2011/05/30/10-oddities-and-secrets-about-javascript/)[some](http://www.slideshare.net/ pigulla/javascript-wtfs-8148743)[more ...](http://stackoverflow.com/questions/1995113/strangest-language-feature)。如果你寫[好Javascript](http://javascript.crockford.com/),你會忍受更少的痛苦。 – tjameson