我开始喜欢jQuery,但作为PHP开发人员,我讨厌使用
$().stuff
众所周知,PHP中的$
标记变量。我猜javascript中的jQuery声明了这样的函数
function $(element) {/*stuff*/}
javascripts是否允许$
作为func的名称?这是一个好行为吗?
我知道只有标准[0-9a-zA-Z_]
才能成为funcs / vars的名称。
我错过了什么吗?
由于
答案 0 :(得分:7)
在PHP中使用$
是一个彻头彻尾的错误,也是由Perl的发明者做出的。变量前缀在完全成熟的计算机语言中是多余的,因为foo
和bar
之类的标识符可以被认为是没有限定条件的变量 - 标识符还能识别什么? :-)问题是发明这些语言的业余爱好者非常熟悉Unix shell,他们显然没有意识到$
之类的shell变量引用前面的$PATH
不是一个美丽的语言特征,但由于在shell脚本中,单词通常可以“像他们自己”出现这一事实所强加的丑陋必然性,就像你说的那样:
$ echo PATH
PATH
$ echo $PATH
/usr/local/bin:/usr/bin:/bin
换句话说,像shell这样的文本替换语言中需要像$
那样说“这是一个变量!”的转义字符,并且转义也很重要就像TCL一样,当然,在现代模板语言中,除了引入动态信息的变量引用和循环之外,你必须能够区分应该复制到网页中的所有普通文本。
但是普通的编程语言不通过文本替换工作,所以Perl和PHP中的$
是残缺和噪音。
由于$
在JavaScript中没有其他用途,因此对于是否将其作为变量的“普通字母”提供是一种简单的美学判断。 JavaScript说“是”,Python说“不”,我已经习惯了两种选择。我想现在对我来说“看起来像JavaScript”,$
才有效!
但是在 no 的情况下,你应该让Perl和PHP的可怕选择让你的美学判断得到通知,这是错误的选择!相反,问问自己$
是否看起来像资本S
,你可以认为它“足够接近一个字母”,或者它是否永远像你的符号。这是真正的选择。
答案 1 :(得分:4)
是的,这是有效的。 Crockford hates it,其他人喜欢它。如果你不喜欢它,不要使用'$',使用'jQuery'。您甚至可以将jQuery放入no conflict mode,以便$永远不会被设置。也就是说,如果你通过PHP编写足够的JS来引起问题,你应该考虑学习如何编写更好,更通用的JS。
答案 2 :(得分:4)
来自MDC docs:
JavaScript标识符必须以字母,下划线(_)或美元符号($)开头;后续字符也可以是数字(0-9)。由于JavaScript区分大小写,因此字母包括字符“A”到“Z”(大写)和字符“a”到“z”(小写)。
我认为这里的关键概念是,在Javascript中,函数是一流的。这意味着它们就像其他一切一样是对象。用于引用函数的名称实际上是变量。
因此,举个例子,你可以这样做:
var myFunc = function() { /* some code */ };
然后将该函数调用为myFunc()
。
由于$
是标识符名称中的有效字符,因此它是函数的有效名称,与包含其他任何内容的变量一样多。
在我看来,在PHP中使用$
作为每个变量的sigil是愚蠢的。
答案 3 :(得分:3)
Javascript只允许a-z多于函数名称。 $是函数的有效名称,$在php中没有特殊含义。所以$是函数的正确名称。
答案 4 :(得分:2)
你可以做到
var whatever = $.noConflict();
现在您可以使用whatever(..)
代替$(...)
http://api.jquery.com/jQuery.noConflict/
上的文档并引用Values, Variables, and Literals
必须启动JavaScript标识符 用字母,下划线(_)或 美元符号($);后续人物 也可以是数字(0-9)。