Birisi Javascript dolar işareti açıklayabilir?


378

Söz konusu kod burada:

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

Değişken adındaki dolar işaretinin amacı nedir, neden sadece hariç tutmuyorsunuz?



[ttony21'nin cevabı] [1] Javascript, cf. [resmi belgeler] [2] [1]: stackoverflow.com/questions/846585/... [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

Bu konu oldukça eskidir, ancak ana tarayıcıların $, $$ global vairable'ları standartlaştırdığı görülüyor. $ Vs $$ ne yapmalı?
Nick Sotiros

Söz konusu tarayıcı konsolunda değilseniz, hiçbir şey. Örneğin Chrome, $ ve $$ document.querySelectordocument.querySelectorAll
Kevin B

Yanıtlar:


381

Değişkendeki bir '$', bir alt çizgi gibi yorumlayıcıya özel bir şey ifade etmez.

Gördüğüm kadarıyla, jQuery kullanan birçok kişi (örnek kodunuz bana benziyor), kolayca tanımlanmaları ve örneğin tamsayılarla karıştırılmaması için $ ile bir jQuery nesnesi içeren değişkenleri önek eğilimindedir. .

$()JQuery'deki dolar işareti işlevi , sık kullanılan bir kitaplık işlevidir, bu nedenle kısa bir ad istenir.


86
Not: Varsayılan olarak jQuery, "jQuery" kısayolu olarak "$" kullanır. Bunun diğer Javascript kitaplıklarının kullanımı üzerinde bazı etkileri vardır. Bkz. Docs.jquery.com/Using_jQuery_with_Other_Libraries
Thimmayya

17
Başka bir deyişle, $ değişken / işlev adlarındaki kabul edilebilir herhangi bir sembolle karşılaştırılabilir. Yapmak var $=function(){}, yapmakla aynı şeydir var a=function(){}.
F-3000

24
Thimmayya yorum "Varsayılan olarak, jQuery" jQuery "için bir kısayol olarak" $ "kullanır" "Jquery web sitesinde her sayfanın en üstünde kalın harflerle olmalıdır, örnekleri korkunç belgelenmiştir.
RustyH

$ İşlev parametresi olarak belirtildiğinde ne olur? Ben gibi bazı koda bakıyorum jQuery(document).ready(function($){... Sonra $ fonksiyon uygulaması içinde kullanılır.
still_dreaming_1

4
@ ThrowawayAccount3Million İsmin sadece bir parçası. $scope$ Durumunda, bu addaki karakterlerden biridir. eSonunda kalkış yapar gibi , $scopeişe yaramaz, bu yüzden $iradeyi almak da işe yaramaz. Eğer böyle bir şey görürseniz $( "a" ).addClass( "test" ), dolar işareti ne olursa olsun tam adıdır.
still_dreaming_1

49

Örneğinizde, $ adının bir karakteri olmak dışında özel bir önemi yoktur.

Ancak , ECMAScript 6'da (ES6) $ bir Şablon Değişmezini temsil edebilir

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

37

$ İşareti, değişkenler ve işlevler için bir tanımlayıcıdır.

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

Bu dolar işareti ne için açık bir açıklama var.

Alternatif bir açıklama: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
Javascript'in türleri vardır; ve her halükarda, dolar işareti bununla nasıl bağlantılı? Bu sadece Javascript'te yasal bir tanımlayıcı olan bir karakter.
Erik Kaplun

10
Bu bağlantıya "açık" bir açıklama diyeceğimden emin değilim. İşlev ve değişken adlarını tanımlarken $ 'ın sadece geçerli bir karakter olduğunu açıklamak gerçekten 6+ paragraf gerektirir mi?
hafif

1
İlk bağlantı tekrar çalışıyor gibi görünüyor. @Slight ile alternatif açıklamanın korkunç olduğunu kabul etmeliyim.
Sander Garretsen

Bağlantıdaki örnek kodun anlaşılması oldukça kolaydır. Müthiş!
蔡宗容

32

Dolar işareti, normal bir harf veya alt çizgi ( _) gibi ele alınır . Tercüman için özel bir önemi yoktur.

Birçok benzer dilden farklı olarak, Javascript'teki tanımlayıcılar (işlevsel ve değişken adları gibi) yalnızca harf, sayı ve alt çizgi içeremez, aynı zamanda dolar işareti de içerebilir . Bir dolar işareti ile başlamasına izin verilir veya sadece bir dolar işareti ve başka bir şeyden oluşurlar .

Bu nedenle, $Javascript'te geçerli bir işlev veya değişken adıdır.

Neden bir tanımlayıcıda bir dolar işareti istesin ki?

Sözdizimi, bir tanımlayıcıda dolar işaretinin belirli bir kullanımını zorunlu kılmaz, bu nedenle nasıl kullanmak istediğiniz size bağlıdır. Geçmişte, bir tanımlayıcının yalnızca oluşturulan kodda bir dolar işareti ile, yani elle değil, bir kod oluşturucu tarafından oluşturulan kodla başlatılması önerildi .

Ancak örneğinizde, durum böyle görünmüyor. Birisi sadece eğlenmek için bir dolar işareti koymuş gibi görünüyor - belki de alışkanlıktan ya da başka bir şeyden yapan bir PHP programcısıydı. PHP'de, tüm değişken adlarının önünde bir dolar işareti olmalıdır.

Günümüzde bir tercümanda dolar işareti için başka bir yaygın anlam daha vardır: adı yalnızca tek bir dolar işaretinden ( $) oluşan jQuery nesnesi . Bu, Prototip gibi önceki Javascript çerçevelerinden ödünç alınan bir kuraldır ve jQuery bu tür diğer çerçevelerle kullanılırsa, her ikisi de adı kullanacakları için bir ad çakışması olacaktır $(jQuery, global nesnesi için farklı bir ad kullanacak şekilde yapılandırılabilir) . Javascript'te jQuery'nin tek dolar işaretini nesne adı olarak kullanmasına izin veren özel bir şey yoktur; Yukarıda belirtildiği gibi, sadece başka bir geçerli tanımlayıcı adıdır.


Artık jQuery nesnesiyle bu sorunu çözemezsiniz var $j = jQuery.noConflict();$ j jQuery nesnesidir.
Justin Liu

6

Dolar işareti 2015-2016 ecmascript'te 'şablon değişmez değerler' olarak kullanılır. Misal:

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

İşte çalışma örneği: https://es6console.com/j3lg8xeo/ Bu işarete dikkat edin " ` ", normal tırnak işaretleri değil.

U, jQuery kütüphanesiyle çalışırken $ ile de tanışabilir .

Normal İfadelerdeki $ işareti satır sonu anlamına gelir.


4

Sebep yok. Belki kodlayan kişi PHP'den geldi. "_İtem" veya "item" veya "item $$" olarak adlandırdığınız gibi aynı etkiye sahiptir.

Bir sonek olarak ("item $", telaffuz edilen "items" gibi), Macar gösterimine benzer şekilde "Fin Notasyonu" adı verilen bir sözleşme olarak DOM öğesi gibi gözlemlenebilir bir ifadeyi ifade edebilir .


1

İşte kısa bir video açıklaması: https://www.youtube.com/watch?v=Acm-MD_6934

Ecma Uluslararası Tanımlayıcı Adlarına göre , Unicode standardının 5. bölümünün “Tanımlayıcılar” bölümünde verilen dilbilgisine göre , bazı küçük değişikliklerle yorumlanan tokenlerdir. Tanımlayıcı, ReservedWord olmayan bir TanımlayıcıAdıdır ( bkz. 7.6.1 ). Unicode tanımlayıcı dilbilgisi, Unicode Standardı tarafından belirtilen normatif ve bilgilendirici karakter kategorilerini temel alır. Unicode standardının 3.0 sürümünde belirtilen kategorilerdeki karakterlere, tüm uygun ECMAScript uygulamaları tarafından bu kategorilerdeki gibi davranılmalıdır. Bu standart, belirli karakter eklemelerini belirtir:

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

Daha fazla bilgi için: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma International , 1961 yılında kurulmuş ve Bilgi ve İletişim Teknolojileri (BİT) ve Tüketici Elektroniği (CE) standartlarına adanmış bir endüstri birliğidir.


Bu bağlantı soruyu cevaplayabilse de, cevabın önemli kısımlarını buraya eklemek ve bağlantıyı referans olarak sağlamak daha iyidir. Bağlantı verilen sayfa değişirse, yalnızca bağlantı yanıtları geçersiz olabilir.
TartanLlama

... @TartanLlama Cevabımı düşürdüyseniz lütfen güncellenmiş cevabımı okuyun. Teşekkür ederim.
Nomis

Ben değildim! Sadece işaretledim.
TartanLlama

... Tamam, bunu aşağı oylayan kişiye, lütfen nedenini açıklayın ve düzenlenen cevabımı okuyun. Teşekkür ederim.
Nomis

5
... @TartanLlama Bu sadece (tekrar) Stackoverflows anonim düşürme özelliğinin bozuk olduğunu kanıtlıyor. Kabul edilen cevaplarla eski soruları cevaplamak benim için sorun değil, çünkü cevaplara göz atarken diğer cevapları görmeyi yararlı buluyorum.
Nomis

1

JQuery kullanılırken $, değişken adında sembolün önek olarak kullanılması yalnızca kural gereğidir; tamamen isteğe bağlıdır ve yalnızca değişkenin örneğinizde olduğu gibi bir jQuery nesnesini içerdiğini belirtmeye yarar.

Bu, nesneye başka bir jQuery işlevinin çağrılması gerektiğinde, onu $()tekrar sarmanıza gerek kalmayacağı anlamına gelir . Örneğin, bunları karşılaştırın:

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

İle $önek zaten jQuery nesneleri tutan değişkenleri anında tanınabilir ve kod daha okunabilir ve birlikte ortadan kaldırır çift / çoklu sarma $().

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.