Ý nghĩa của dấu hiệu $ $ trong JavaScript trong JavaScript là gì


Câu trả lời:


284

Đoạn mã của bạn trông giống như các phương thức tham chiếu từ một trong các thư viện JavaScript phổ biến (jQuery, ProtoType, mooTools, v.v.).

Không có gì bí ẩn về việc sử dụng $JavaScript. $chỉ đơn giản là một định danh JavaScript hợp lệ.

JavaScript cho phép các chữ cái trên và dưới, số $_. Mục $đích được sử dụng cho các biến do máy tạo (chẳng hạn như $0001).

Prototype, jQuery và hầu hết các thư viện javascript đều sử dụng $làm đối tượng cơ sở chính (hoặc hàm). Hầu hết trong số họ cũng có cách từ bỏ $để có thể sử dụng nó với một thư viện khác sử dụng nó. Trong trường hợp đó bạn sử dụng jQuerythay vì $. Trong thực tế, $chỉ là một phím tắt cho jQuery.


2
@Paolo: Không chắc chính xác ý bạn là gì. (Tôi giả sử trước đây là người được chấp nhận, tôi giả sử.) Vâng, tôi nghĩ rằng ít nhất là hoàn toàn chính xác. Điều này bao gồm một chút thông tin phụ trợ, nhưng tôi không chắc nó biện minh cho "nhiều" ...
Noldorin

1
@Noldorin: thông tin phụ trợ là một điều tốt. Câu hỏi của bạn đã hoàn toàn không đề cập đến lý do $ được sử dụng, về lý do tại sao nó có thể được sử dụng và thực tế jQuery chỉ là một trong nhiều thư viện sử dụng nó. Có nó như một câu trả lời được chấp nhận có nghĩa là nó là câu trả lời tốt nhất có thể cho một câu hỏi, và nó đã không.
Paolo Bergantino

+1 Đây là một định danh JavaScript hợp lệ trước tiên và thường được các khung JavaScript sử dụng làm bí danh thứ hai.
Gumbo

@Paolo: Thường thì có. Tuy nhiên không có dấu hiệu nào cho thấy OP muốn biết về điều này. Một câu trả lời trực tiếp cũng là một điều tốt. :) Nói vậy, tôi vẫn đồng ý đây là một câu trả lời tốt hơn. Lời ngụy biện duy nhất của tôi là với sự nhấn mạnh bạn đang đặt vào một điểm cụ thể.
Noldorin

2
BTW, tôi đã cung cấp một lịch sử nhỏ đằng sau hàm $ trong bài đăng của mình tại đây: stackoverflow.com/questions/1122690/jquery-and-questions/ phỏng
SolutionYogi

44

Từ một câu trả lời khác :

Một ít lịch sử

Hãy nhớ rằng, không có gì đặc biệt vốn có $. Nó là một tên biến giống như bất kỳ khác. Trong những ngày trước, mọi người thường viết mã bằng document.getEuityById. Vì JavaScript phân biệt chữ hoa chữ thường, nên việc viết sai là bình thường document.getElementById. Tôi có nên vốn 'b'của 'by'? Tôi có nên vốn 'i'của Id?Bạn có được sự trôi dạt. Vì các hàm là công dân hạng nhất trong JavaScript, bạn luôn có thể thực hiện việc này:

var $ = document.getElementById; //freedom from document.getElementById!

Khi thư viện Prototype đến, họ đặt tên cho hàm của chúng, lấy các phần tử DOM, như '$'. Hầu như tất cả các thư viện JavaScript đã sao chép ý tưởng này. Prototype cũng giới thiệu một $$chức năng để chọn các thành phần bằng cách sử dụng bộ chọn CSS.

