哪些字符对JavaScript变量名有效?

Ric*_*ton 532 javascript character

哪些字符可用于命名JavaScript变量?

我想在这里为我的非JavaScript用户创建一个小的"扩展库"(当涉及到语言时,他们似乎都很娇气).我喜欢jQuery和Prototype都使用$美元符号,因为我使用jQuery,我正在寻找另一个好用的单字符符号.

我意识到我可以测试一些角色,但我希望能够缩小我的角色列表(考虑到未来可能与另一个流行的库集成).

Mat*_*ens 961

要引用有效的JavaScript变量名,我的文章总结了相关的规范部分:

标识符必须以$,_或者Unicode类别中的任何字符开头"大写字母(Lu)","小写字母(Ll)","标题字母(Lt)","修饰符字母(Lm)","其他字母( Lo)",或"字母编号(Nl)".

字符串的其余部分可以包含相同的字符,加上任何U + 200C零宽度非连接字符,U + 200D零宽度连接字符和Unicode类别中的字符"非间距标记(Mn)","间距组合mark(Mc)","十进制数字编号(Nd)""连接标点符号(Pc)".

我还创建了一个工具,告诉您根据ECMAScript 5.1和Unicode 6.1输入的任何字符串是否是有效的JavaScript变量名称:

JavaScript变量名称验证器


PS为了让您了解Anthony Mills的回答有多么错误:如果您要在JavaScript的单个ASCII专用正则表达式中总结所有这些规则,那么它将长达11,236个字符.这里是:

