2012-12-13 52 views
12

Tôi đang tạo thư viện và tôi thường kiểm tra kết quả của đầu ra Closure Compiler để xem nó hoạt động như thế nào (tôi có kiểm tra đơn vị, nhưng tôi vẫn muốn xem phần biên dịch mã cho các gợi ý về cách nó có thể nén tốt hơn).Hãy giải thích cách sử dụng dấu hai chấm này trong javascript

Vì vậy, tôi đã tìm thấy đoạn mã rất kỳ lạ này mà tôi chưa từng thấy trước đây.

variable : { 
    some(); 
    code() 
} 

Lưu ý: đây là không phải là đối tượng theo nghĩa đen! Ngoài ra, không có ? ở bất kỳ đâu có thể làm cho nó a ?: conditional.
Mã đó nằm trong khối chức năng thông thường (an IIFE).

variable, trong trường hợp này, là biến không xác định. Không có mã nào làm cho nó đúng, sai, hoặc bất cứ điều gì, và chỉ để đảm bảo, tôi đặt console.log vào đó và thực sự, tôi nhận được ReferenceError.

Xin lưu ý rằng tôi cũng kiểm tra mã của mình trong IE8, vì vậy đây không chỉ là trong các trình duyệt hiện đại. Nó có vẻ là tiêu chuẩn, javascript cũ đồng bằng.

Vì vậy, hãy thử nghiệm nó. Bắn lên giao diện điều khiển của Chrome, tôi có được điều này:

undeclaredVariable:{console.log('does this get logged?')} // yes it does. 
trueValue:{console.log('what about this?')}    // same thing. 
falseValue:{console.log('and this?')}      // same thing. 

nhưng sau đó ...

(true):{console.log('does this work too?')} // SyntaxError: Unexpected token : 

... và ...

so?{console.log('is this a conditional?')}:{alert(123)} // Unexpected token . 

Vì vậy, nó làm gì?

thisThing:{console.log('is used to declare a variable?')} 
thisThing // ReferenceError: thisThing is not defined 

Xin vui lòng, tôi rất thích nếu ai đó có thể giải thích cho tôi biết mã này có nghĩa là gì hoặc ít nhất nó làm gì.

+0

Tại sao ai đó bỏ phiếu để đóng này? –

Trả lời

8

Nó là một label

Cung cấp một tuyên bố với một định danh mà bạn có thể tham khảo sử dụng một break hoặc tiếp tục tuyên bố. Ví dụ: bạn có thể sử dụng nhãn để xác định vòng lặp và sau đó sử dụng câu lệnh ngắt hoặc tiếp tục để cho biết liệu chương trình có nên làm gián đoạn vòng lặp hoặc tiếp tục thực hiện hay không.

Một địa điểm phổ biến khác mà bạn thấy là khi mọi người gắn kết tuyệt vời và vô dụng javascript: về trình xử lý sự kiện.

+0

Hey, điều này có ý nghĩa. Tuy nhiên, một phần về 'javascript: ', đó là một lược đồ URI (và có, đó là một thực hành rất xấu. Nó trông thậm chí còn nhiều hơn n00bish khi nó là' javascript: void (0)'). –

+0

rằng phần 'javascript: 'bắt nguồn từ việc sử dụng dấu trang (và nhầm lẫn với) và các liên kết javascript. –

+0

@CamiloMartin 'javascript:' có thể được sử dụng trong dấu trang (các đoạn mã javascript được lưu trữ dưới dạng dấu trang). –

-1

Đó chỉ là label.

bạn có thể sử dụng continue [label name] (hoặc break) trong vòng lặp để truy cập nhãn.

Giải thích thêm về những gì chúng có thể được nhìn thấy trong các mạng nội bộ.

+1

Nó không phải dành cho goto! – epascarello

+0

Cái gì? Đây là javascript. Đã cập nhật –

+0

@epascarello. – Neal

-1

nó được sử dụng để gắn nhãn một câu lệnh trong jsvascript.check thêm chi tiết here.

tuyên bố được gắn nhãn có thể được sử dụng với breakcontinue sau đó.

2

Đây là label (bit kết thúc bằng dấu hai chấm) theo sau là một khối (mã được bao quanh bởi dấu ngoặc nhọn).

Khối thường tuân theo các điều khiển kiểm soát, như if(...) { /*block*/ }, nhưng chúng cũng có thể đơn giản là tự đứng, như trong ví dụ của bạn.

