JavaScript değişkeni neden dolar işareti ile başlasın? [çiftleme]


1037

Dolar işareti ile başlayan değişkenlere sahip JavaScript'i sık sık görüyorum. Bir değişkene ne zaman / neden önek eklemeyi seçersiniz?

( $('p.foo')JQuery ve diğerlerinde gördüğünüz sözdizimini sormuyorum ama normal değişkenler $nameve gibi $order)


16
Muhtemelen Perl programlamasından alınan bir alışkanlık. (düzenle: veya PHP)
brien

5
PHP veya Perl gibi bazı diller gerektirir - dev'in javascript'te gerekli olmadığını hatırlamadığını tahmin ediyorum.
Rich Bradshaw

3
ya da alışkanlığı bırakmaktan rahatsız olmak istemediler. Bu, büyük olasılıkla doğru cevaptır, çünkü kendi web sayfalarını hackleyen birçok geliştirici PHP ve javascript kullanarak bunu yapar.
BlueRaja - Danny Pflughoeft

@DonaldDuck Kopyalarınızın yanlış yönde olabileceğini düşünüyorum - bu bağlantınızdan 7 ay daha eski
Ken

1
@Ken Bu cevaba göre , önemli olan yaş değil, cevapların ne kadar iyi olduğu. Şahsen diğer sorunun cevaplarının daha iyi olduğunu düşünüyorum, bu yüzden bunu bir kopya olarak kapatmak için oy verdim. Bunun cevaplarının daha iyi olduğunu düşünüyorsanız, diğerini kopya olarak kapatmak için oy verebilirsiniz.
Donald Duck

Yanıtlar:


1420

Çok yaygın kullanım jQuery ayırt etmektir jQuery diğer değişkenlerden değişkenler saklanan nesnelerin.

Örneğin, ben tanımlamak:

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

Bu jQuery kod yazma konusunda çok yararlı buluyorum ve farklı özellikleri bir dizi olan jQuery nesneleri görmek kolaylaştırır .


98
Bu GERÇEK Macar notasyonu. Değişkende nelerin depolandığı hakkında, değişken adının ötesinde bilgi aktarır. A ++ Macaristan'ı tekrar ederdi.
Artemis

2
Keşke jquery belgeleri bu gösterimi de kullansaydı ... Gerçekten çok yardımcı oluyor.
pedromanoel

1
@Artemis Macarca'yı neredeyse 20 yıl önce aldım ve kullanmayı hiç bırakamadım. Yıllar boyunca birçok insan benim kullanımımla büyük memnuniyetsizlik dile getirdi, ancak nedenini anlayamıyorum çok yararlı.
Night Owl

10
$ İçin Yaşasın. Ancak değişken adlarındaki alt çizgiler önlenmeli, normal JS-Değişkenleri camelCase kullanmalıdır. email_fields -> emailField. Yalnızca _ için geçerli kullanım örneği, özel / korumalı mülkler için önektir.
cschuff

11
@cschuff Oldukça ifade bu ... Tüm yerel değişkenler için alt çizgi tercih ediyorum ve prototip nesnelerin özellikleri için deve-case ayırıyorum.
Paul

250

ECMAScript'in 1., 2. ve 3. Baskılarında , otomatik olarak oluşturulmuş kod bağlamı dışında $ -rerefixed değişken adlarının kullanılması spesifikasyon tarafından açıkça önerilmemiştir:

Bir tanımlayıcının herhangi bir yerinde dolar işareti ( $) ve alt çizgiye ( _) izin verilir. Dolar işareti, yalnızca mekanik olarak oluşturulan kodda kullanılmak üzere tasarlanmıştır.

Ancak, sonraki sürümde (geçerli olan 5. Baskı ), bu kısıtlama kaldırıldı ve yukarıdaki pasaj ile değiştirildi

Dolar işareti ($ ) ve alt çizgiye ( _) bir IdentifierName içinde herhangi bir yerde izin verilir .

Bu nedenle, $ işareti artık değişken adlarında serbestçe kullanılabilir. Bazı çerçeveler ve kütüphaneler, buradaki diğer cevaplarda belirtilen, sembolün anlamı ile ilgili kendi sözleşmelerine sahiptir.


3
Bu doğru olsa da, OP'nin sorusunu cevaplamaya gerçekten yardımcı oluyor mu? Şu anda kabul edilen cevap daha iyidir - acemi bir JS programcısı gördüğünde $variable, bunun nedeni büyük olasılıkla tüm jQuery nesnesini içermesidir.
rinogo