// ES5.1 / Unicode 6.1
/^(?!(?:do|if|in|for|let|new|try|var|case|else|enum|eval|false|null|this|true|void|with|break|catch|class|const|super|throw|while|yield|delete|export|import|public|return|static|switch|typeof|default|extends|finally|package|private|continue|debugger|function|arguments|interface|protected|implements|instanceof)$)[$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc][$A-Z\_a-z\xaa\xb5\xba\xc0-\xd6\xd8-\xf6\xf8-\u02c1\u02c6-\u02d1\u02e0-\u02e4\u02ec\u02ee\u0370-\u0374\u0376\u0377\u037a-\u037d\u0386\u0388-\u038a\u038c\u038e-\u03a1\u03a3-\u03f5\u03f7-\u0481\u048a-\u0527\u0531-\u0556\u0559\u0561-\u0587\u05d0-\u05ea\u05f0-\u05f2\u0620-\u064a\u066e\u066f\u0671-\u06d3\u06d5\u06e5\u06e6\u06ee\u06ef\u06fa-\u06fc\u06ff\u0710\u0712-\u072f\u074d-\u07a5\u07b1\u07ca-\u07ea\u07f4\u07f5\u07fa\u0800-\u0815\u081a\u0824\u0828\u0840-\u0858\u08a0\u08a2-\u08ac\u0904-\u0939\u093d\u0950\u0958-\u0961\u0971-\u0977\u0979-\u097f\u0985-\u098c\u098f\u0990\u0993-\u09a8\u09aa-\u09b0\u09b2\u09b6-\u09b9\u09bd\u09ce\u09dc\u09dd\u09df-\u09e1\u09f0\u09f1\u0a05-\u0a0a\u0a0f\u0a10\u0a13-\u0a28\u0a2a-\u0a30\u0a32\u0a33\u0a35\u0a36\u0a38\u0a39\u0a59-\u0a5c\u0a5e\u0a72-\u0a74\u0a85-\u0a8d\u0a8f-\u0a91\u0a93-\u0aa8\u0aaa-\u0ab0\u0ab2\u0ab3\u0ab5-\u0ab9\u0abd\u0ad0\u0ae0\u0ae1\u0b05-\u0b0c\u0b0f\u0b10\u0b13-\u0b28\u0b2a-\u0b30\u0b32\u0b33\u0b35-\u0b39\u0b3d\u0b5c\u0b5d\u0b5f-\u0b61\u0b71\u0b83\u0b85-\u0b8a\u0b8e-\u0b90\u0b92-\u0b95\u0b99\u0b9a\u0b9c\u0b9e\u0b9f\u0ba3\u0ba4\u0ba8-\u0baa\u0bae-\u0bb9\u0bd0\u0c05-\u0c0c\u0c0e-\u0c10\u0c12-\u0c28\u0c2a-\u0c33\u0c35-\u0c39\u0c3d\u0c58\u0c59\u0c60\u0c61\u0c85-\u0c8c\u0c8e-\u0c90\u0c92-\u0ca8\u0caa-\u0cb3\u0cb5-\u0cb9\u0cbd\u0cde\u0ce0\u0ce1\u0cf1\u0cf2\u0d05-\u0d0c\u0d0e-\u0d10\u0d12-\u0d3a\u0d3d\u0d4e\u0d60\u0d61\u0d7a-\u0d7f\u0d85-\u0d96\u0d9a-\u0db1\u0db3-\u0dbb\u0dbd\u0dc0-\u0dc6\u0e01-\u0e30\u0e32\u0e33\u0e40-\u0e46\u0e81\u0e82\u0e84\u0e87\u0e88\u0e8a\u0e8d\u0e94-\u0e97\u0e99-\u0e9f\u0ea1-\u0ea3\u0ea5\u0ea7\u0eaa\u0eab\u0ead-\u0eb0\u0eb2\u0eb3\u0ebd\u0ec0-\u0ec4\u0ec6\u0edc-\u0edf\u0f00\u0f40-\u0f47\u0f49-\u0f6c\u0f88-\u0f8c\u1000-\u102a\u103f\u1050-\u1055\u105a-\u105d\u1061\u1065\u1066\u106e-\u1070\u1075-\u1081\u108e\u10a0-\u10c5\u10c7\u10cd\u10d0-\u10fa\u10fc-\u1248\u124a-\u124d\u1250-\u1256\u1258\u125a-\u125d\u1260-\u1288\u128a-\u128d\u1290-\u12b0\u12b2-\u12b5\u12b8-\u12be\u12c0\u12c2-\u12c5\u12c8-\u12d6\u12d8-\u1310\u1312-\u1315\u1318-\u135a\u1380-\u138f\u13a0-\u13f4\u1401-\u166c\u166f-\u167f\u1681-\u169a\u16a0-\u16ea\u16ee-\u16f0\u1700-\u170c\u170e-\u1711\u1720-\u1731\u1740-\u1751\u1760-\u176c\u176e-\u1770\u1780-\u17b3\u17d7\u17dc\u1820-\u1877\u1880-\u18a8\u18aa\u18b0-\u18f5\u1900-\u191c\u1950-\u196d\u1970-\u1974\u1980-\u19ab\u19c1-\u19c7\u1a00-\u1a16\u1a20-\u1a54\u1aa7\u1b05-\u1b33\u1b45-\u1b4b\u1b83-\u1ba0\u1bae\u1baf\u1bba-\u1be5\u1c00-\u1c23\u1c4d-\u1c4f\u1c5a-\u1c7d\u1ce9-\u1cec\u1cee-\u1cf1\u1cf5\u1cf6\u1d00-\u1dbf\u1e00-\u1f15\u1f18-\u1f1d\u1f20-\u1f45\u1f48-\u1f4d\u1f50-\u1f57\u1f59\u1f5b\u1f5d\u1f5f-\u1f7d\u1f80-\u1fb4\u1fb6-\u1fbc\u1fbe\u1fc2-\u1fc4\u1fc6-\u1fcc\u1fd0-\u1fd3\u1fd6-\u1fdb\u1fe0-\u1fec\u1ff2-\u1ff4\u1ff6-\u1ffc\u2071\u207f\u2090-\u209c\u2102\u2107\u210a-\u2113\u2115\u2119-\u211d\u2124\u2126\u2128\u212a-\u212d\u212f-\u2139\u213c-\u213f\u2145-\u2149\u214e\u2160-\u2188\u2c00-\u2c2e\u2c30-\u2c5e\u2c60-\u2ce4\u2ceb-\u2cee\u2cf2\u2cf3\u2d00-\u2d25\u2d27\u2d2d\u2d30-\u2d67\u2d6f\u2d80-\u2d96\u2da0-\u2da6\u2da8-\u2dae\u2db0-\u2db6\u2db8-\u2dbe\u2dc0-\u2dc6\u2dc8-\u2dce\u2dd0-\u2dd6\u2dd8-\u2dde\u2e2f\u3005-\u3007\u3021-\u3029\u3031-\u3035\u3038-\u303c\u3041-\u3096\u309d-\u309f\u30a1-\u30fa\u30fc-\u30ff\u3105-\u312d\u3131-\u318e\u31a0-\u31ba\u31f0-\u31ff\u3400-\u4db5\u4e00-\u9fcc\ua000-\ua48c\ua4d0-\ua4fd\ua500-\ua60c\ua610-\ua61f\ua62a\ua62b\ua640-\ua66e\ua67f-\ua697\ua6a0-\ua6ef\ua717-\ua71f\ua722-\ua788\ua78b-\ua78e\ua790-\ua793\ua7a0-\ua7aa\ua7f8-\ua801\ua803-\ua805\ua807-\ua80a\ua80c-\ua822\ua840-\ua873\ua882-\ua8b3\ua8f2-\ua8f7\ua8fb\ua90a-\ua925\ua930-\ua946\ua960-\ua97c\ua984-\ua9b2\ua9cf\uaa00-\uaa28\uaa40-\uaa42\uaa44-\uaa4b\uaa60-\uaa76\uaa7a\uaa80-\uaaaf\uaab1\uaab5\uaab6\uaab9-\uaabd\uaac0\uaac2\uaadb-\uaadd\uaae0-\uaaea\uaaf2-\uaaf4\uab01-\uab06\uab09-\uab0e\uab11-\uab16\uab20-\uab26\uab28-\uab2e\uabc0-\uabe2\uac00-\ud7a3\ud7b0-\ud7c6\ud7cb-\ud7fb\uf900-\ufa6d\ufa70-\ufad9\ufb00-\ufb06\ufb13-\ufb17\ufb1d\ufb1f-\ufb28\ufb2a-\ufb36\ufb38-\ufb3c\ufb3e\ufb40\ufb41\ufb43\ufb44\ufb46-\ufbb1\ufbd3-\ufd3d\ufd50-\ufd8f\ufd92-\ufdc7\ufdf0-\ufdfb\ufe70-\ufe74\ufe76-\ufefc\uff21-\uff3a\uff41-\uff5a\uff66-\uffbe\uffc2-\uffc7\uffca-\uffcf\uffd2-\uffd7\uffda-\uffdc0-9\u0300-\u036f\u0483-\u0487\u0591-\u05bd\u05bf\u05c1\u05c2\u05c4\u05c5\u05c7\u0610-\u061a\u064b-\u0669\u0670\u06d6-\u06dc\u06df-\u06e4\u06e7\u06e8\u06ea-\u06ed\u06f0-\u06f9\u0711\u0730-\u074a\u07a6-\u07b0\u07c0-\u07c9\u07eb-\u07f3\u0816-\u0819\u081b-\u0823\u0825-\u0827\u0829-\u082d\u0859-\u085b\u08e4-\u08fe\u0900-\u0903\u093a-\u093c\u093e-\u094f\u0951-\u0957\u0962\u0963\u0966-\u096f\u0981-\u0983\u09bc\u09be-\u09c4\u09c7\u09c8\u09cb-\u09cd\u09d7\u09e2\u09e3\u09e6-\u09ef\u0a01-\u0a03\u0a3c\u0a3e-\u0a42\u0a47\u0a48\u0a4b-\u0a4d\u0a51\u0a66-\u0a71\u0a75\u0a81-\u0a83\u0abc\u0abe-\u0ac5\u0ac7-\u0ac9\u0acb-\u0acd\u0ae2\u0ae3\u0ae6-\u0aef\u0b01-\u0b03\u0b3c\u0b3e-\u0b44\u0b47\u0b48\u0b4b-\u0b4d\u0b56\u0b57\u0b62\u0b63\u0b66-\u0b6f\u0b82\u0bbe-\u0bc2\u0bc6-\u0bc8\u0bca-\u0bcd\u0bd7\u0be6-\u0bef\u0c01-\u0c03\u0c3e-\u0c44\u0c46-\u0c48\u0c4a-\u0c4d\u0c55\u0c56\u0c62\u0c63\u0c66-\u0c6f\u0c82\u0c83\u0cbc\u0cbe-\u0cc4\u0cc6-\u0cc8\u0cca-\u0ccd\u0cd5\u0cd6\u0ce2\u0ce3\u0ce6-\u0cef\u0d02\u0d03\u0d3e-\u0d44\u0d46-\u0d48\u0d4a-\u0d4d\u0d57\u0d62\u0d63\u0d66-\u0d6f\u0d82\u0d83\u0dca\u0dcf-\u0dd4\u0dd6\u0dd8-\u0ddf\u0df2\u0df3\u0e31\u0e34-\u0e3a\u0e47-\u0e4e\u0e50-\u0e59\u0eb1\u0eb4-\u0eb9\u0ebb\u0ebc\u0ec8-\u0ecd\u0ed0-\u0ed9\u0f18\u0f19\u0f20-\u0f29\u0f35\u0f37\u0f39\u0f3e\u0f3f\u0f71-\u0f84\u0f86\u0f87\u0f8d-\u0f97\u0f99-\u0fbc\u0fc6\u102b-\u103e\u1040-\u1049\u1056-\u1059\u105e-\u1060\u1062-\u1064\u1067-\u106d\u1071-\u1074\u1082-\u108d\u108f-\u109d\u135d-\u135f\u1712-\u1714\u1732-\u1734\u1752\u1753\u1772\u1773\u17b4-\u17d3\u17dd\u17e0-\u17e9\u180b-\u180d\u1810-\u1819\u18a9\u1920-\u192b\u1930-\u193b\u1946-\u194f\u19b0-\u19c0\u19c8\u19c9\u19d0-\u19d9\u1a17-\u1a1b\u1a55-\u1a5e\u1a60-\u1a7c\u1a7f-\u1a89\u1a90-\u1a99\u1b00-\u1b04\u1b34-\u1b44\u1b50-\u1b59\u1b6b-\u1b73\u1b80-\u1b82\u1ba1-\u1bad\u1bb0-\u1bb9\u1be6-\u1bf3\u1c24-\u1c37\u1c40-\u1c49\u1c50-\u1c59\u1cd0-\u1cd2\u1cd4-\u1ce8\u1ced\u1cf2-\u1cf4\u1dc0-\u1de6\u1dfc-\u1dff\u200c\u200d\u203f\u2040\u2054\u20d0-\u20dc\u20e1\u20e5-\u20f0\u2cef-\u2cf1\u2d7f\u2de0-\u2dff\u302a-\u302f\u3099\u309a\ua620-\ua629\ua66f\ua674-\ua67d\ua69f\ua6f0\ua6f1\ua802\ua806\ua80b\ua823-\ua827\ua880\ua881\ua8b4-\ua8c4\ua8d0-\ua8d9\ua8e0-\ua8f1\ua900-\ua909\ua926-\ua92d\ua947-\ua953\ua980-\ua983\ua9b3-\ua9c0\ua9d0-\ua9d9\uaa29-\uaa36\uaa43\uaa4c\uaa4d\uaa50-\uaa59\uaa7b\uaab0\uaab2-\uaab4\uaab7\uaab8\uaabe\uaabf\uaac1\uaaeb-\uaaef\uaaf5\uaaf6\uabe3-\uabea\uabec\uabed\uabf0-\uabf9\ufb1e\ufe00-\ufe0f\ufe20-\ufe26\ufe33\ufe34\ufe4d-\ufe4f\uff10-\uff19\uff3f]*$/
Run Code Online (Sandbox Code Playgroud)

  • 我会相信你必须花费多少时间才能产生这个. (29认同)
  • @marsbear我碰巧也写了一篇文章:http://mathiasbynens.be/notes/javascript-properties也是一个工具:http://mothereff.in/js-properties#12e34这是[相关的]我的堆栈溢出答案](http://stackoverflow.com/a/9568622/96656). (16认同)
  • @ n2liquid-GuilhermeVieira只有当你假设所有JavaScript引擎都符合100%规范时,情况并非总是如此 - 当我做这项研究时肯定不是这样.我链接的博客文章提到了我提交和修补的所有浏览器/引擎错误. (4认同)
  • 这是真的(和一个很棒的答案).然而,这并不是正确的:通过使用相似但实际上不同的字母(或使用非unicode环境不能使用的字母)来混淆代码是错误的,imo.它不会帮助编码,而是可以创建许多错误.唯一的好处是:它会让人们(痛苦地)意识到某些代码使用Unicode的可能性(并且痛苦地意识到Unicode及其不同的表示)...关于unicode:http://www.joelonsoftware.com/articles/ Unicode.html (3认同)
  • 使用[Regenerate](http://mths.be/regenerate),正则表达式可以优化为9594个字符.我创建了[一个在纯JavaScript中动态创建正则表达式的演示页面](http://mathiasbynens.be/demo/javascript-identifier-regex). (2认同)
  • 只是指出像安东尼米尔斯一样,你只回答了问题的一半,(另一半).因此,当你的回答不完整时,以名字批评他的回答是不好的形式. (2认同)

Anu*_*rag 116

根据7.6标识符名称和标识符中的ECMAScript规范,有效标识符定义为:

Identifier :: 
    IdentifierName but not ReservedWord

IdentifierName :: 
    IdentifierStart 
    IdentifierName IdentifierPart 

IdentifierStart :: 
    UnicodeLetter 
    $ 
    _ 
    \ UnicodeEscapeSequence 

IdentifierPart :: 
    IdentifierStart 
    UnicodeCombiningMark 
    UnicodeDigit 
    UnicodeConnectorPunctuation 
    \ UnicodeEscapeSequence 

UnicodeLetter 
    any character in the Unicode categories “Uppercase letter (Lu)”, “Lowercase letter (Ll)”, “Titlecase letter (Lt)”, 
    “Modifier letter (Lm)”, “Other letter (Lo)”, or “Letter number (Nl)”. 

UnicodeCombiningMark 
    any character in the Unicode categories “Non-spacing mark (Mn)” or “Combining spacing mark (Mc)” 

UnicodeDigit 
    any character in the Unicode category “Decimal number (Nd)” 

UnicodeConnectorPunctuation 
    any character in the Unicode category “Connector punctuation (Pc)” 

UnicodeEscapeSequence 
    see 7.8.4. 

HexDigit :: one of 
    0 1 2 3 4 5 6 7 8 9 a b c d e f A B C D E F
Run Code Online (Sandbox Code Playgroud)

这为命名变量和打高尔夫球创造了很多机会.我们来试试吧.

一个有效的标识符可以与无论是开始UnicodeLetter,$,_,或\ UnicodeEscapeSequence.unicode字母是这些类别中的任何字符(请参阅所有类别):

  • 大写字母(Lu)
  • 小写字母(Ll)
  • 标题字母(Lt)
  • 修饰符(Lm)
  • 其他字母(Lo)
  • 字母编号(Nl)

仅这一点就解释了一些疯狂的可能性 - 工作实例.如果它在所有浏览器中都不起作用,那么称之为bug,因为它应该.

var ? = "something";
var ????? = "hello";
var ???? = "less than? wtf";
var ????????????? = "javascript"; // ok that's JavaScript in hindi
var KingGeorge? = "Roman numerals, awesome!";
Run Code Online (Sandbox Code Playgroud)

  • 您能否将示例行复制到[此 Rosetta 代码页](http://rosettacode.org/wiki/Unicode_variable_names),该页目前缺少 JavaScript 示例? (3认同)

Ant*_*lls 70

基本上,以正则表达式形式:[a-zA-Z_$][0-9a-zA-Z_$]*.换句话说,第一个字符可以是字母或_或$,其他字符可以是字母或_或$或数字.

注意:虽然其他答案指出您可以在JavaScript标识符中使用Unicode字符,但实际问题是"我应该使用哪些字符作为扩展库的名称,如jQuery?" 这是对这个问题的回答.您可以在标识符中使用Unicode字符,但不要这样做.编码一直搞砸了.将您的公共标识符保存在安全的32-126 ASCII范围内.

  • 我可能会暗示暗杀一个在他的标签名称中使用unicode字符的联合开发人员./几乎没有讽刺的言论 (71认同)
  • @Tchalvak对于刚刚使用的代码,使用Ʒ作为主库名称可能没问题.(哦,你认为那是3?很抱歉,它实际上是U + 01B7拉丁大写字母Ezh!或者它是З,Cyrillic Capital Letter Ze?)如果你打算写一个可能被其他人使用的图书馆但是,最好坚持使用ASCII. (36认同)
  • 看看,@ Timwi,特别是当你在写一个图书馆时(正如理查德所说的那样),不要强迫你的用户进入Alt-blah crap或copy'n'pasting.此外,对于你自己的东西,你可能没有处理在遇到浏览器或代理服务器错误或其他任何事情时出现的烦恼,但让你的图书馆用户处理这些东西并不酷.一个好的答案回答"我该怎么做",而不仅仅是处理手头的问题.是的,我想帮助别人.我不打算包括无用的和危险的信息,除非我说"哦,不要这样做". (14认同)
  • romkyns,我不认为"Unicode字符标识符名称"会包含在"JavaScript:The Good Parts"中,因此,我更愿意忽略它们的存在.但是,为了您的利益,我在答案中添加了免责声明. (12认同)
  • 关于编码:请**使用非ASCII字符,至少在您的字符串文字中.我们必须消除所有使编码"一直搞砸"的愚蠢软件.在C#中键入`Console.WriteLine("привет")`并且_实际上它正在工作中真是太幸福了! (11认同)
  • 不要忘记π:https://twitter.com/mathias/status/71573155470245888(是的,它有效:http://jsfiddle.net/musicisair/Wqx5k/) (9认同)
  • @AnthonyMills或者,你知道,你可能只是一个用不限于ascii的语言写作的人. (5认同)
  • @AnthonyMills:+1表示最便携(在我眼里,右)的答案.即:不要超越ASCII的[ - 〜]范围(+ tab +换行符) (5认同)
  • 我现在可以看到它... jQuery的竞争库叫做**FuzzyQuery**,用xpath做选择器,基本名称为෴仅用于踢:`෴("body/div/span#foo").huzzah(真的);`;-) (5认同)
  • @flyingsheep问题不是"哪些字符是JavaScript标识符的有效字符?" 这是问题的标题,这是问题的一部分,但这不是完整的问题.问题是:在像jQuery这样的库函数名称中使用哪些字符是好的?答案就是:`^ [a-zA-Z _ $] [0-9a-zA-Z _ $]*$`从技术上讲,从字面上看,由于给定的原因. (4认同)
  • 注意:我修改了我的答案,指出我正在回答完整的问题,而不是问题的一部分是"什么是合法的JS标识符字符". (3认同)
  • 为了进一步回答你的问题,另一个字符将是下划线,如http://documentcloud.github.com/underscore/ ...或者你总是可以使用类似`$ rc` ... :)的原型,实例,使用`$$`,而Microsoft Ajax Library使用$和短字. (2认同)
  • q̊̆̓̍u̐e̷̜r̤̻̫y(".comment-body",q̊̆̓̍u̐e̷̜r̤̻̫y(".comment")); 哈哈,我很开心.抱歉.我想我会坚持简单的口音,这是extendec ascii的一部分.éàâç和喜欢. (2认同)

dan*_*ton 17

在JavaScript 1.5之前: ^[a-zA-Z_$][0-9a-zA-Z_$]*$

英语:它必须以美元符号,下划线或26个字母字母,大写或小写字母之一开头.后续字符(如果有)可以是任何一个或十进制数字之一.

JavaScript 1.5及更高版本*:^[\p{L}\p{Nl}$_][\p{L}\p{Nl}$\p{Mn}\p{Mc}\p{Nd}\p{Pc}]*$

这在英语中更难以表达,但它在概念上类似于旧语法,并且字母和数字可以来自任何语言.在第一个字符之后,还允许附加的下划线字符(统称为"连接符")和附加字符组合标记("修饰符").(此扩展集中不包含其他货币符号.)

JavaScript 1.5及更高版本也允许Unicode转义序列,前提是结果是上述正则表达式中允许的字符.

标识符也不能是当前保留字或考虑将来使用的字.

标识符的长度没有实际限制.(浏览器各不相同,但你可以安全地拥有1000个字符,可能还有几个数量级.)

链接到角色类别:

  • 字母:Lu,Ll,Lt,Lm,Lo,Nl
    (在上面的正则表达式中组合为"L")
  • 组合标记("修饰符"):Mn,Mc
  • 数字:Nd
  • 连接器:Pc

*nb 此Perl正则表达式仅用于描述语法 - 它不适用于JavaScript,但尚未包含对Unicode属性的支持.(有些第三方软件包声称可以添加此类支持.)

  • 应该注意的是,你的第二个正则表达式有一些误报.[补充Unicode字符](http://mathiasbynens.be/notes/javascript-encoding#bmp)(例如[U + 2F800 CJ​​K兼容性表意文字](http://graphemica.com/%F0%AF%A0%80) ,[在[Lo]类别中列出)[在标识符名称中不允许](http://mathiasbynens.be/notes/javascript-identifiers),因为JavaScript将它们解释为两个单独的代理半部分(例如`\ uD87E\uDC00 `)与任何允许的Unicode类别都不匹配.但是,你的正则表达式会允许这样的角色.此外,缺少U + 200C和U + 200D. (5认同)
  • ES6 使用明确用于此目的的字符类(在编程中使用)正式定义有效标识符 - 不确定以前是否正确 - 这意味着如果不考虑保留字,您可以使 this 正则表达式稍微更具可读性 - 或至少如果不是 Unicode 转义序列现在在标识符中也有效的话,情况会是这样!这完全符合 ES6 规范: (?:[\p{ID_Start}\$_]|\\u(?:[\dA-Fa-f]{4}|\{[\dA-Fa-f ]+\}))([\p{ID_Continue}\$_\u200C\u200D]|\\u(?:[\dA-Fa-f]{4}|\{[\dA-Fa-f] +\}))* (3认同)

小智 14

实际上,ECMAScript在第15页上说:标识符可以以$,下划线或UnicodeLetter开头,然后继续(仅在其下方)以指定UnicodeLetter可以是来自unicode类别的任何字符,Lo,Ll ,Lu,Lt,Lm和Nl.当你查看这些类别时,你会发现这比拉丁字母开辟了更多的可能性.只需在谷歌搜索"unicode catagories",你就可以找到它们.


End*_*ssa 13

Javascript变量

您可以使用任何字母$,或_字符来启动变量.只要它不以数字开头,您也可以包含数字.

开始: [a-z], $, _

包含: [a-z], [0-9], $, _

jQuery的

您可以使用_您的库,以便它与jQuery并排放置.但是,您可以设置一个配置,以便jQuery不会使用$.它会改为使用jQuery.为此,只需设置:

jQuery.noConflict();
Run Code Online (Sandbox Code Playgroud)

本页介绍了如何执行此操作.

  • @Richard:不,这不是绝对正确的.请参阅@Yuvalik和@Anurag的答案. (7认同)

Svi*_*ish 9

根据我的意见,接受的答案将排除许多有效的标识符.这是一个我应该遵循规范的正则表达式(参见章节7.6关于标识符).使用RegexBuddy创建它,您可以在http://samples.geekality.net/js-identifiers找到解释的导出.

^[$_\p{L}][$_\p{L}\p{Mn}\p{Mc}\p{Nd}\p{Pc}\u200C\u200D]*+$
Run Code Online (Sandbox Code Playgroud)

此外,名称不能是以下保留字之一.

break,do,instanceof,typeof,case,else,new,var,catch,finally,return,void,continue,for,switch,while,debugger,function,this,with,default,if,throw,delete in in, try,class,enum,extends,super,const,export,import,implements,let,private,public,yield,interface,package,protected,static,null,true,false

  • @DavidMurdoch我写了一个11,335个字符的JavaScript兼容正则表达式,可用于验证标识符(也就是变量名).见[我的回答](http://stackoverflow.com/a/9337047/96656). (3认同)
  • @Svish应该注意你的正则表达式有一些误报.[补充Unicode字符](http://mathiasbynens.be/notes/javascript-encoding#bmp)(例如[U + 2F800 CJ​​K兼容性表意文字](http://graphemica.com/%F0%AF%A0%80) ,[在[Lo]类别中列出)[在标识符名称中不允许](http://mathiasbynens.be/notes/javascript-identifiers),因为JavaScript将它们解释为两个单独的代理半部分(例如`\ uD87E\uDC00 `)与任何允许的Unicode类别都不匹配.但是,你的正则表达式会允许这样的角色. (3认同)
  • @Svish嗯,是的,通过自己写出范围,就像我做的那样:)注意你的正则表达式也没有考虑[eval`,`arguments`,`NaN`,`Infinity`和`undefined`边缘情况](http://mathiasbynens.be/notes/javascript-identifiers#reserved-words). (2认同)

Mig*_*ura 6

Javascript变量可以包含字母,数字,美元符号($)和下划线(_).他们不能以数字开头.

通常,库使用$_作为您将在任何地方使用的函数的快捷方式.虽然名称$_没有意义,但它们对于它们的简洁性是有用的,因为你将在任何地方使用该功能,你应该知道它们的含义.

如果您的库不是在任何地方使用单个函数,我建议您使用更有意义的名称,因为这些将帮助您和其他人了解您的代码正在做什么,而不必损害源代码的好处.

例如,您可以查看令人敬畏的DateJS库以及它允许​​的合成糖,而无需任何符号短命名变量.

你应该首先让你的代码变得实用,并且只有在尝试使它变得漂亮之后.


Ana*_*awa 6

如果正则表达式不是必须的,那么让浏览器决定使用不是更好eval吗?

function isValidVarName( name ) {
    try {
        // Update, previoulsy it was
        // eval('(function() { var ' + name + '; })()');
        Function('var ' + name);
    } catch( e ) {
        return false;
    }
    return true;
}

isValidVarName('my_var');     // true
isValidVarName('1');          // false
Run Code Online (Sandbox Code Playgroud)