Bisakah seseorang menjelaskan tanda dolar dalam Javascript?

378

Kode yang dimaksud ada di sini:

var $item = $(this).parent().parent().find('input');

Apa tujuan dari tanda dolar dalam nama variabel, mengapa tidak mengecualikannya?

Keith Donegan
sumber
3
kemungkinan duplikat stackoverflow.com/questions/205853/…
DisgruntledGoat
[jawaban ttony21] [1] salah dengan menyatakan bahwa tidak ada tipe dalam Javascript, lih. [dokumentasi resmi] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam
Utas ini cukup lama tetapi tampaknya peramban utama telah menstandarkan $, $ global vairables. Apa yang harus dilakukan $ vs $$?
Nick Sotiros
Tidak ada, kecuali Anda berada di konsol browser tersebut. Chrome misalnya mendefinisikan $ dan $$ sebagai pintasan ke document.querySelectordandocument.querySelectorAll
Kevin B

Jawaban:

381

A '$' dalam suatu variabel tidak berarti apa-apa istimewa bagi penerjemah, seperti halnya garis bawah.

Dari apa yang saya lihat, banyak orang yang menggunakan jQuery (yang merupakan contoh kode Anda bagi saya) cenderung memberikan awalan variabel yang berisi objek jQuery dengan $ sehingga mereka mudah diidentifikasi dan tidak tercampur dengan, katakanlah, bilangan bulat .

Fungsi tanda dolar $()di jQuery adalah fungsi perpustakaan yang sering digunakan, sehingga nama pendek diinginkan.

