':' (Dấu hai chấm) làm gì trong JavaScript?


178

Tôi đang học JavaScript và trong khi duyệt qua thư viện jQuery tôi thấy :(dấu hai chấm) đang được sử dụng rất nhiều. Cái này dùng để làm gì trong JavaScript?

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

Câu trả lời:


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

có chức năng tương đương với

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

14
Vì vậy, tương tự như cú pháp khởi tạo đối tượng C #. Cảm ơn!
Mi-chê

Điều gì nếu không có đối tượng kèm theo?
theonlygusti

@ FranciscI.B nếu tôi phải đoán, tôi nghĩ đó là TypeScript, là một siêu bộ JavaScript. Đó là khai báo một lớp, với một var có tên xMin, có kiểu là float. Khá sur đó là những gì có nghĩa là.
Sal_Vader_808

96

Ngoài ra, một dấu hai chấm có thể được sử dụng để dán nhãn cho một tuyên bố. ví dụ

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

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

}

1
LABEL A ((TUYÊN BỐ))
Muhammad Umer

4
Chào mừng bạn đến với Mã Spagetti :)
Leo The Four

Một goto không thể được ngụy trang: bạn chỉ cần phá vỡ goto; và bạn đã tìm thấy nó! ;)
Andrew


vâng, đó là lý do tại sao a => {b: 2} sẽ không ném và trả lại không xác định
Pavlo D

70

Các bạn đang quên rằng dấu hai chấm cũng được sử dụng trong toán tử ternary (mặc dù tôi không biết nếu jquery sử dụng nó cho mục đích này).

toán tử ternary là một biểu thức (biểu thức trả về một giá trị) của câu lệnh if / then. nó được sử dụng như thế này:

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

Một toán tử ternary cũng có thể được sử dụng để tạo ra các tác dụng phụ giống như nếu / sau đó, nhưng đây là thực tế cực kỳ tồi tệ.


2
AKA "nhà điều hành ternary". Lưu ý rằng OP đang nghiêm túc hỏi về trường hợp nghĩa đen của đối tượng. Nếu chúng ta đi xa hơn những gì OP yêu cầu, dấu hai chấm cũng được sử dụng trong nhãn.
Ates Goral

14
vâng tôi có ý đó Tôi thực sự nên tránh xa internet, thực sự, nếu tôi đi xung quanh việc xác định sai các khái niệm lập trình như thế.
Breton

Thật tuyệt vời khi thấy nó được sử dụng cho nhãn và bất cứ điều gì khác vì vậy việc sử dụng không bao giờ bị nhầm lẫn @AtesGoral bởi vì bây giờ tôi vẫn đang làm phiền chúng ngay bây giờ.
Shane

Có lẽ sẽ dễ dàng hơn khi liệt kê những thứ: không được sử dụng trong Javascript.
kingfrito_5005

45

Về cơ bản, ':' là một dấu phân cách cho các cặp giá trị khóa. Trong ví dụ của bạn, nó là một ký hiệu đối tượng Javascript.

Trong javascript, Đối tượng được xác định bằng dấu hai chấm phân định định danh cho thuộc tính và giá trị của nó để bạn có thể có các mục sau:

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

và sau đó sử dụng nó như:

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

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

Một tập hợp con của điều này còn được gọi là JSON (Ký hiệu đối tượng Javascript) rất hữu ích trong các cuộc gọi AJAX vì nó nhỏ gọn và nhanh chóng phân tích các ngôn ngữ phía máy chủ và Javascript có thể dễ dàng tuần tự hóa chuỗi JSON thành một đối tượng.

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

Bạn cũng có thể đặt chìa khóa bên trong dấu ngoặc kép nếu nó chứa một số loại ký tự hoặc khoảng trắng đặc biệt, nhưng tôi không khuyến nghị điều đó bởi vì nó chỉ khiến mọi thứ khó xử lý hơn.

Hãy ghi nhớ rằng đối tượng JavaScript Literal Notation bằng ngôn ngữ JavaScript là khác biệt so với các tiêu chuẩn JSON cho thông điệp đi qua. Sự khác biệt chính giữa 2 là các hàm và hàm tạo không phải là một phần của tiêu chuẩn JSON , nhưng được phép trong các ký tự đối tượng JS.


2
Khi tôi đọc phản hồi của bạn, tôi nghĩ rằng tôi sẽ bỏ phiếu, nhưng sau đó bạn nói rằng "Nó còn được gọi là JSON". Các đối tượng bằng chữ và JSON chắc chắn không giống nhau, thực sự các ví dụ của bạn trước khi bạn đề cập đến JSON không phải là JSON hợp lệ.
nnnnnn

@nnnnnn Sự khác biệt giữa 2 là rất tinh tế, nhưng dù sao cũng quan trọng. Tôi đã cập nhật câu trả lời của mình để cụ thể hơn về vấn đề đó.
Dan Herbert

