jQueryでない場合、Javascriptのドル記号は何ですか


86

私は数年前にJavaScript / jQueryプログラミングをいくつか行いましたが、再開したばかりです。当時、すべてのjQuery機能にドル記号が使用されていました。jQueryライブラリがインポートされていない場合、ドル記号は定義されていませんでした。

今日、私はJavaScriptライブラリのない完全に空のhtmlファイルでFirefoxを起動しましたが、ドル記号は何かを指しています。Firefoxコンソールを開いて「$」と入力すると、が表示され"function()"ます。

1)数年前にドル記号が割り当てられなかったのは正しいですか、それとも間違ったことを覚えていますか?

2)jQueryでない場合、ドル記号は何ですか?

回答:


123

1)数年前にドル記号が割り当てられなかったのは正しいですか、それとも間違ったことを覚えていますか?

それは正しく、それでも真実です。

2)jQueryでない場合、ドル記号は何ですか?

FirefoxChrome$$$ヘルパーコマンドとして他のいくつかを実装しています。両方が設定されます$$document.querySelectorAll()、そしてセット$document.querySelectorあればwindow.$定義されていません。

したがって、表示されているのは実際には標準のJavaScriptではなく、ブラウザーの開発者コンソールのヘルパーです。また、jQueryではありません(jQueryを使用しているページを表示していない限り)。ただし、(単一の一致の場合)および(複数の一致の場合)jQueryセレクターとほぼ同じ強度が得られるjQueryという点で、その動作はの動作に近いです。querySelectorquerySelectorAll


31
OK、それは本当に迷惑です。jqueryが存在するように見えますが、どこにも見つからないため、混乱するだけです。あなたがそれが起こっていることに気づいたら、それは便利かもしれませんが、それは本当に混乱し、バグを隠す可能性があると思います。
マイクネルソン2014

1
他のブラウザでいつ採用されたかはわかりませんが、IE11とEdgeでも利用できるようです。
isapir 2017

では、jqueryかどうかをどうやって知るのでしょうか?たとえば、他のいくつかのライブラリが組み込まれている可能性のある大きなライブラリをインポートした場合、jqueryがそこにあるかどうかを知りたいとします。助けてください。
Martian2049 2018年

2
@ Martian2049実際のjQueryは応答すると思います$.fn.jquery
mb21 2018

2
@Gaspacchioそれは別の答えになるはずです。ただし、この質問の$テンプレートリテラルは使用されていないことに注意してください。
ゼータ

11

アンダースコアのように通訳には何の意味もありません

ECMAScript仕様から:

ドル記号($)とアンダースコア(_)は、識別子のどこでも使用できます。ドル記号は、機械的に生成されたコードでのみ使用することを目的としています。

JavaScriptドル記号($)を確認することもできます-それは何のためですか?

(ECMAスクリプトのドキュメント7.6識別子、ECMA-262、第3版)を:慣例により、ドル記号($)、アンダースコア(_)、さらにいくつかのASCII文字は、JavaScriptの識別子(ソースのどこにでも使用することが許可されている。ドルsignは、機械的に生成されたコードでのみ使用することを目的としています。つまり、フレームワークを作成している場合を除き、識別子名にドル記号($)を使用したくないということです。使用できる文字のリストを次に示します。識別子名の任意の場所:

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence

編集:-

実際、ドル記号関数は、多かれ少なかれ事実上のショートカットになっていdocument.getElementById()ます。

私のポイントは、チェックを確認するには、これを

$(セレクター)

指定されたCSSセレクターに一致する単一の要素を返します。古いFirebugバージョンでは、これはdocument.getElementByIdと同等 でした。


そのブログのリンクはもう死んでいます。
ビクターザマニアン

答えの最初の部分は無関係であり、2番目の部分は時代遅れであり、現代のブラウザのコンテキストでは間違っています。
セバスチャンサイモン

7

Dollar sign($) 割り当てられていませんが、一部のブラウザは特別な使用のための機能を追加します。

Google Chromeと同様$に、コンソールで入力すると、次のように返されます。

function $(selector, [startNode]) { [Command Line API] }

この関数はGoogleChrome Developer Toolに割り当てられており、デバッグがより簡単になります。

を入力すると$('div')、次のような結果が返されます。

e.fn.e.init[178]

そして、それにすべてのdivDOMオブジェクトを含めます。

ところで、マウスの右ボタンをクリックして要素を選択$scopeした後、コンソールでタイプごとにangular.jsスコープにアクセスできます


4

その関数とは異なり、:を返さないため、$$完全ではないことに注意してください。document.querySelectorAllNodeList

document.querySelectorAll("p") instanceof NodeList // true

$$("p") instanceof NodeList // false

Array.isArray($$("p")) // true

だから$$(selector)本当にもっと似ていArray.from(document.querySelectorAll(selector))ます。これは、使用するときに、mapだけforEachでなく、やのような配列メソッドが利用できることを意味します$$。これは実際には非常に便利です。


1

のように$、有効な変数名と同様に、何でもかまいませんdollar

ECMAScriptから:

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

それが何であり、どこで定義されているかを確認する最も簡単な解決策は、おそらくこの行にブレークポイントを入力$()して配置することです。


1

ここで他の答えを完成させるために、MooToolsはの$エイリアスとしても使用しdocument.getElementByIdます。

$が取られているかどうかをチェックし、デフォルトでになりますdocument.id

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.