14
@rinogo Soruyu, kullanılan kütüphaneler hakkındaki varsayımlara bağlı olmayan mutlak bir gerçekle cevaplar.
Oriol

1
@yoyo_fun: Bir insan tarafından yazılmak yerine bir bilgisayar tarafından üretilen kod.
cic


3
"Bu soruyu mutlak bir gerçekle cevaplıyor". Aslında, gerçek şu ki, devs bu sözleri spesifikasyon dilinden tamamen görmezden geliyordu ... ve muhtemelen hala öyle. :)
Stijn de Witt

61

Diğerlerinin de belirttiği gibi, dolar işareti mekanik olarak oluşturulan kod tarafından kullanılmak üzere tasarlanmıştır. Ancak, bu kural çılgınca popüler olan bazı JavaScript kütüphaneleri tarafından kırılmıştır. JQuery, Prototype ve MS AJAX (AKA Atlas), bu karakteri tanımlayıcılarında (veya tüm tanımlayıcı olarak) kullanır.

Kısacası istediğiniz zaman kullanabilirsiniz $. (Tercüman şikayet etmeyecektir.) Soru ne zaman istediğiniz kullanmak ?

Ben şahsen kullanmıyorum ama bence kullanımı geçerli. MS AJAX, bir işlevin biraz daha ayrıntılı çağrı için bir takma ad olduğunu belirtmek için kullandığını düşünüyorum.

Örneğin:

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

Bu makul bir kongre gibi görünüyor.


JQuery bunu tanımlayıcılarda KULLANMAZ, $ .X olmasının nedeni daha az yazmak zorunda olmanızdır - jQuery.X aynıdır, aslında $ .X jQuery.X için bir ad-takma adıdır - her jQuery işlevselliği jQuery-ns, değil $
specializt

5
@specializt dediğim gibi 5 yıl önce "ya da bir tanımlayıcı olarak". Tanımlayıcı ile, dilde bir anahtar kelime olmayan sözcüksel bir belirteç olan standart CS tanımını kastediyorum. Bu durumda $ ve jQuery aynı değere başvuran iki farklı tanımlayıcıdır. Ancak yine de her ikisi de tanımlayıcıdır.
Benry

56

AngularJS bağlamında, $önek yalnızca çerçevenin kodundaki tanımlayıcılar için kullanılır. Çerçevenin kullanıcılarına, çerçeveyi kendi tanımlayıcılarında kullanmamaları talimatı verilir:

Açısal Ad Alanları $ve$$

Kodunuzla yanlışlıkla ad çakışmalarını önlemek için, Açısal, ortak nesnelerin $adlarını ve ile özel nesnelerin adlarını önek olarak ekler $$. Lütfen kodunuzda $veya $$önekini kullanmayın .

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


35

Bu sözleşmeyi 2006'da tekrar başlatan ve jQuery erken posta listesinde tanıtan kişiydim, bu yüzden etrafındaki tarih ve motivasyonun bir kısmını paylaşmama izin verin.

Kabul edilen cevap şu örneği vermektedir:

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

Ama bu onu gerçekten iyi göstermiyor. Olmasa bile $, burada iki farklı değişken ismimiz olacaktı emailve email_field. Orada çok iyi. $Zaten iki farklı ismimiz olduğunda neden isimlerden birine atmamız gerekiyor ?

Aslında, email_fieldburada iki nedenden dolayı kullanmazdım: names_with_underscoresdeyimsel JavaScript fielddeğil ve bir DOM öğesi için gerçekten mantıklı değil. Ama aynı fikri takip ettim.

Birkaç farklı şey denedim, aralarında örneğe çok benzeyen bir şey:

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

(Elbette bir jQuery nesnesinin birden fazla DOM öğesi olabilir, ancak üzerinde çalıştığım kod çok fazla id seçici , bu nedenle bu durumlarda 1: 1 yazışma vardı.)

Bir işlev parametre olarak bir DOM öğesi aldı ve ayrıca bunun için bir jQuery nesnesi gerekli başka bir durum vardı:

// 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
}

Bu biraz kafa karıştırıcı! Kod bitlerimden birinde email, jQuery nesnesidir ve emailElementDOM öğesidir, ancak diğerinde emailDOM öğesidir ve emailJQjQuery nesnesidir.

Tutarlılık yoktu ve onları karıştırmaya devam ettim. Ayrıca, aynı şey için iki farklı ad oluşturmaya devam etmek biraz sıkıntı vericiydi: biri jQuery nesnesi için ve diğeri eşleşen DOM öğesi için. Ayrıca email, emailElementve emailJQdiğer varyasyonları denemeye devam ettim.

