Apa tanda dolar di Javascript, jika tidak jQuery

86

Saya melakukan beberapa pemrograman javascript / jQuery beberapa tahun yang lalu, dan saya baru memulai lagi. Saat itu tanda dolar digunakan untuk semua fungsionalitas jQuery, dan jika tidak ada pustaka jQuery yang diimpor, tanda dolar tidak ditentukan.

Hari ini, saya memulai Firefox, dalam file html yang benar-benar kosong tanpa pustaka javascript, namun tanda dolar menunjukkan sesuatu. Jika saya membuka konsol Firefox dan mengetik '$' saya mengerti "function()".

1) Apakah benar bahwa tanda dolar tidak diberikan, beberapa tahun yang lalu, atau apakah saya salah ingat?

2) Apa tanda dolar , jika bukan jQuery?

Mads Skjern
sumber

Jawaban:

123

1) Apakah benar bahwa tanda dolar tidak diberikan, beberapa tahun yang lalu, atau apakah saya salah ingat?

Itu benar dan masih benar.

2) Apa tanda dolar, jika bukan jQuery?

Firefox dan Chrome menerapkan $, $$dan beberapa lainnya sebagai perintah pembantu. Keduanya akan disetel $$ke document.querySelectorAll(), dan $ke document.querySelectorjika window.$belum ditentukan.

Jadi apa yang Anda lihat sebenarnya bukan JavaScript standar, tetapi pembantu di konsol pengembang browser Anda. Ini juga bukan jQuery (selama Anda tidak berada di halaman menggunakan jQuery). Namun, perilakunya mendekati salah satu jQuery, mengingat querySelector(untuk satu kecocokan) dan querySelectorAll(untuk beberapa kecocokan) memberi Anda kekuatan yang hampir sama dengan selektor jQuery.

Zeta
sumber
31
Oke, itu sangat mengganggu. Itu hanya membuatnya membingungkan karena sepertinya jquery ada tetapi Anda tidak dapat menemukannya di mana pun. Saya kira begitu Anda sadar bahwa itu terjadi, itu bisa berguna tetapi itu benar-benar hanya membingungkan dan bisa menutupi bug.
mike nelson
1
Tidak yakin kapan itu diadopsi oleh browser lain, tetapi saya melihatnya tersedia juga di IE11 dan Edge.
isapir
jadi bagaimana orang tahu kalau itu jquery? katakanlah, Anda telah mengimpor perpustakaan besar yang mungkin telah memasukkan beberapa perpustakaan lain, Anda ingin tahu apakah jquery itu ada di sana. tolong bantu.
Martian2049
2
@ Martian2049 Saya pikir jQuery nyata akan menanggapi$.fn.jquery
mb21
2
@Gaspacchio Itu seharusnya jawaban lain. Namun, perlu diingat bahwa $tidak digunakan dalam literal template dalam pertanyaan ini .
Zeta
11

Itu tidak berarti apa-apa bagi penerjemah seperti garis bawah

Dari spesifikasi ECMAScript:

Tanda dolar ($) dan garis bawah (_) diizinkan di mana saja dalam pengenal. Tanda dolar dimaksudkan untuk digunakan hanya dalam kode yang dibuat secara mekanis.

Anda juga dapat memeriksa JavaScript Dollar Sign ($) - Untuk apa ini?

Secara konvensi, tanda dolar ($), garis bawah (_) dan bahkan beberapa karakter ASCII diizinkan untuk digunakan di mana saja dalam pengenal JavaScript (Sumber: dokumentasi Skrip Ecma (7.6 Pengidentifikasi, ECMA-262, Edisi ke-3) dolar tanda dimaksudkan untuk digunakan hanya dalam kode yang dibuat secara mekanis.Ini berarti kita tidak ingin menggunakan tanda dolar ($) pada nama pengenal kita, kecuali kita sedang menulis kerangka kerja. Berikut ini adalah daftar karakter yang diizinkan yang dapat digunakan di mana saja dalam nama pengenal:

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

EDIT: -

Sebenarnya fungsi tanda dolar telah menjadi jalan pintas de facto yang kurang lebih document.getElementById().

Untuk mengkonfirmasi poin saya, periksa ini :

$ (selektor)

Mengembalikan satu elemen yang cocok dengan pemilih CSS yang diberikan. Di versi Firebug lama , ini dulu setara dengan document.getElementById .

Rahul Tripathi
sumber
Link blog itu sudah mati sekarang.
Victor Zamanian
Bagian pertama dari jawaban tidak relevan, bagian kedua sudah usang dan salah dalam konteks browser modern.
Sebastian Simon
7

Dollar sign($) tidak ditugaskan, tetapi beberapa browser menambahkan fungsi untuk penggunaan khusus.

Seperti Google Chrome, jika Anda mengetik $di konsol, ini akan menghasilkan:

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

Fungsi ini ditetapkan untuk Alat Pengembang Google Chrome, dan membiarkan debug lebih mudah.

jika Anda mengetik $('div'), itu akan mengembalikan sesuatu seperti ini:

e.fn.e.init[178]

dan menyertakan setiap divobjek DOM di dalamnya.

BTW, setelah Anda mengklik tombol kanan pada mouse untuk memilih elemen, Anda dapat mengakses cakupan angular.js berdasarkan jenis $scopedi konsol

Chen-Tsu Lin
sumber
4

Perhatikan itu $$tidak cukup document.querySelectorAll, karena tidak seperti fungsi itu, ia tidak mengembalikan NodeList:

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

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

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

Jadi $$(selector)benar-benar lebih seperti Array.from(document.querySelectorAll(selector)). Ini berarti bahwa metode array seperti mapdan teman, tidak hanya forEach, tersedia saat digunakan $$yang sebenarnya cukup berguna.

Sebastian Simon
sumber
1

Bisa apa saja, seperti $nama variabel yang valid, sama seperti dollar.

Dari ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

Solusi paling sederhana untuk melihat apa itu dan di mana itu didefinisikan mungkin akan mengetik $()dan meletakkan breakpoint pada baris ini.

Denys Séguret
sumber
1

Hanya untuk melengkapi jawaban lain di sini, MooTools juga menggunakan $alias untukdocument.getElementById .

Itu memeriksa apakah $sudah diambil dan kemudian akan default ke document.id.

Sergio
sumber