2012-02-08 38 views
5

Mục đích của việc sử dụng // trong mã sau là gì. Nếu trình duyệt cũ không hỗ trợ javascript thì các ký hiệu <!-- --> sẽ bỏ qua mã js. Trong trường hợp trình duyệt hỗ trợ JS, các ký hiệu này <!-- --> sẽ bị bỏ qua. Sau đó, wats việc sử dụng các biểu tượng //.Nhận xét bằng JavaScript

<html> 
<body> 
<script type="text/javascript"> 
<!-- 
document.getElementById("demo").innerHTML=Date(); 
//--> 
</script> 
</body> 
</html> 

Trả lời

7

Nếu trình duyệt cũ không hỗ trợ javascript thì các ký hiệu <!-- --> sẽ bỏ qua mã js.

Đúng, giả sử HTML và định nghĩa "trình duyệt cũ" tương đương với "kỷ nguyên Netscape 1". Don't use them today.

Trong trường hợp trình duyệt hỗ trợ JS, các ký hiệu này <!-- --> sẽ bị bỏ qua.

Chỉ đúng một nửa. Chỉ bắt đầu của bình luận là đặc biệt cased. Từ the specification:

Động cơ Javascript cho phép chuỗi "<!--" xảy ra vào lúc bắt đầu của một yếu tố SCRIPT, và bỏ qua các nhân vật tiếp tục cho đến cuối dòng. JavaScript diễn giải "//" khi bắt đầu nhận xét kéo dài đến cuối dòng hiện tại. Điều này là cần thiết để ẩn chuỗi "-->" từ trình phân tích cú pháp JavaScript.

+0

câu trả lời hay. nhiều câu trả lời cụ thể hơn tôi! –

+0

nhưng nếu chúng tôi không ẩn bằng cách sử dụng '//' không có gì tệ hơn xảy ra. Mã hoạt động như trong firefox? – sandbox

+1

Trình duyệt thực sự tốt trong việc khôi phục từ & ^% $, nhưng không phải lúc nào cũng nhất quán trong cách thực hiện. – Quentin

4

-- là một nhà điều hành JavaScript. Nó được sử dụng để không gây nhầm lẫn cho trình phân tích cú pháp.

Bạn thực sự không cần những nhận xét HTML đó nữa, BTW.

+0

Nhưng tại sao là '->' trong ý kiến, và ' Konerak

+0

@Konerak - Câu trả lời của Quentin hoàn chỉnh hơn. –

1

Đây là một tính năng phi tiêu chuẩn mà các trình duyệt và công cụ JavaScript đã luôn luôn thực hiện. Ngày nay, nó không thể được gỡ bỏ, vì điều đó sẽ phá vỡ khả năng tương thích ngược. Đó là detailed in the JavaScript/Web ECMAScript spec:

<!-- phải được coi là sự khởi đầu của một SingleLineComment - tương đương với //.

var x = true; 
<!-- x = false; // note: no syntax error 
x; // true 

--> vào lúc bắt đầu của một dòng, tùy trước bởi khoảng trắng hoặc MultiLineComment s, phải được đối xử như một SingleLineComment - tương đương với //.

var x = true; 
--> x = false; // note: no syntax error 
x; // true 

var x = 1; 
/* 
multiline comment! 
x = 2; 
*/ --> x = 3; 
x; // 1