Ký hiệu đô la trong Javascript là gì, nếu không phải là jQuery


86

Tôi đã lập trình javascript / jQuery cách đây vài năm và tôi mới bắt đầu lại. Trước đó, ký hiệu đô la được sử dụng cho tất cả các chức năng của jQuery và nếu không có thư viện jQuery nào được nhập, ký hiệu đô la sẽ không được xác định.

Hôm nay, tôi khởi động Firefox, trong một tệp html hoàn toàn trống rỗng không có thư viện javascript, và ký hiệu đô la chỉ ra một cái gì đó. Nếu tôi mở bảng điều khiển Firefox và gõ '$', tôi sẽ nhận được "function()".

1) Có đúng là ký hiệu đô la không được chỉ định, một vài năm trước, hay tôi nhớ sai?

2) Kí hiệu đô la , nếu không phải jQuery là gì?

Câu trả lời:


122

1) Có đúng là ký hiệu đô la không được chỉ định, một vài năm trước, hay tôi nhớ sai?

Điều đó đúng và vẫn đúng.

2) Kí hiệu đô la, nếu không phải jQuery là gì?

FirefoxChrome thực hiện $, $$và một số người khác như lệnh helper. Cả hai sẽ thiết lập $$để document.querySelectorAll(), và thiết lập $để document.querySelectornếu window.$chưa được xác định.

Vì vậy, những gì bạn đang thấy thực sự không phải là JavaScript tiêu chuẩn, mà là một trình trợ giúp trong bảng điều khiển dành cho nhà phát triển của trình duyệt của bạn. Nó cũng không phải là jQuery (miễn là bạn không ở trên một trang sử dụng jQuery). Tuy nhiên, hành vi của nó gần giống với một trong số đó jQuery, liên quan đến việc querySelector(đối với các trận đấu đơn) và querySelectorAll(đối với nhiều trận đấu) cung cấp cho bạn sức mạnh gần như tương tự như bộ chọn jQuery.


31
OK, điều đó thực sự khó chịu. Nó chỉ làm cho nó khó hiểu vì có vẻ như jquery ở đó nhưng bạn không thể tìm thấy nó ở đâu. Tôi đoán một khi bạn nhận thức được điều đó đang diễn ra thì nó có thể hữu ích nhưng nó thực sự khó hiểu và có thể che giấu lỗi.
mike nelson

1
Không rõ khi nào nó được các trình duyệt khác chấp nhận, nhưng tôi thấy nó cũng có sẵn trên IE11 và Edge.
isapir

vậy làm thế nào để mọi người biết đó là jquery? giả sử, bạn đã nhập một thư viện lớn có thể đã kết hợp một số lib khác, bạn muốn biết liệu jquery có ở đó không. xin vui lòng giúp đỡ.
Martian2049

2
@ Martian2049 Tôi nghĩ jQuery thực sự sẽ phản hồi$.fn.jquery
mb21,

2
@Gaspacchio Đó phải là một câu trả lời khác. Tuy nhiên, hãy nhớ rằng nó $không được sử dụng trong một khuôn mẫu theo nghĩa đen trong câu hỏi này .
Zeta

11

Nó không có ý nghĩa gì đối với trình thông dịch giống như dấu gạch dưới

Từ đặc tả ECMAScript:

Dấu đô la ($) và dấu gạch dưới (_) được cho phép ở bất kỳ đâu trong số nhận dạng. Ký hiệu đô la chỉ được sử dụng trong mã được tạo cơ học.

Bạn cũng có thể kiểm tra JavaScript Dollar Sign ($) - Nó dùng để làm gì?

Theo quy ước, dấu đô la ($), dấu gạch dưới (_) và thậm chí một số ký tự ASCII được phép sử dụng ở bất kỳ đâu trong mã định danh JavaScript (Nguồn: tài liệu Ecma Script (7.6 Số nhận dạng, ECMA-262, Phiên bản thứ 3) đồng đô la dấu chỉ được sử dụng trong mã được tạo cơ học. Điều này có nghĩa là chúng tôi không muốn sử dụng ký hiệu đô la ($) trong tên bộ phân định của mình, trừ khi chúng tôi đang viết một khuôn khổ. Sau đây là danh sách các ký tự được phép có thể được sử dụng bất kỳ đâu trong tên định danh:

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart
IdentifierStart ::
UnicodeLetter
$
_
UnicodeEscapeSequence
IdentifierPart ::
IdentifierStart
UnicodeCombiningMark
UnicodeDigit
UnicodeConnectorPunctuation
UnicodeEscapeSequence

BIÊN TẬP:-

Trên thực tế, hàm ký hiệu đô la đã trở thành phím tắt ít nhiều trên thực tế document.getElementById().

Để xác nhận quan điểm của tôi, hãy kiểm tra điều này :

$ (bộ chọn)

Trả về một phần tử duy nhất khớp với bộ chọn CSS đã cho. Trong các phiên bản Firebug cũ , điều này từng tương đương với document.getElementById .


Liên kết blog đó đã chết.
Victor Zamanian

Phần đầu tiên của câu trả lời là không liên quan, phần thứ hai là lỗi thời và sai trong bối cảnh của các trình duyệt hiện đại.
user4642212

7

Dollar sign($) không được chỉ định, nhưng một số trình duyệt thêm chức năng để sử dụng đặc biệt.

Giống như Google Chrome, nếu bạn nhập $trên bảng điều khiển, nó sẽ trả về:

function $(selector, [startNode]) { [Command Line API] }

Chức năng này được chỉ định cho Công cụ dành cho nhà phát triển Google Chrome và giúp việc gỡ lỗi dễ dàng hơn.

nếu bạn nhập $('div'), nó sẽ trả về một cái gì đó như sau:

e.fn.e.init[178]

và bao gồm mọi divđối tượng DOM trong đó.

BTW, sau khi bạn nhấp vào nút bên phải trên chuột để chọn phần tử, bạn có thể truy cập phạm vi angle.js theo loại $scopetrên bảng điều khiển


4

Lưu ý rằng điều đó $$không đúng document.querySelectorAll, vì không giống như hàm đó, nó không trả về NodeList:

document.querySelectorAll("p") instanceof NodeList // true

$$("p") instanceof NodeList // false

Array.isArray($$("p")) // true

Vì vậy, $$(selector)thực sự là thích hơn Array.from(document.querySelectorAll(selector)). Điều này có nghĩa là các phương thức mảng like mapvà friends, không chỉ forEach, có sẵn khi sử dụng $$thực sự khá hữu ích.


1

Nó có thể là bất cứ thứ gì, cũng như $một tên biến hợp lệ, giống như dollar.

Từ ECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

Giải pháp đơn giản nhất để xem nó là gì và nó được định nghĩa ở đâu có lẽ là gõ $()đặt một điểm ngắt trên dòng này.


1

Chỉ để hoàn thành các câu trả lời khác ở đây, MooTools cũng sử dụng $làm bí danh cho document.getElementById.

Nó kiểm tra xem có $được sử dụng hay không và sau đó sẽ mặc định thành document.id.

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.