2013-04-17 42 views

Trả lời

8

Giống như sự khác biệt giữa tệp Javascript và tệp Javascript trống với chỉ ;.

Không có gì:

eval(""); 
//undefined 
eval(";"); 
//undefined 

Xem http://www.ecma-international.org/ecma-262/5.1/#sec-7.9.1

Khi nào, như các chương trình được phân tách từ trái sang phải, kết thúc của dòng đầu vào của thẻ được gặp và phân tích cú pháp là không thể phân tích cú pháp luồng mã thông báo đầu vào thành một Chương trình ECMAScript hoàn chỉnh, sau đó dấu chấm phẩy tự động được chèn vào cuối luồng đầu vào .

Vì vậy, tệp trống sẽ là Chương trình không hợp lệ, sau đó dấu chấm phẩy được chèn tự động và nó trở thành bằng một Chương trình chỉ bằng dấu chấm phẩy.

Nó chỉ xảy ra với tôi rằng đây lại là một trường hợp đó prooves JSON không phải là một tập hợp con của Javascript: trống JSON là không hợp lệ:

JSON.parse(""); 
//SyntaxError: Unexpected end of input 
eval(""); 
//undefined 

: P

6

javascript: cho biết giao thức giả có thể được sử dụng để đánh giá JavaScript. Vì vậy, một dấu chấm phẩy duy nhất sau khi nó bằng một kịch bản có chứa chỉ ; là một biểu thức trống không làm gì cả. javascript: mà không có bất cứ điều gì khác sau khi nó là một tập lệnh trống mà cũng không có gì. Trong cả hai trường hợp, giá trị trả về là undefined, điều quan trọng vì url javascript: trả lại nội dung khác sẽ dẫn đến nội dung trang được thay thế bằng bất kỳ nội dung nào được trả về.

Tuy nhiên, bạn không nên sử dụng số javascript: url ở tất cả - chúng không còn được dùng nữa. Sử dụng onclick và hoặc là một href hữu ích hoặc # nếu không có phiên bản không phải của liên kết. Nhớ để ngăn chặn mặc định sự kiện trong trường hợp đó mặc dù.

+0

Cảm ơn câu trả lời của bạn, tôi chỉ muốn sửa bạn rằng nội dung trang không được thay thế bằng những gì 'javascript:' trả về, thử 'javascript: 10' hoặc' javascript: 'google.com'' , nó sẽ không làm gì cả. – dhblah

+0

Ngoài ra tôi sẽ không đồng ý rằng javascript: không nên được sử dụng, vì nó luôn luôn có thể là ai đó sẽ quên 'return false;' on onclick hoặc chức năng sẽ ném một ngoại lệ và bạn sẽ có một khó chịu và khó khăn để tìm ra lỗi. – dhblah

+1

http://jsfiddle.net/ThiefMaster/MJ4nb/ - nó * được * thay thế bằng kết quả của biểu thức ...Một ngoại lệ được ném sẽ không thành vấn đề nếu bạn 'preventDefault()' đủ sớm (tôi thường làm điều đó trong dòng đầu tiên của trình xử lý sự kiện nếu nó được thực hiện vô điều kiện) – ThiefMaster

1

javascript: cho biết rằng có một tuyên bố javascript đến thay vì liên kết đến một trang khác. ; là câu lệnh javascript. Tuy nhiên, ; sẽ không thực thi bất cứ điều gì, vì vậy đây là một no-op.

0

javascript:;javascript: với và bổ sung dấu chấm phẩy. Ngoài ra, không có sự khác biệt.

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