JavaScript'te ':' (iki nokta üst üste) ne yapar?


178

JavaScript öğreniyorum ve jQuery kitaplığı göz atarken :(kolon) çok kullanılan görüyorum . Bu JavaScript'te ne için kullanılır?

// Return an array of filtered elements (r)
// and the modified expression string (t)
   return { r: r, t: t };

Yanıtlar:


247
var o = {
    r: 'some value',
    t: 'some other value'
};

işlevsel olarak eşittir

var o = new Object();
o.r = 'some value';
o.t = 'some other value';

14
Yani C # nesne başlatıcı sözdizimine benzer. Teşekkürler!
Micah

Çevreleyen bir nesne yoksa ne olur?
theonlygusti

@ FranciscI.B tahmin etmek zorunda kalırsam, bu JavaScript'in bir üst kümesi olan TypeScript olduğunu düşünüyorum. Türü bir kayan nokta olan xMin adlı bir varlığa sahip bir sınıfı bildiriyor. Oldukça sur bu demek.
Sal_Vader_808

96

Ayrıca, bir ifadeyi etiketlemek için iki nokta üst üste kullanılabilir. Örneğin

var i = 100, j = 100;
outerloop:
while(i>0) {
  while(j>0) {
   j++

   if(j>50) {
     break outerloop;
   }
  }
i++

}

1
ETİKET A ((BİLDİRİM))
Muhammed Umer

4
Spagetti Koduna Hoş Geldiniz :)
Dörtlü Aslan

Bir goto kılık değiştiremez: sadece gotoyu kırarsınız; ve buldunuz! ;)
Andrew

1
JS Etiketi için MDN Referans sayfası: developer.mozilla.org/tr-TR/docs/Web/JavaScript/Reference/…
Peter

Evet, bu yüzden a => {b: 2} atmayacak ve tanımsız dönmeyecek
Pavlo D

70

