Ai đó có thể giải thích ký hiệu đô la trong Javascript?


378

Mã trong câu hỏi là ở đây:

var $item = $(this).parent().parent().find('input');

Mục đích của ký hiệu đô la trong tên biến, tại sao không loại trừ nó?



[câu trả lời của ttony21] [1] đã sai khi nói rằng không có loại nào trong Javascript, cf [tài liệu chính thức] [2] [1]: stackoverflow.com/questions/846585/ triệt
i Intl.org/publications/files/ECMA-ST/ECMA-262.pdf

Chủ đề này khá cũ nhưng có vẻ như các trình duyệt chính đã tiêu chuẩn hóa các vai trò toàn cầu $, $$. $ So với $$ phải làm gì?
Nick Sotiros

Không có gì, trừ khi bạn đang ở trong bảng điều khiển của trình duyệt. Ví dụ, Chrome định nghĩa $ và $$ là các phím tắt đến document.querySelectordocument.querySelectorAll
Kevin B

Câu trả lời:


381

Một '$' trong một biến có nghĩa là không có gì đặc biệt đối với trình thông dịch, giống như dấu gạch dưới.

Từ những gì tôi đã thấy, nhiều người sử dụng jQuery (đó là mã ví dụ của bạn trông như thế nào) có xu hướng tiền tố biến có chứa một đối tượng jQuery có $ để chúng dễ dàng được xác định và không bị lẫn với các số nguyên .

Hàm ký hiệu đô la $()trong jQuery là một hàm thư viện thường được sử dụng, vì vậy một tên ngắn là mong muốn.


86
Lưu ý: Theo mặc định, jQuery sử dụng "$" làm lối tắt cho "jQuery". Điều này có một số hiệu ứng về việc sử dụng các thư viện Javascript khác. Xem docs.jquery.com/Using_jQuery_with_Other_Lologists
Thimmayya

17
Nói cách khác, $ có thể so sánh với bất kỳ ký hiệu có thể chấp nhận nào trong tên biến / hàm. Làm var $=function(){}rất giống như làm var a=function(){}.
F-3000

24
Thimmayya bình luận của bạn "Theo mặc định, jQuery sử dụng" $ "làm lối tắt cho" jQuery "" nên được in đậm chữ ở đầu mỗi trang trên trang web của Jquery, các ví dụ của họ được ghi lại một cách khủng khiếp.
RustyH