cobbal
sumber
86
Catatan: Secara default, jQuery menggunakan "$" sebagai pintasan untuk "jQuery". Ini memiliki beberapa efek pada penggunaan perpustakaan Javascript lainnya. Lihat docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya
17
Dengan kata lain, $ dapat dibandingkan dengan simbol apa pun yang dapat diterima dalam nama variabel / fungsi. Melakukan var $=function(){}sama dengan melakukan var a=function(){}.
F-3000
24
Thimmayya komentar Anda "Secara default, jQuery menggunakan" $ "sebagai jalan pintas untuk" jQuery "" harus dalam huruf tebal di bagian atas setiap halaman di situs web Jquery, Contoh-contoh mereka didokumentasikan dengan mengerikan.
RustyH
Bagaimana ketika $ ditentukan sebagai parameter fungsi? Saya melihat beberapa kode seperti jQuery(document).ready(function($){... Kemudian $ digunakan di dalam implementasi fungsi.
still_dreaming_1
4
@ ThrowawayAccount3Million Ini hanya sebagian dari namanya. Dalam kasus $scope$ adalah salah satu karakter dalam nama itu. Sama seperti jika Anda melepas epada akhir $scope, itu tidak akan berhasil, jadi mengambil $juga tidak akan berhasil. Jika Anda melihat sesuatu seperti $( "a" ).addClass( "test" ), tanda dolar adalah seluruh nama apa pun itu.
still_dreaming_1
49

Dalam contoh Anda, $ tidak memiliki arti khusus selain menjadi karakter nama.

Namun , dalam ECMAScript 6 (ES6) $ dapat mewakili Templat Literal

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.
UpTheCreek
sumber
37

Tanda $ adalah pengidentifikasi untuk variabel dan fungsi.

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

Itu memiliki penjelasan yang jelas untuk apa tanda dolar itu.

Berikut penjelasan alternatif: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html

AlbertoPL
sumber
2
Javascript memang memiliki tipe; dan dalam hal apa pun, bagaimana kaitan dolar itu dengan hal itu? Itu hanya karakter yang kebetulan merupakan pengidentifikasi hukum dalam Javascript.
Erik Kaplun
10
Saya tidak yakin akan menyebut tautan itu penjelasan "jelas". Apakah benar-benar butuh 6+ paragraf untuk menjelaskan bahwa $ hanyalah karakter yang valid ketika mendefinisikan fungsi dan nama variabel?
Sedikit
1
Sepertinya tautan pertama berfungsi lagi. Saya harus setuju dengan @Slight bahwa penjelasan alternatif itu mengerikan.
Sander Garretsen
Kode sampel dalam tautan cukup mudah dimengerti. Luar biasa!
蔡宗容
32

Tanda dolar diperlakukan seperti huruf normal atau garis bawah ( _). Ini tidak memiliki arti khusus bagi penerjemah.

Tidak seperti banyak bahasa yang serupa, pengidentifikasi (seperti nama fungsional dan variabel) dalam Javascript tidak hanya berisi huruf, angka, dan garis bawah, tetapi juga dapat berisi tanda dolar . Mereka bahkan diizinkan untuk memulai dengan tanda dolar, atau hanya terdiri dari tanda dolar dan tidak ada yang lain.

Dengan demikian, $adalah fungsi yang valid atau nama variabel dalam Javascript.

Mengapa Anda ingin tanda dolar di pengidentifikasi?

Sintaksnya tidak benar-benar menegakkan penggunaan tanda dolar pada pengenal tertentu, jadi terserah Anda bagaimana Anda ingin menggunakannya. Di masa lalu, sering direkomendasikan untuk memulai pengidentifikasi dengan tanda dolar hanya dalam kode yang dihasilkan - yaitu, kode yang dibuat bukan dengan tangan tetapi oleh pembuat kode.

Namun, dalam contoh Anda, ini tampaknya bukan masalahnya. Sepertinya seseorang baru saja meletakkan tanda dolar di awal untuk bersenang-senang - mungkin mereka adalah programmer PHP yang melakukannya karena kebiasaan, atau sesuatu. Di PHP, semua nama variabel harus memiliki tanda dolar di depannya.

Ada makna umum lain untuk tanda dolar dalam juru bahasa saat ini: objek jQuery, yang namanya hanya terdiri dari tanda dolar tunggal ( $). Ini adalah konvensi yang dipinjam dari kerangka kerja Javascript sebelumnya seperti Prototipe, dan jika jQuery digunakan dengan kerangka kerja lainnya, akan ada bentrokan nama karena keduanya akan menggunakan nama $(jQuery dapat dikonfigurasi untuk menggunakan nama yang berbeda untuk objek globalnya) . Tidak ada yang istimewa dalam Javascript yang memungkinkan jQuery untuk menggunakan tanda dolar tunggal sebagai nama objeknya; seperti yang disebutkan di atas, itu hanyalah nama pengenal yang valid.

thomasrutter
sumber
Anda dapat menghapus objek jQuery dengan ini var $j = jQuery.noConflict();sekarang $ j adalah objek jQuery.
Justin Liu
6

Tanda dolar digunakan dalam ecmascript 2015-2016 sebagai 'templat literals'. Contoh:

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

Berikut contoh yang berfungsi: https://es6console.com/j3lg8xeo/ Perhatikan tanda ini " ` ", ini bukan kutipan normal.

Anda juga dapat bertemu $ saat bekerja dengan jQuery perpustakaan .

$ sign in Regular Expressions berarti end of line.

Vasyl Gutnyk
sumber
4

Tak ada alasan. Mungkin orang yang mengkodekannya berasal dari PHP. Ini memiliki efek yang sama seperti jika Anda menamainya "_item" atau "item" atau "item $$".

Sebagai sufiks (seperti "item $", dilafalkan "items"), itu dapat menandakan yang dapat diamati seperti elemen DOM sebagai konvensi yang disebut "Notasi Finlandia" yang mirip dengan Notasi Hongaria.

Claudiu
sumber
1

Berikut ini penjelasan video pendek yang bagus: https://www.youtube.com/watch?v=Acm-MD_6934

Menurut Ecma International Identifier Names adalah token yang ditafsirkan sesuai dengan tata bahasa yang diberikan dalam bagian "Identifiers" bab 5 dari standar Unicode, dengan beberapa modifikasi kecil. Identifier adalah IdentifierName yang bukan ReservedWord ( lihat 7.6.1 ). Tata bahasa pengidentifikasi Unicode didasarkan pada kategori karakter normatif dan informatif yang ditentukan oleh Standar Unicode. Karakter dalam kategori yang ditentukan dalam versi 3.0 dari standar Unicode harus diperlakukan seperti dalam kategori tersebut oleh semua yang memenuhi implementasi ECMAScript. Standar ini menentukan penambahan karakter spesifik:

Tanda dolar ($) dan garis bawah (_) diizinkan di mana saja di IdentifierName .

Bacaan lebih lanjut dapat ditemukan di: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International adalah asosiasi industri yang didirikan pada tahun 1961 dan didedikasikan untuk standardisasi Teknologi Informasi dan Komunikasi (TIK) dan Elektronik Konsumen (CE).

Nomis
sumber
Meskipun tautan ini dapat menjawab pertanyaan, lebih baik untuk memasukkan bagian-bagian penting dari jawaban di sini dan memberikan tautan untuk referensi. Jawaban hanya tautan dapat menjadi tidak valid jika halaman tertaut berubah.
TartanLlama
... @TartanLlama Jika Anda menurunkan jawaban saya, harap baca jawaban saya yang diperbarui. Terima kasih.
Nomis
Bukan saya! Saya baru saja menandai itu.
TartanLlama
... ok untuk orang yang memilih ini, tolong jelaskan mengapa dan baca jawaban saya yang diedit. Terima kasih.
Nomis
5
... @TartanLlama ini hanya membuktikan (lagi) bahwa fitur downgrade Stackoverflows anonim rusak. Menjawab pertanyaan lama dengan jawaban yang diterima tidak masalah bagi saya karena saya sendiri merasa berguna untuk melihat jawaban lain ketika saya mencari-cari jawaban.
Nomis
1

Saat menggunakan jQuery, penggunaan $simbol sebagai awalan dalam nama variabel hanya dengan konvensi; ini sepenuhnya opsional dan hanya berfungsi untuk menunjukkan bahwa variabel tersebut memegang objek jQuery, seperti pada contoh Anda.

Ini berarti bahwa ketika fungsi jQuery lain perlu dipanggil pada objek, Anda tidak perlu membungkusnya $()lagi. Sebagai contoh, bandingkan ini:

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this 

// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

Dengan $awalan, variabel yang sudah memegang objek jQuery dapat dikenali secara instan dan kode lebih mudah dibaca, serta menghilangkan pembungkus ganda / banyak $().

Merobek
sumber