Nhãn cho phép nhảy lên nhiều vòng tại một thời điểm với continue hoặc break; xem trang MDN liên kết cho một số ví dụ, chẳng hạn như:

var itemsPassed = 0; 
var i, j; 

top: 
for (i = 0; i < items.length; i++){ 
    for (j = 0; j < tests.length; j++) 
    if (!tests[j].pass(items[i])) 
     continue top; 
    itemsPassed++; 
} 

Ở đây, top: là nhãn mã bên trong vòng lặp bên trong có thể nhảy đến, để thoát khỏi vòng lặp bên ngoài.

+0

Ai trong tâm trí của họ sẽ sử dụng nhãn như vậy? Tôi hiểu rằng đóng cửa tạo ra mã với họ, nhưng ... Tôi vui vì tôi không bao giờ sử dụng chúng :) –

+0

@CamiloMartin Bạn có thể cần chúng nếu bạn có vòng lặp lồng nhau. Ngoài ra, bạn có thể muốn cấu trúc lại nếu bạn có vòng lặp lồng nhau. –

+0

@JanDvorak Tôi thề rằng nó không có ở đó trước khi Trình biên dịch đóng cửa làm điều đó :) Điều gì nói lên những điều kỳ diệu về khả năng khai thác của nó ... –

0

Vì lợi ích của bất kỳ ai không biết JSON là gì, và nhìn thấy dấu hai chấm trong thực tế có thể là đối tượng, và cố gắng tìm ra nó là gì, và tìm thấy cuộc thảo luận này, dấu hai chấm cũng được sử dụng trong JSON. Có một thực tế của các chức năng nhúng trong một đối tượng JSON. Điều này có thể gây nhầm lẫn (như tôi đối với tôi) đối với bất kỳ ai sẽ thấy điều này lần đầu tiên. (Mọi người không được sinh ra với kiến ​​thức về JSON và JavaScript được lập trình vào bộ não của họ.) Vì vậy, nếu bạn thấy mình trong cuộc thảo luận này, và bạn nghĩ rằng mỗi khi bạn nhìn thấy dấu hai chấm trong JavaScript, đó là một nhãn, nó có thể không . Có thể đó là dấu hai chấm sau nhãn, HOẶC nó có thể là một phần của JSON. Trên thực tế, một dấu hai chấm trong JSON được hiển thị dưới dạng một chuỗi, thường phổ biến hơn nhãn. JSON dưới dạng một đối tượng, sẽ được hiển thị là [object Object], với tất cả nội dung bị ẩn. Vì vậy, trừ khi JSON ở dạng chuỗi và bạn hiển thị một đối tượng cho bảng điều khiển (console.log (đối tượng)), tất cả những gì bạn sẽ thấy là [object Object]. Thực hành phổ biến là viết mã JavaScript, được bao bọc trong một đối tượng. Trong trường hợp đó, bạn sẽ thấy JSON dưới dạng mã. Đó là khi bạn sẽ tự hỏi mình, "Cái gì đây? Và đại tràng là gì?" Sau đó, bạn sẽ tìm thấy chính mình tại cuộc thảo luận này, và được cho biết rằng đó là một nhãn, khi nó thực sự là một phần của JSON. Chủ đề của cuộc thảo luận này được diễn đạt: "Hãy giải thích cách sử dụng dấu hai chấm này trong javascript", và sau đó "câu trả lời đúng" được đánh dấu là có liên quan đến nhãn. Câu trả lời đúng là dấu hai chấm có thể được sử dụng theo nhiều cách. Vì vậy, nếu bạn không biết JSON là gì, hoặc nghĩ rằng bạn biết (như tôi đã làm, nhưng không thực sự hiểu) đọc về nó ở đây: JSON.org

+1

Đủ công bằng, điều này có thể giúp người mới bắt đầu. Nhưng bạn không nghĩ rằng cách bạn nói nó có thể là quá nặng thông tin cho nhân khẩu học này rất? Có thể chỉ là một ví dụ không có nhãn như 'var obj = {prop: 123}' có thể minh họa cho điểm ngắn gọn hơn. –

+0

+1 để thể hiện mối quan tâm của bạn. Nó được viết theo cách tôi muốn câu trả lời là nếu tôi đọc bài viết. –

Các vấn đề liên quan