Pertanyaan Mengapa variabel JavaScript dimulai dengan tanda dolar?


Saya cukup sering melihat JavaScript dengan variabel yang dimulai dengan tanda dolar. Kapan / mengapa Anda memilih untuk menambahkan awalan variabel dengan cara ini?

(Saya tidak bertanya tentang $('p.foo') sintaks yang Anda lihat di jQuery dan lainnya, tetapi variabel normal seperti $name dan $order)


906
2017-10-15 18:26


asal


Jawaban:


Penggunaan yang sangat umum di jQuery adalah membedakan objek jQuery yang disimpan dalam variabel dari variabel lain. Misalnya, saya akan mendefinisikan

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

Saya menemukan ini sangat membantu dalam menulis kode jQuery dan membuatnya mudah untuk melihat objek jQuery yang memiliki kumpulan properti yang berbeda.


1268
2018-02-16 15:42



Di tanggal 1, 2, dan Edisi 3 ECMAScript, menggunakan nama variabel $ -prefixed secara eksplisit dihalangi oleh spesifikasi kecuali dalam konteks kode yang dibuat secara otomatis:

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

Namun, di versi berikutnya ( Edisi ke-5, yang saat ini), pembatasan ini dijatuhkan, dan bagian di atas diganti dengan

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

Dengan demikian, tanda $ sekarang dapat digunakan secara bebas dalam nama-nama variabel. Kerangka kerja dan perpustakaan tertentu memiliki konvensi mereka sendiri tentang makna simbol, yang dicatat dalam jawaban lain di sini.


220
2017-10-15 18:59



Seperti orang lain telah menyebutkan tanda dolar dimaksudkan untuk digunakan oleh kode yang dihasilkan secara mekanis. Namun, konvensi itu telah dipecahkan oleh beberapa pustaka JavaScript yang sangat populer. JQuery, Prototipe dan MS AJAX (AKA Atlas) semua menggunakan karakter ini dalam pengidentifikasi mereka (atau sebagai pengenal keseluruhan).

Singkatnya Anda dapat menggunakan $ kapanpun kamu mau. (Si penerjemah tidak akan mengeluh.) Pertanyaannya adalah kapan Anda melakukannya ingin untuk menggunakannya?

Saya pribadi tidak menggunakannya, tapi saya pikir penggunaannya valid. Saya pikir MS AJAX menggunakannya untuk menandakan bahwa fungsi adalah alias untuk beberapa panggilan verbose lebih lanjut.

Sebagai contoh:

var $get = function(id) { return document.getElementById(id); }

Itu sepertinya konvensi yang masuk akal.


56
2017-10-15 22:57



Dalam konteks AngularJS, the $ awalan hanya digunakan untuk pengenal dalam kode kerangka. Pengguna kerangka kerja diperintahkan untuk tidak menggunakannya dalam pengenal mereka sendiri:

Namespace Sudut $ dan $$

Untuk mencegah tabrakan nama yang tidak disengaja dengan kode Anda, Angular menambahkan nama-nama objek publik dengan $ dan nama benda pribadi dengan $$. Tolong jangan gunakan $ atau $$ awalan di kode Anda.

Sumber: https://docs.angularjs.org/api


49
2017-08-30 22:51



Stevo benar, arti dan penggunaan tanda skrip dolar (dalam Javascript dan platform jQuery, tetapi tidak dalam PHP) benar-benar semantik. $ adalah karakter yang dapat digunakan sebagai bagian dari nama pengenal. Selain itu, tanda dolar mungkin bukan hal yang paling "aneh" yang dapat Anda temui di Javascript. Berikut beberapa contoh nama pengenal yang valid:

var _       = function() { alert("hello from _"); }
var \u0024  = function() { alert("hello from $ defined as u0024"); }
var Ø       = function() { alert("hello from Ø"); }
var $$$$$   = function() { alert("hello from $$$$$"); }

Semua contoh di atas akan berfungsi.

Coba mereka.


19
2017-08-08 00:34



Saya adalah orang yang memulai konvensi ini pada tahun 2006 dan mempromosikannya di milis jQuery awal, jadi biarkan saya berbagi beberapa sejarah dan motivasi di sekitarnya.

Jawaban yang diterima memberikan contoh ini:

var $email = $("#email"); // refers to the jQuery object representation of the dom object
var email_field = $("#email").get(0); // refers to the dom object itself

Tapi itu tidak benar-benar menggambarkannya dengan baik. Bahkan tanpa itu $, kami masih memiliki dua nama variabel yang berbeda di sini, email dan email_field. Itu banyak sekali di sana. Mengapa kita perlu melempar a $ menjadi salah satu nama ketika kita sudah memiliki dua nama yang berbeda?

Sebenarnya, saya tidak akan menggunakannya email_field di sini karena dua alasan: names_with_underscores bukan JavaScript idiomatik, dan field tidak masuk akal untuk elemen DOM. Tapi saya mengikuti ide yang sama.

Saya mencoba beberapa hal yang berbeda, di antaranya sesuatu yang sangat mirip dengan contoh:

var email = $("#email"), emailElement = $("#email")[0];
// Now email is a jQuery object and emailElement is the first/only DOM element in it