Điều gì về khi $ được chỉ định làm tham số hàm? Tôi đang xem xét một số mã như jQuery(document).ready(function($){... Sau đó, $ được sử dụng bên trong triển khai hàm.
still_dreaming_1

4
@ ThrowawayAccount3Million Nó chỉ là một phần của tên. Trong trường hợp $scope$ là một trong các ký tự trong tên đó. Giống như khi bạn cất cánh evào cuối $scope, nó sẽ không hoạt động, do đó, việc lấy ý $chí cũng không hiệu quả. Trong trường hợp bạn thấy một cái gì đó như $( "a" ).addClass( "test" ), ký hiệu đô la là toàn bộ tên của bất cứ thứ gì.
still_dreaming_1

49

Trong ví dụ của bạn, $ không có ý nghĩa đặc biệt nào ngoài việc là một ký tự của tên.

Tuy nhiên , trong ECMAScript 6 (ES6), $ có thể đại diện cho một mẫu chữ

var user = 'Bob'
console.log(`We love ${user}.`); //Note backticks
// We love Bob.

37

Dấu $ là một định danh cho các biến và hàm.

https://web.archive.org/web/20160529121559/http://www.authenticsociety.com/blog/javascript_dollarsign

Điều đó có một lời giải thích rõ ràng về những gì ký hiệu đô la là dành cho.

Đây là một lời giải thích khác: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
Javascript có các loại; và trong mọi trường hợp, ký hiệu đô la thậm chí liên quan đến điều đó như thế nào? Nó chỉ là một ký tự tình cờ là một định danh hợp pháp trong Javascript.
Erik Kaplun

10
Tôi không chắc chắn tôi sẽ gọi liên kết đó là một lời giải thích "rõ ràng". Có thực sự phải mất hơn 6 đoạn để giải thích rằng $ chỉ đơn giản là một ký tự hợp lệ khi xác định tên hàm và biến?
Nhẹ

1
Có vẻ như liên kết đầu tiên đang hoạt động trở lại. Tôi phải đồng ý với @Slight rằng giải thích thay thế là khủng khiếp.
Sander Garretsen

Mã mẫu trong liên kết khá dễ hiểu. Tuyệt vời!
蔡宗容

32

Ký hiệu đô la được đối xử giống như một chữ cái bình thường hoặc gạch dưới ( _). Nó không có ý nghĩa đặc biệt đối với người phiên dịch.

Không giống như nhiều ngôn ngữ tương tự, số nhận dạng (như tên chức năng và tên biến) trong Javascript không chỉ chứa các chữ cái, số và dấu gạch dưới mà còn có thể chứa các ký hiệu đô la . Họ thậm chí được phép bắt đầu bằng một ký hiệu đô la, hoặc chỉ bao gồm ký hiệu đô la và không có gì khác.

Như vậy $ là một hàm hợp lệ hoặc tên biến trong Javascript.

Tại sao bạn muốn có một ký hiệu đô la trong một định danh?

Cú pháp không thực sự thực thi bất kỳ việc sử dụng cụ thể nào của ký hiệu đô la trong một mã định danh, do đó, tùy thuộc vào cách bạn muốn sử dụng nó. Trước đây, người ta thường khuyên nên bắt đầu một mã định danh chỉ có ký hiệu đô la trong mã được tạo - nghĩa là mã được tạo không phải bằng tay mà bằng một trình tạo mã.

Trong ví dụ của bạn, tuy nhiên, điều này dường như không phải là trường hợp. Có vẻ như ai đó chỉ cần đặt một ký hiệu đô la khi bắt đầu cho vui - có lẽ họ là một lập trình viên PHP đã làm điều đó theo thói quen, hoặc một cái gì đó. Trong PHP, tất cả các tên biến phải có ký hiệu đô la trước mặt chúng.

Ngày nay có một ý nghĩa phổ biến khác cho ký hiệu đô la trong trình thông dịch: đối tượng jQuery, có tên chỉ bao gồm một ký hiệu đô la duy nhất ( $). Đây là một quy ước được mượn từ các khung Javascript trước đó như Prototype và nếu jQuery được sử dụng với các khung như vậy, sẽ có một xung đột tên vì cả hai sẽ sử dụng tên $(jQuery có thể được cấu hình để sử dụng một tên khác cho đối tượng toàn cầu của nó) . Javascript không có gì đặc biệt cho phép jQuery sử dụng ký hiệu đô la duy nhất làm tên đối tượng của nó; như đã đề cập ở trên, nó chỉ đơn giản là một tên định danh hợp lệ khác.


Bạn có thể tìm kiếm đối tượng jQuery với var $j = jQuery.noConflict();bây giờ $ j là đối tượng jQuery.
Justin Liu

6

Ký hiệu đô la được sử dụng trong bản mô tả 2015-2016 dưới dạng 'mẫu chữ'. Thí dụ:

var a = 5;
var b = 10;
console.log(`Sum is equal: ${a + b}`); // 'Sum is equlat: 15'

Ví dụ hoạt động ở đây: https://es6console.com/j3lg8xeo/ Lưu ý dấu hiệu này " ` ", đây không phải là dấu ngoặc kép bình thường.

Bạn cũng có thể gặp $ khi làm việc với thư viện jQuery .

$ đăng trong Biểu thức chính quy có nghĩa là kết thúc dòng.


4

Không có lý do. Có lẽ người đã mã hóa nó đến từ PHP. Nó có tác dụng tương tự như khi bạn đặt tên cho nó là "_item" hoặc "item" hoặc "item $$".

Là một hậu tố (như "item $", phát âm là "item"), nó có thể biểu thị một yếu tố có thể quan sát được như một yếu tố DOM như một quy ước gọi là "Ký hiệu Phần Lan" tương tự như Ký hiệu Hungary.


1

Dưới đây là một lời giải thích video ngắn hay: https://www.youtube.com/watch?v=Acm-MD_6934

Theo Ecma Tên định danh quốc tế là các mã thông báo được diễn giải theo ngữ pháp được đưa ra trong phần Định danh của người dùng trong chương 5 của tiêu chuẩn Unicode, với một số sửa đổi nhỏ. Mã định danh là Tên định danh không phải là ReservedWord ( xem 7.6.1 ). Ngữ pháp định danh Unicode dựa trên cả hai loại ký tự quy phạm và thông tin được chỉ định bởi Tiêu chuẩn Unicode. Các ký tự trong các danh mục được chỉ định trong phiên bản 3.0 của tiêu chuẩn Unicode phải được xử lý như trong các danh mục đó bởi tất cả các triển khai ECMAScript tuân thủ. Tiêu chuẩn này chỉ định bổ sung ký tự cụ thể:

Ký hiệu đô la ($) và dấu gạch dưới (_) được cho phép ở bất cứ đâu trong Mã định danh .

Đọc thêm có thể được tìm thấy trên: http : //www.ecma-i Intl.org/ecma-262/5.1/#sec-7.6

Ecma International là một hiệp hội ngành được thành lập vào năm 1961 và dành riêng cho việc tiêu chuẩn hóa Công nghệ Thông tin và Truyền thông (CNTT-TT) và Điện tử Tiêu dùng (CE).


Mặc dù liên kết này có thể trả lời câu hỏi, tốt hơn là bao gồm các phần thiết yếu của câu trả lời ở đây và cung cấp liên kết để tham khảo. Câu trả lời chỉ liên kết có thể trở nên không hợp lệ nếu trang được liên kết thay đổi.
TartanLlama

... @TartanLlama Nếu bạn hạ cấp câu trả lời của tôi, vui lòng đọc câu trả lời được cập nhật của tôi. Cảm ơn bạn.
Nomis 10/2/2015

Không phải là tôi! Tôi chỉ gắn cờ nó.
TartanLlama

... ok với người đã bỏ phiếu này, vui lòng giải thích lý do và đọc câu trả lời đã được chỉnh sửa của tôi. Cảm ơn bạn.
Nomis

5
... @TartanLlama điều này chỉ chứng minh (một lần nữa) rằng tính năng hạ cấp ẩn danh của Stackoverflows bị hỏng. Trả lời các câu hỏi cũ với câu trả lời được chấp nhận là ổn đối với tôi vì bản thân tôi thấy hữu ích khi thấy các câu trả lời khác khi tôi duyệt qua để tìm câu trả lời.
Nomis 10/2/2015

1

Khi sử dụng jQuery, việc sử dụng $ký hiệu làm tiền tố trong tên biến chỉ đơn thuần là theo quy ước; nó hoàn toàn là tùy chọn và chỉ dùng để chỉ ra rằng biến đó chứa một đối tượng jQuery, như trong ví dụ của bạn.

Điều này có nghĩa là khi một hàm jQuery khác cần được gọi trên đối tượng, bạn sẽ không cần phải bọc nó $()lại. Ví dụ, so sánh những điều này:

// the usual way
var item = $(this).parent().parent().find('input');
$(item).hide(); // this is a double wrap, but required for code readability
item.hide(); // this works but is very unclear how a jQuery function is getting called on this 

// with $ prefix
var $item = $(this).parent().parent().find('input');
$item.hide(); // direct call is clear
$($item).hide(); // this works too, but isn't necessary

Với $tiền tố, các biến đã giữ các đối tượng jQuery có thể nhận ra ngay lập tức và mã dễ đọc hơn và loại bỏ gói / nhiều gói với $().

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.