Siz kolonun üçlü operatörde de kullanıldığını unutuyorsunuz (jquery'nin bunu bu amaçla kullanıp kullanmadığını bilmiyorum).

üçlü operatör, if / then ifadesinin bir ifade formudur (ifadeler bir değer döndürür). şu şekilde kullanılır:

var result = (condition) ? (value1) : (value2) ;

Üçlü bir operatör de tıpkı / o zamanki gibi yan etkiler üretmek için kullanılabilir, ancak bu son derece kötü bir uygulamadır.


2
AKA "üçlü operatör". OP'nin kesinlikle nesne değişmez durumu hakkında sorduğunu unutmayın. OP'nin istediklerinin ötesine geçersek, iki nokta üst üste etiketlerde de kullanılır.
Ateş Goral

14
evet öyle demek istedim. Sadece internetten uzak durmalıyım, gerçekten, eğer böyle kötü bir şekilde yanlış tanımlayan programlama kavramlarını dolaşacaksam.
Breton

Etiketler için kullanıldığını görmek harika olurdu ve bu yüzden kullanım asla @AtesGoral ile karıştırılmamalıdır, çünkü şu anda hala şu anda googling ediyorum.
Shane

Belki şu şeyleri listelemek daha kolay olurdu: Javascript'te kullanılmaz.
kingfrito_5005

45

':' Temel değer çiftleri için bir sınırlayıcıdır. Örneğinizde bir Javascript Nesnesi Değişmez gösterimidir.

Javascript'te, Objeler özelliği için tanımlayıcıyı sınırlayan iki nokta üst üste işareti ve değeri ile tanımlanır, böylece aşağıdakilere sahip olabilirsiniz:

return { 
    Property1 : 125,
    Property2 : "something",
    Method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

ve sonra şöyle kullanın:

var o =  { 
    property1 : 125,
    property2 : "something",
    method1 : function() { /* do nothing */ },
    array: [5, 3, 6, 7]
};

alert(o.property1); // Will display "125"

Bunun bir alt kümesi, AJAX çağrılarında yararlı olan JSON (Javascript Nesne Notasyonu) olarak da bilinir, çünkü sunucu tarafı dillerinde ayrıştırmak için kompakt ve hızlıdır ve Javascript bir JSON dizesini bir nesneye kolayca serileştirebilir.

// The parenthesis '(' & ')' around the object are important here
var o = eval('(' + "{key: \"value\"}" + ')');

Ayrıca, bir tür özel karakter veya boşluk içeriyorsa anahtarı tırnak içine alabilirsiniz, ancak bunu tavsiye etmem çünkü işleri daha zorlaştırır.

JavaScript dilinde JavaScript Nesnesi Değişmez Gösteriminin mesaj iletimi için JSON standardından farklı olduğunu unutmayın . 2 arasındaki temel fark, işlevlerin ve yapıcıların JSON standardının bir parçası olmaması , ancak JS nesnesi değişmezlerinde izin verilmesidir.


2
Cevabınızı okurken oy vereceğimi düşündüm, ama sonra "JSON olarak da bilinir" dediniz. Nesne değişmez değerleri ve JSON kesinlikle aynı şey değildir , aslında JSON'dan bahsetmeden önce örnekleriniz geçerli JSON değildir.
nnnnnn

@nnnnnn 2 arasındaki fark çok incedir, ancak yine de önemlidir. Cevabımı bu konuda daha spesifik olacak şekilde güncelledim.
Dan Herbert

1
Güncellemeyi görüyorum. Güzel. JSON'un anahtar adlarının tırnak içinde olmasını gerektirdiğini unutmayın .
nnnnnn

Neden bunlardan iki kez bahsetmek zorundasın? "Ve sonra böyle kullanın" dediğinde
Harsha

17

Nesne değişmez sözdiziminin bir parçasıdır. Temel biçim:

var obj = { field_name: "field value", other_field: 42 };

Ardından bu değerlere aşağıdakilerle erişebilirsiniz:

obj.field_name; // -> "field value"
obj["field_name"]; // -> "field value"

Temel olarak size nesnenin yöntemlerini veren değer olarak işlevlere sahip olabilirsiniz:

obj['func'] = function(a) { return 5 + a;};
obj.func(4);  // -> 9

1
Harika çünkü bana daha fazla bilgi arama ve bulma terimi verdi.
johnny

13

Bir değişkendeki nesneleri listelemek için kullanılabilir. Ayrıca, bir if cümlesinin stenografisinde biraz kullanılır:

var something = {face: 'hello',man: 'hey',go: 'sup'};

Ve böyle diyorsun

alert(something.man);

Ayrıca if cümlesi:

function something() {  
  (some) ? doathing() : dostuff(); // if some = true doathing();, else dostuff();
}

10

Her "durumdan" sonra kolon kullanılan switch deyimini unutmayalım.


10

Bunlar genellikle JavaScript'te iki nokta üst üste ':' ifadesinin kullanıldığı senaryolardır

1- Bir Nesneyi Bildirme ve Başlatma

var Car = {model:"2015", color:"blue"}; //car object with model and color properties

2- Etiket Ayarlama (Karmaşık kontrol yapısı ve Spagetti kodu ile sonuçlandığı için önerilmez)

List: 
while(counter < 50)
{
     userInput += userInput;
     counter++;
     if(userInput > 10000)
     {
          break List;
     }
}

3- Anahtar İfadesinde

switch (new Date().getDay()) {
    case 6:
        text = "Today is Saturday";
        break; 
    case 0:
        text = "Today is Sunday";
        break; 
    default: 
        text = "Looking forward to the Weekend";
}

4- Üçlü Operatörde

document.getElementById("demo").innerHTML = age>18? "True" : "False";

1
Tek bir kolon, yerine kısa devre değerlendirmesi için de kullanılabilir ||. Örnek: var a = false, b = a || 'Default value';eşdeğerdirvar a = false, b = a : 'Default value';
Shaun Cockerill

7

Bu JSON veya JavaScript Nesne Gösterimi. Bir nesneyi veya karma haritayı tanımlamanın hızlı bir yoludur. İki nokta üst üste işaretinden önceki şey özellik adıdır ve iki nokta üst üste işaretinden sonraki şey değeridir. Yani bu örnekte, değeri r değişkenindeki her şey olan "r" özelliği vardır. Aynı şey t.


3
JSON, JavaScript nesne başlatma sözdiziminin yalnızca bir alt kümesidir. '{a: k ()}' burada k bir işlev JSON değildir, ancak JavaScript nesnesi başlatma sözdiziminde mükemmel bir seçenektir.
yfeldblum

12
Bilgiçlik taslayan, hayır, "JSON" değil. Bu görünüyor JSON gibi. JavaScript'e özgü olan ve doğrudan kodun içinde görünebilen nesne değişmez sözdizimidir. Öte yandan JSON bir veri serileştirme / değişim biçimidir. JSON yalnızca "havada", yani geçişte veya henüz gerçek bir nesneye ayrıştırılmadığında JSON'dur.
Ateş Goral

3
Ateş Goral için 1, ancak verilen örnek bile etmediğini not bakmak JSON gibi: isimler geçerli JSON sözdizimi olabilmesi için çift tırnak içinde olması gerekir.
NickFitz

3

Bir süre önce yaptığım aptalca bir hata, bazı insanlara yardımcı olabilir.

Böyle bir olayda ":" kullanıyorsanız, değerin değişmeyeceğini unutmayın.

var ondrag = (function(event, ui) {
            ...

            nub0x: event.target.offsetLeft + event.target.clientWidth/2;
            nub0y = event.target.offsetTop + event.target.clientHeight/2;

            ...
        });

Böylece "nub0x" gerçekleşen ilk olayla başlayacaktır ve değerini asla değiştirmeyecektir. Ancak "nub0y" sonraki etkinlikler sırasında değişecektir.


Bunun üzerine geldim ve aslında burada olan şey, ifadenizden önce bir etiket kullanmanızdır. Hiçbir atama yapılmaz, ancak event.target.offsetLeft + event.target.clientWidth/2;ondrag yönteminiz her çağrıldığında ifade çalışır, ancak değeri aslanub0x
kketch

Aslında bu bir değerlendirme olarak kullanılıyor ve :sanki a ||. Bu nedenle, event.target.offsetLeft + event.target.clientWidth/2;yalnızca nub0xfalse değerine eşitlendiğinde her tetiklenir .
Shaun Cockerill

1

JavaScript'te iki nokta üst üste kullanımı bir değişkeni yeniden adlandırmaktır, yani:

const person = { 
    nickNameThatIUseOnStackOverflow: "schlingel",
    age: 30,
    firstName: "John"
};
const { nickNameThatIUseOnStackOverflow: nick } = person; // I take nickNameThatIUseOnStackOverflow but want to refer it as "nick" from now on.
nick = "schling";

Kodunuzda yeniden adlandırmak istediğiniz garip / uzun değişken adlarına sahip değerleri döndüren bir üçüncü taraf kitaplığı kullanıyorsanız bu kullanışlıdır.

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.