(Tentu saja objek jQuery dapat memiliki lebih dari satu elemen DOM, tetapi kode yang saya kerjakan memiliki banyak sekali id penyeleksi, jadi dalam kasus itu ada korespondensi 1: 1.)

Saya memiliki kasus lain di mana sebuah fungsi menerima elemen DOM sebagai parameter dan juga membutuhkan objek jQuery untuk itu:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var emailJQ = $(email);
    // Now email is the DOM element and emailJQ is a jQuery object for it
}

Itu agak membingungkan! Di salah satu kode saya, email adalah objek jQuery dan emailElement adalah elemen DOM, tetapi di sisi lain, email adalah elemen DOM dan emailJQ adalah objek jQuery.

Tidak ada konsistensi dan saya terus mencampurkannya. Plus itu sedikit gangguan untuk terus membuat dua nama yang berbeda untuk hal yang sama: satu untuk objek jQuery dan satu lagi untuk elemen DOM yang cocok. Selain email, emailElement, dan emailJQ, Saya terus mencoba variasi lain juga.

Lalu saya perhatikan pola umum:

var email = $("#email");
var emailJQ = $(email);

Sejak JavaScript memperlakukan $ hanya sebagai huruf lain untuk nama, dan karena saya selalu mendapatkan objek jQuery kembali dari $(whatever) panggilan, pola itu akhirnya menyadarkan saya. Saya bisa mengambil $(...) panggil dan cukup hapus beberapa karakter, dan itu akan muncul dengan nama yang cukup bagus:

$("#email")
$(email)

Pemogokan tidak sempurna, tetapi Anda mungkin mendapatkan ide: dengan beberapa karakter dihapus, kedua baris tersebut berakhir seperti:

$email

Saat itulah saya menyadari saya tidak perlu membuat konvensi seperti emailElement atau emailJQ. Sudah ada konvensi bagus yang menatapku: mengambil beberapa karakter dari a $(whatever) panggil dan itu berubah menjadi $whatever.

var $email = $("#email"), email = $email[0];
// $email is the jQuery object and email is the DOM object

dan:

// email is a DOM element passed into this function
function doSomethingWithEmail( email ) {
    var $email = $(email);
    // $email is the jQuery object and email is the DOM object
    // Same names as in the code above. Yay!
}

Jadi saya tidak harus membuat dua nama yang berbeda sepanjang waktu tetapi hanya bisa menggunakan nama yang sama dengan atau tanpa $ awalan. Dan itu $ awalan adalah pengingat yang bagus bahwa saya berurusan dengan objek jQuery:

$('#email').click( ... );

atau:

var $email = $('#email');
// Maybe do some other stuff with $email here
$email.click( ... );

10
2018-02-01 09:05



Karakter $ tidak memiliki arti khusus untuk mesin JavaScript. Itu hanya karakter lain yang valid dalam nama variabel seperti a-z, A-Z, _, 0-9, dll ...


6
2017-07-28 15:26



Sejak _ di awal nama variabel sering digunakan untuk menunjukkan variabel pribadi (atau setidaknya yang dimaksudkan untuk tetap pribadi), saya temukan $ nyaman untuk menambahkan di depan alias singkat saya sendiri ke pustaka kode generik.

Sebagai contoh, ketika menggunakan jQuery, saya lebih suka menggunakan variabel $J(bukan hanya $) dan digunakan $P saat menggunakan php.js, dll.

Awalan membuatnya berbeda secara visual dari variabel lain seperti variabel statis saya sendiri, yang menjerumuskan saya pada fakta bahwa kode tersebut adalah bagian dari beberapa pustaka atau lainnya, dan lebih kecil kemungkinannya untuk bertentangan atau membingungkan orang lain setelah mereka mengetahui konvensi.

Ini juga tidak mengacaukan kode (atau membutuhkan pengetikan tambahan) seperti halnya nama yang sepenuhnya ditentukan diulang untuk setiap panggilan perpustakaan.

Saya suka menganggapnya mirip dengan apa yang dilakukan oleh kunci modifier untuk memperluas kemungkinan kunci tunggal.

Tapi ini hanya konvensi saya sendiri.


2
2018-05-04 14:52



Seperti yang telah saya alami selama 4 tahun terakhir, ini akan memungkinkan seseorang untuk dengan mudah mengidentifikasi apakah variabel yang menunjuk suatu nilai / objek atau elemen DOM terbungkus jQuery

Ex:
var name = 'jQuery';
var lib = {name:'jQuery',version:1.6};

var $dataDiv = $('#myDataDiv');

pada contoh di atas ketika saya melihat variabel "$ dataDiv" saya dapat dengan mudah mengatakan bahwa variabel ini menunjuk ke elemen DOM yang terbungkus jQuery (dalam hal ini adalah div). dan juga saya dapat memanggil semua metode jQuery tanpa membungkus objek lagi seperti $ dataDiv.append (), $ dataDiv.html (), $ dataDiv.find () daripada $ ($ dataDiv) .append ().

Semoga itu bisa membantu. jadi akhirnya ingin mengatakan bahwa itu akan menjadi latihan yang baik untuk mengikuti ini tetapi tidak wajib.


2
2017-09-05 19:27