jQuery cũng điều chỉnh $chức năng nhưng được mở rộng để làm cho nó chấp nhận tất cả các loại 'bộ chọn' để có được các phần tử bạn muốn. Bây giờ, nếu bạn đã sử dụng Prototype trong dự án của mình và muốn bao gồm jQuery, bạn sẽ gặp vấn đề vì '$'có thể tham khảo cách triển khai của Prototype HOẶC jQuery. Đó là lý do tại sao jQuery có tùy chọn noConflict để bạn có thể đưa jQuery vào dự án sử dụng Prototype và từ từ di chuyển mã của bạn. Tôi nghĩ rằng đây là một bước đi tuyệt vời về phía John! :)


10
var $ = document.getElementById;không hoạt động trong Firefox hoặc Google Chrome. Bạn nên sử dụng function $(id) { return document.getElementById(id); }thay thế. Xem stackoverflow.com/questions/1007340 để biết thêm thông tin.
Cấp Wagner

Tôi không biết điều đó, cảm ơn Grant. Tôi có thể xác nhận rằng cái này được sử dụng để hoạt động trong IE6 cũng như Firefox 2 vì tôi thường xuyên sử dụng kỹ thuật này. Tôi sẽ cập nhật bài viết chính của tôi.
SolutionYogi

42

Đó rất có thể là jQuery mã (chính xác hơn là JavaScript sử dụng thư viện jQuery).

Hàm $đại diện cho Hàm jQuery và thực sự là một bí danh tốc ký cho jQuery. (Không giống như trong hầu hết các ngôn ngữ, $ký hiệu không được bảo lưu và có thể được sử dụng làm tên biến.) Nó thường được sử dụng làm bộ chọn (tức là một hàm trả về một tập hợp các phần tử được tìm thấy trong DOM).


3
Bạn nên thêm $ giống như x, nó có thể là bất cứ thứ gì bạn gán cho nó
hasen

Đoạn mã này có nghĩa là gì: $ input.prop ('type') == 'radio';
OKGimmeMoney

21

Như tất cả các câu trả lời khác nói; nó có thể là hầu hết mọi thứ nhưng thường là "JQuery".

Tuy nhiên, trong ES6, nó là một toán tử nội suy chuỗi trong một mẫu "bằng chữ", vd.

var s = "new" ; // you can put whatever you think appropriate here.
var s2 = `There are so many ${s} ideas these days !!` ; //back-ticks not quotes
console.log(s2) ;

kết quả:

Có rất nhiều ý tưởng mới trong những ngày này !!


2
Đây là một câu trả lời hữu ích! Đó là cái tôi đang tìm kiếm vì tôi biết chúng tôi không có jQuery hay bất kỳ thư viện nào khác. Về cơ bản, đây là cách in một biến trong một chuỗi lớn hơn mà không cần sử dụng dấu ngoặc kép và dấu cộng, v.v.
Oscar Bravo


4

Ngoài các câu trả lời ở trên, $không có ý nghĩa đặc biệt trong javascript, nó được sử dụng miễn phí trong việc đặt tên đối tượng. Trong jQuery , nó chỉ đơn giản là sử dụng như một bí danh cho jQuery đối tượng và jQuery () chức năng. Tuy nhiên, bạn có thể gặp các tình huống mà bạn muốn sử dụng nó cùng với một thư viện JS khác cũng sử dụng $, điều này sẽ dẫn đến xung đột đặt tên. Có một phương thức trong JQuery chỉ vì lý do này jQuery.noConflict().

Đây là một mẫu từ tài liệu của jQuery :

<script src="other_lib.js"></script>
<script src="jquery.js"></script>
<script>
$.noConflict();
// Code that uses other library's $ can follow here.
</script>

Ngoài ra, bạn cũng có thể sử dụng như thế này

(function ($) {
// Code in which we know exactly what the meaning of $ is
} (jQuery));

Tham chiếu : https://api.jquery.com/jquery.noconflict/


3

Từ tài liệu jQuery mô tả đối tượng jQuery Core :

Nhiều nhà phát triển tiền tố $ cho tên của các biến có chứa các đối tượng jQuery để giúp phân biệt. Không có gì kỳ diệu về thực hành này - nó chỉ giúp một số người theo dõi những biến khác nhau chứa gì.

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.