1
Tôi thấy cập nhật. Đẹp. Lưu ý rằng JSON yêu cầu các tên chính phải được trích dẫn.
nnnnnn

Tại sao bạn phải đề cập đến tất cả hai lần đó? Khi bạn nói "và sau đó sử dụng nó như thế"
Harsha

17

Nó là một phần của cú pháp đối tượng. Định dạng cơ bản là:

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

Sau đó, bạn có thể truy cập các giá trị này với:

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

Bạn thậm chí có thể có các hàm làm giá trị, về cơ bản cung cấp cho bạn các phương thức của đối tượng:

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

1
Tuyệt vời vì nó đã cho tôi thuật ngữ để tìm kiếm và tìm hiểu thêm thông tin.
johnny

13

Nó có thể được sử dụng để liệt kê các đối tượng trong một biến. Ngoài ra, nó được sử dụng một chút trong cách viết tắt của câu if:

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

Và gọi nó như thế này

alert(something.man);

Ngoài ra câu if:

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

10

Chúng ta đừng quên câu lệnh chuyển đổi, trong đó dấu hai chấm được sử dụng sau mỗi "trường hợp".


10

Đây thường là các tình huống trong đó dấu hai chấm ':' được sử dụng trong JavaScript

1- Khai báo và khởi tạo một đối tượng

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

2- Đặt nhãn (Không được đề xuất vì nó dẫn đến cấu trúc điều khiển phức tạp và mã Spaghetti)

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

3- Trong tuyên bố chuyển đổi

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- Trong Ternary Toán tử

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

1
Một dấu hai chấm đơn cũng có thể được sử dụng để đánh giá ngắn mạch thay cho ||. Ví dụ: var a = false, b = a || 'Default value';tương đương vớivar a = false, b = a : 'Default value';
Shaun Cockerill

7

Đó là JSON, hoặc ký hiệu đối tượng JavaScript. Đó là một cách nhanh chóng để mô tả một đối tượng hoặc bản đồ băm. Thứ trước dấu hai chấm là tên thuộc tính và thứ nằm sau dấu hai chấm là giá trị của nó. Vì vậy, trong ví dụ này, có một thuộc tính "r", có giá trị là bất cứ thứ gì trong biến r. Tương tự cho t.


3
JSON chỉ là một tập hợp con của cú pháp khởi tạo đối tượng JavaScript. '{A: k ()}' trong đó k là một hàm không phải là JSON, nhưng nó là cú pháp khởi tạo đối tượng JavaScript hoàn toàn tốt.
yfeldblum

12
Để được mô phạm, không, nó không phải là "JSON". Nó trông giống như JSON. Đó là cú pháp đối tượng có nguồn gốc từ JavaScript và có thể xuất hiện trực tiếp bên trong mã. Mặt khác, JSON là một định dạng tuần tự hóa / trao đổi dữ liệu. JSON chỉ là JSON khi nó "trên không", tức là trong quá cảnh hoặc khi nó chưa được phân tích thành một đối tượng thực sự.
Ates Goral

3
1 cho Ates Goral, nhưng lưu ý rằng ví dụ đưa ra thậm chí không trông giống như JSON: tên sẽ phải trong hai dấu ngoặc kép cho nó là cú pháp JSON hợp lệ.
NickFitz

3

Một sai lầm ngu ngốc tôi đã làm cách đây một thời gian có thể giúp một số người.

Hãy nhớ rằng nếu bạn đang sử dụng ":" trong một sự kiện như thế này, giá trị sẽ không thay đổi

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

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

            ...
        });

Vì vậy, "nub0x" sẽ khởi tạo với sự kiện đầu tiên xảy ra và sẽ không bao giờ thay đổi giá trị của nó. Nhưng "nub0y" sẽ thay đổi trong các sự kiện tiếp theo.


Tôi đã phát hiện ra điều này, và fyi thực sự những gì đang xảy ra ở đây là bạn đang sử dụng nhãn trước tuyên bố của mình. Không có nhiệm vụ nào được thực hiện, nhưng câu lệnh event.target.offsetLeft + event.target.clientWidth/2;sẽ chạy mỗi khi phương thức ondrag của bạn được gọi, nhưng không bao giờ gán giá trị chonub0x
kketch

Trên thực tế, điều này đang được sử dụng như một đánh giá, và :nó đang được đối xử như thể nó là một ||. Do đó, event.target.offsetLeft + event.target.clientWidth/2;sẽ chỉ kích hoạt mỗi lần cung cấp nub0xtương đương với sai.
Gà trống Shaun

1

Một cách sử dụng dấu hai chấm khác trong JavaScript là đổi tên một biến, đó là:

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";

Điều này hữu ích nếu bạn sử dụng thư viện bên thứ ba trả về các giá trị có tên biến khó xử / dài mà bạn muốn đổi tên trong mã của mình.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.