2012-04-24 54 views
0

我遇到了某人的舊代碼,其變量標識爲:@ user_id @,@ reference_id @等等。維基百科說:「在某些JavaScript實現中,at符號(@)可以用於標識符中......」在JS實現中這是起作用的嗎?我無法讓它工作。以「@」開頭的JS變量

+2

你舒爾,這不是一個產生的評論,解釋有關某一功能的東西(的功能,參數)? – 2012-04-24 18:58:25

+4

他們有可能將這些令牌替換爲服務器端。 – simshaun 2012-04-24 18:58:57

+1

即使它在一些隨機JS引擎中工作,也無所謂,因爲它在大多數情況下都不起作用。不要這樣做。 – 2012-04-24 18:59:13

回答

6

這是完全正確的:

var π = Math.PI; 

這似乎並非是有效的:如果你感到無聊,想

var $yourName = "Jamund"; 

var @yourName = "Jamund"; 

這工作雖然學習所有的血淋淋的細節: http://mathiasbynens.be/notes/javascript-identifiers

至於你的具體問題,是的,它可能是在評論中(JavaDoc在其評論中使用@,有時它的風格已被用在JS評論中),或者它意味着被處理並取代服務器端。

6

第7.6章的ECMA-262, 5.1 edition定義了標識符是什麼。由於@不允許,所以即使某些瀏覽器可能接受它,也不應該使用它。如果可能的話,您應該始終爭取在所有瀏覽器中實現最廣泛的兼容性。在標識符中不使用@不應以任何方式阻礙您。

IdentifierName :: 
    IdentifierStart 
    IdentifierName IdentifierPart 

IdentifierStart :: 
    UnicodeLetter 
    $ 
    _ 
    \ UnicodeEscapeSequence 

IdentifierPart :: 
    IdentifierStart 
    UnicodeCombiningMark 
    UnicodeDigit 
    UnicodeConnectorPunctuation 
    <ZWNJ> 
    <ZWJ> 
0

π是希臘語中使用的標準希臘字符,因此可以用於變量名。規則是您可以使用$ _或除JavaScript關鍵字以外的任何單詞字符。但是,如果您使用訪問者,則可以使用包含空字符串的禁止關鍵字:var forbidden ={}; forbidden[""]="hello";甚至可以在全局對象上執行此操作:window['@weird name for a variable'] = "There are very few good reasons to do this!!",但僅僅因爲您可以不一定意味着您應該這樣做!以這種方式命名的變量與任何其他變量相同,唯一的限制是必須使用方括號和字符串才能訪問這些值。

2

單個@通常是一個JSDoc參數(如果它在註釋塊中)。用@包裝這個詞聽起來像是一個自定義模板功能。但名稱前面有@@通常是本地符號。我不相信你實際上可以在代碼中使用它們,但是它們通常在文檔中被引用。

E.g.Symbol.iterator被稱爲@@iterator,如:

  • Array.prototype[@@iterator]()
  • TypedArray.prototype[@@iterator]()
  • String.prototype[@@iterator]()
  • Map.prototype[@@iterator]()
  • Set.prototype[@@iterator]()

雖然在代碼中你會用它作爲這樣的:

var myArray = [1, 2, 3, 4]; 
var it = myArray[Symbol.iterator](); 
console.log(it.next().value); // 1 
console.log(it.next().value); // 2 

你也可以看到引用:

  • @@match - RegExp.prototype[@@match]()
  • @@replace - RegExp.prototype[@@replace]()
  • @@split - RegExp.prototype[@@split]()
  • @@search - RegExp.prototype[@@search]()
  • @@species - Map[@@species]Set[@@species]
  • @@toPrimitive - Date.prototype[@@toPrimitive](hint)Symbol.prototype[@@toPrimitive]()
  • @@unscopables - Array.prototype[@@unscopables]