Sonra ortak bir desen fark ettim:

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

JavaScript $isimler için başka bir harf gibi davrandığından ve her zaman bir $(whatever)çağrıdan bir jQuery nesnesi aldığımdan , desen nihayet üstüme geldi. Bir $(...)çağrı alabilir ve sadece bazı karakterleri kaldırabilirim ve oldukça güzel bir adla gelirdi:

$("#email")
$(email)

Üstü çizili mükemmel değildir, ancak şu fikri edinebilirsiniz: bazı karakterler silindiğinde, bu satırların her ikisi de şöyle görünür:

$email

İşte o zaman emailElementya da gibi bir sözleşmeye ihtiyacım olmadığını fark ettim emailJQ. Zaten bana bakan güzel bir kongre vardı: bazı karakterleri bir $(whatever)çağrıdan çıkar ve dönüşüyor $whatever.

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

ve:

// 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!
}

Bu yüzden her zaman iki farklı isim yapmak zorunda kalmadım, ancak aynı ismi bir $önekle veya önek olmadan kullanabilirsiniz . Ve $önek bir jQuery nesnesiyle uğraştığım güzel bir hatırlatma oldu:

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

veya:

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

21

Stevo haklı, dolar komut dosyası işaretinin anlamı ve kullanımı (Javascript ve jQuery platformunda, ancak PHP'de değil) tamamen anlamlıdır. $, tanımlayıcı adının bir parçası olarak kullanılabilen bir karakterdir. Buna ek olarak, dolar işareti Javascript'te karşılaşabileceğiniz en "tuhaf" şey değildir. Geçerli tanımlayıcı adlarına bazı örnekler:

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

Yukarıdaki tüm örnekler işe yarayacaktır.

Onları dene.


7

$ Karakterinin JavaScript motoru için özel bir anlamı yoktur. Az, AZ, _, 0-9 gibi değişken adlarında geçerli bir başka karakter.


2
doğru ama istenen şey değil. Buraya neden kullanıldığını anlamak için geldim ve görüyorum ki, bir dom nesnesi içeren bir varlığın arasında bir jquery nesnesi içeren bir var ayırt etmek gibi görünüyor.
rtpHarry

3
@rtpHorry sorusunu soran siz değildiniz ve "neden" sorusu burada yeterince yanıtlandı. Sorunun da belirtildiği gibi, bunun JQuery ile bir ilgisi yok. Aslında, yukarıdaki cevabın en iyi soruya uygun olduğunu düşünüyorum - bazen en küçük net cevaba ihtiyacınız olan bir şeyi kavramak istiyorsanız - $JavaScript'te özel bir anlam taşımaz. Dönemi.
amn

Kesin buluyorum .. ahem ... insanlar değişken isimlere dolar işareti eklemek istiyorlar.
glif

2

Yana _değişken adının başında genellikle özel değişkeni belirtmek için kullanılır (ya da en azından bir özel kalmasını planlanan), ben bulmak $jenerik kod kütüphaneleri için kendi kısa takma önünde eklemek için uygun.

Örneğin, jQuery kullanırken, $J(sadece yerine $) değişkeni kullanmayı ve $Pphp.js vb. Kullanırken kullanmayı tercih ederim .

Ön ek, kodu kendi statik değişkenlerim gibi diğer değişkenlerden görsel olarak farklı kılıyor, bu da beni kodun bir kütüphanenin veya başka bir bölümün parçası olduğu gerçeğine işaret ediyor ve konvansiyonu öğrendikten sonra başkalarıyla çatışmaya veya karıştırmaya daha az yatkın.

Ayrıca her kütüphane çağrısı için tekrarlanan tam bir adda olduğu gibi kodu daraltmaz (veya fazladan yazmayı gerektirir).

Bunu, tek tuşların olanaklarını genişletmek için değiştirici tuşların yaptıklarına benzer olarak düşünmeyi seviyorum.

Ama bu sadece benim kendi sözleşmem.


2

Son 4 yıldır yaşadığım gibi, birisinin bir değeri / nesneyi veya bir jQuery sarılmış DOM öğesini işaret eden değişkenin kolayca tanımlanmasına izin verecek

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

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

yukarıdaki örnekte "$ dataDiv" değişkeni gördüğümde kolayca bu değişken jQuery sarılmış DOM öğesine (bu durumda div) işaret olduğunu söyleyebiliriz. ve ayrıca $ ($ dataDiv) .append () yerine $ dataDiv.append (), $ dataDiv.html (), $ dataDiv.find () gibi nesneyi tekrar sararak tüm jQuery yöntemlerini çağırabilirim.

Umarım yardımcı olabilir. nihayet bunu takip etmenin iyi bir uygulama olacağını ancak zorunlu olmayacağını söylemek istiyorum.


0

${varname} jQuery geliştiricilerinin jQuery öğelerini tutan değişkenleri ayırt etmek için kullandıkları bir adlandırma kuralıdır.

Düz {varname}, metinler ve dizeler gibi genel öğeleri depolamak için kullanılır. ${varname}jQuery'den döndürülen öğeleri tutar.

{varname}JQuery öğelerini de saklamak için düz kullanabilirsiniz , ancak başlangıçta söylediğim gibi, bu onu düz değişkenlerden ayırır ve anlaşılmasını çok daha kolay hale getirir (düz bir değişken için karıştırdığınızı ve ne olduğunu anlamak için her şeyi aradığınızı hayal edin) .

Örneğin :

var $blah = $(this).parents('.blahblah');

Burada, falan döndürülen bir jQuery öğesini saklıyor.

Yani, $blahkodda bir başkası gördüğünde, bunun sadece bir dize veya bir sayı değil, bir jQuery öğesi olduğunu anlayacaklar.


6
6 yıl önce kabul edilen yanıtı yeniden ifade ettiniz.
Ken

Sanırım bu cevap "düşük kalite" değildir.
Sunny R Gupta

-1

Tanımlayıcılarınızı önek olarak kullanmak için kullanabilmenize rağmen, örneğin bir şablondaki değiştirme jetonları gibi oluşturulan kod için kullanılması gerekir.


1
Altı yıl önce doğru, ama artık değil.
Mark Amery

-2

Açısal kullanımlar, çerçeve tarafından oluşturulan özellikler içindir. Sanırım, ECMA-262 3.0 tarafından sağlanan (şimdi geçersiz) ipucu ile gidiyorlar.


-3

$ normal değişkenler için ortak değişkenler ve jquery değişkenleri arasında DISTINGUISH kullanılır. FLIPKART'a bir sipariş vermenize izin verin, eğer sipariş size dize çıktısını gösteren bir değişkense, o zaman "sipariş" olarak adlandırılır, ancak yer siparişine tıklarsak, bir nesne döndürülür ve bu nesne $ ile "$ olarak gösterilir böylece programcının javascript değişkenlerini ve jquery değişkenlerini kodun tamamından kaldırabilir.


-4

Dolar işareti ($) veya çift dolar işareti ($$) görürseniz ve bunun Prototip çerçevesinde ne anlama geldiğini merak ediyorsanız, işte cevabınız:

$$('div');
// -> all DIVs in the document.  Same as document.getElementsByTagName('div')!

$$('#contents');
// -> same as $('contents'), only it returns an array anyway (even though IDs must be unique within a document).

$$('li.faux');
// -> all LI elements with class 'faux'

Kaynak:
http://www.prototypejs.org/api/utility/dollar-dollar


5
OP özellikle dolar önekinin bu biçimini sormadığını belirtiyor.
Nigel Alderton

-5

Javascript değişkenleri ile bazen php ad kurallarını kullanmamın nedeni: Giriş doğrulaması yaparken, aynı algoritmaları hem istemci hem de sunucu tarafında çalıştırmak istiyorum. Gerçekten bakım basitleştirmek için, kodun iki tarafı mümkün olduğunca benzer görünmesini istiyorum. Değişken adlarında dolar işareti kullanmak bunu kolaylaştırır.

(Ayrıca, bazı makul yardımcı işlevler kodun benzer görünmesine yardımcı olur, örneğin girdi-değer aramalarını kaydırma, strlen, substr, vb. OO olmayan sürümleri. Yine de bazı manuel ayarlamalar gerektirir.)


-5

Geçerli bir JavaScript tanımlayıcı shuold bir harf, alt çizgi (_) veya dolar işareti ($) ile başlamalıdır; sonraki karakterler de rakam olabilir (0-9). JavaScript büyük / küçük harfe duyarlı olduğundan, harfler "A" - "Z" (büyük harf) ve "a" - "z" (küçük harf) karakterlerini içerir.

Ayrıntılar:
https://developer.mozilla.org/tr-TR/docs/Web/JavaScript/Guide/Grammar_and_types#Variables


Sorular 'JavasScript değişkeni $ ile başlayabilir mi?' Değil, 'Neden bir ...' olurdu. OP, böyle bir adlandırma kuralını kullanmak için bir neden arıyordu.
Steve Ives
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.