ใครสามารถอธิบายสัญลักษณ์ดอลลาร์ใน Javascript ได้บ้าง


378

รหัสที่เป็นปัญหาอยู่ที่นี่:

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

อะไรคือจุดประสงค์ของเครื่องหมายดอลลาร์ในชื่อตัวแปรทำไมไม่รวมอยู่ในนั้น?


3
สำเนาซ้ำซ้อนของstackoverflow.com/questions/205853/…
DisgruntledGoat

[คำตอบของ ttony21] [1] ผิดที่ระบุว่าไม่มีประเภทใน Javascript, cf [เอกสารอย่างเป็นทางการ] [2] [1]: stackoverflow.com/questions/846585/… [2]: ecma-international.org/publications/files/ECMA-ST/ECMA-262.pdf
anddam

เธรดนี้ค่อนข้างเก่า แต่ดูเหมือนว่าเบราว์เซอร์หลักจะใช้ vairables $, $$ ทั่วโลกที่เป็นมาตรฐาน $ vs $$ ควรทำอย่างไร
Nick Sotiros

ไม่มีอะไรนอกจากคุณจะอยู่ในคอนโซลของเบราว์เซอร์ที่กล่าวมา ตัวอย่างเช่น Chrome กำหนด $ และ $$ เป็นทางลัดไปdocument.querySelectorและdocument.querySelectorAll
Kevin B

คำตอบ:


381

'$' ในตัวแปรไม่มีความหมายอะไรกับล่ามเหมือนขีดล่าง

จากสิ่งที่ฉันได้เห็นคนจำนวนมากที่ใช้jQuery (ซึ่งเป็นรหัสตัวอย่างของคุณดูเหมือนว่าฉัน) มักจะนำหน้าตัวแปรที่มีวัตถุ jQuery ด้วย $ เพื่อให้พวกเขาระบุได้ง่ายและไม่ผสมกับพูดจำนวนเต็ม .

ฟังก์ชั่นเครื่องหมายดอลลาร์$()ใน jQuery เป็นฟังก์ชั่นห้องสมุดที่ใช้บ่อยดังนั้นชื่อย่อจึงเป็นที่ต้องการ


86
หมายเหตุ: โดยค่าเริ่มต้น jQuery ใช้ "$" เป็นทางลัดสำหรับ "jQuery" สิ่งนี้มีผลกระทบบางประการกับการใช้ห้องสมุด Javascript อื่น ๆ ดูdocs.jquery.com/Using_jQuery_with_Other_L Libraries
Thimmayya

17
กล่าวอีกนัยหนึ่งคือ $ เปรียบได้กับสัญลักษณ์ที่ยอมรับได้ในชื่อตัวแปร / ฟังก์ชั่น ทำเหมือนกันมากเช่นการทำvar $=function(){} var a=function(){}
F-3000

24
Thimmayya ความคิดเห็นของคุณ "โดยค่าเริ่มต้น jQuery ใช้" $ "เป็นทางลัดสำหรับ" jQuery "" ควรเป็นตัวอักษรตัวหนาที่ด้านบนสุดของทุกหน้าในเว็บไซต์ของ Jquery ตัวอย่างของพวกเขาได้รับการบันทึกไว้อย่างน่ากลัว
RustyH

สิ่งที่เกี่ยวกับเมื่อมีการระบุ $ เป็นพารามิเตอร์ฟังก์ชั่น? ฉันกำลังดูโค้ดบางอย่างเช่นjQuery(document).ready(function($){... จากนั้น $ จะถูกใช้ในการใช้งานฟังก์ชั่น
still_dreaming_1

4
@ ThrowawayAccount3Million มันเป็นเพียงส่วนหนึ่งของชื่อ ในกรณีของ$scope$ เป็นหนึ่งในตัวละครในชื่อนั้น ราวกับว่าคุณถอดออกeในตอนท้าย$scopeมันจะไม่ทำงานดังนั้นการถ่ายทำ$จะไม่ได้ผล ในกรณีที่คุณเห็นอะไรบางอย่าง$( "a" ).addClass( "test" )เครื่องหมายดอลลาร์เป็นชื่อเต็มของสิ่งที่เป็น
still_dreaming_1

49

ในตัวอย่างของคุณ $ ไม่มีความสำคัญเป็นพิเศษนอกจากการเป็นตัวละครของชื่อ

อย่างไรก็ตามใน ECMAScript 6 (ES6) $ อาจแสดงถึงตัวอักษรเทมเพลต

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

37

เครื่องหมาย $ เป็นตัวระบุสำหรับตัวแปรและฟังก์ชั่น

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

นั่นมีคำอธิบายที่ชัดเจนว่าเครื่องหมายดอลลาร์นั้นมีไว้เพื่ออะไร

นี่คือคำอธิบายอื่น: http://www.vcarrer.com/2010/10/about-dollar-sign-in-javascript.html


2
Javascript มีประเภท; และในกรณีใด ๆ เครื่องหมายดอลลาร์นั้นเกี่ยวข้องกับสิ่งนั้นอย่างไร มันเป็นเพียงตัวละครที่เกิดขึ้นเพื่อเป็นตัวระบุทางกฎหมายใน Javascript
Erik Kaplun

10
ฉันไม่แน่ใจว่าจะเรียกลิงก์นี้ว่า "ชัดเจน" คำอธิบาย มันใช้เวลา 6+ ย่อหน้าในการอธิบายว่า $ เป็นเพียงตัวอักษรที่ถูกต้องเมื่อกำหนดฟังก์ชั่นและชื่อตัวแปร?
Slight

1
ดูเหมือนว่าลิงก์แรกจะทำงานอีกครั้ง ฉันต้องเห็นด้วยกับ @Slight ว่าคำอธิบายทางเลือกนั้นแย่มาก
Sander Garretsen

โค้ดตัวอย่างในลิงค์ค่อนข้างเข้าใจง่าย ! น่ากลัว
蔡宗容

32

เครื่องหมายดอลลาร์จะได้รับการปฏิบัติเช่นเดียวกับตัวอักษรปกติหรือขีดล่าง ( _) ไม่มีความสำคัญเป็นพิเศษต่อล่าม

แตกต่างจากภาษาที่คล้ายกันมากตัวระบุ (เช่นชื่อทำงานและตัวแปร) ใน Javascript สามารถมีตัวอักษรที่ไม่เพียง แต่ตัวเลขและขีด แต่ยังสามารถมีสัญญาณดอลลาร์ พวกเขาจะได้รับอนุญาตให้เริ่มต้นด้วยเครื่องหมายดอลลาร์หรือประกอบด้วยเพียงเครื่องหมายดอลลาร์และไม่มีอะไรอื่น

ดังนั้นจึง$เป็นฟังก์ชั่นที่ถูกต้องหรือชื่อตัวแปรใน Javascript

ทำไมคุณต้องการให้เครื่องหมายดอลลาร์ในตัวระบุ

ไวยากรณ์ไม่ได้บังคับใช้การใช้งานของเครื่องหมายดอลลาร์ในตัวระบุดังนั้นมันขึ้นอยู่กับคุณว่าคุณต้องการใช้มันอย่างไร ในอดีตมักจะแนะนำให้เริ่มตัวระบุด้วยเครื่องหมายดอลลาร์ในรหัสที่สร้างขึ้นเท่านั้น - นั่นคือรหัสที่สร้างไม่ได้ด้วยมือ แต่โดยตัวสร้างโค้ด

อย่างไรก็ตามในตัวอย่างของคุณสิ่งนี้ไม่ได้เกิดขึ้น ดูเหมือนว่าใครบางคนเพิ่งใส่เครื่องหมายดอลลาร์ที่จุดเริ่มต้นเพื่อความสนุกสนาน - บางทีพวกเขาเป็นโปรแกรมเมอร์ PHP ที่ทำมันออกมาจากนิสัยหรือบางสิ่งบางอย่าง ใน PHP ชื่อตัวแปรทั้งหมดจะต้องมีเครื่องหมายดอลลาร์อยู่ข้างหน้า

มีความหมายทั่วไปสำหรับเครื่องหมายดอลลาร์ในล่ามในปัจจุบันก็คือ: วัตถุ jQuery ที่มีชื่อเฉพาะประกอบด้วยเครื่องหมายดอลลาร์เดียว ( $) นี่เป็นข้อตกลงที่ยืมมาจากเฟรมเวิร์ก Javascript ก่อนหน้านี้เช่น Prototype และหากใช้ jQuery ร่วมกับเฟรมเวิร์กอื่น ๆ จะมีการปะทะกันของชื่อเพราะทั้งคู่จะใช้ชื่อ$(jQuery สามารถกำหนดค่าให้ใช้ชื่ออื่นสำหรับวัตถุทั่วโลก) . ไม่มีอะไรพิเศษใน Javascript ที่อนุญาตให้ jQuery ใช้เครื่องหมายดอลลาร์เดียวเป็นชื่อวัตถุ ดังกล่าวข้างต้นเป็นเพียงชื่ออื่นที่ถูกต้องเท่านั้น


คุณสามารถ noconflict วัตถุ jQuery ด้วยสิ่งvar $j = jQuery.noConflict();นี้ $ j เป็นวัตถุ jQuery
Justin Liu

6

เครื่องหมายดอลลาร์ใช้ในecmascript 2015-2016 เป็น 'ตัวอักษรเทมเพลต' ตัวอย่าง:

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

ตัวอย่างการทำงานที่นี่: https://es6console.com/j3lg8xeo/ สังเกตเครื่องหมายนี้ " ` "มันไม่ได้เป็นคำพูดปกติ

คุณยังสามารถพบ $ ในขณะที่ทำงานกับไลบรารี่ jQuery

$ ลงชื่อเข้าใช้นิพจน์ปกติหมายถึงจุดสิ้นสุดของบรรทัด


4

ไม่มีเหตุผล. อาจเป็นคนที่เขียนมันมาจาก PHP มันมีผลเช่นเดียวกับถ้าคุณตั้งชื่อมันว่า "_item" หรือ "item" หรือ "item $$"

ในฐานะที่เป็นคำต่อท้าย (เช่น "item $", เด่นชัด "items") มันสามารถบ่งบอกถึงสิ่งที่สังเกตได้เช่นองค์ประกอบ DOM ในรูปแบบการประชุมที่เรียกว่า"Finnish Notation"คล้ายกับฮังการี


1

นี่คือคำอธิบายวิดีโอสั้น ๆ ที่ดี: https://www.youtube.com/watch?v=Acm-MD_6934

ตามชื่อตัวบ่งชี้ Ecma International เป็นโทเค็นที่ตีความตามไวยากรณ์ที่ให้ไว้ในส่วน "ตัวระบุ" ของบทที่ 5ของมาตรฐาน Unicode โดยมีการดัดแปลงเล็กน้อย Identifier เป็น IdentifierName ที่ไม่ใช่ ReservedWord ( ดู 7.6.1 ) ไวยากรณ์ตัวระบุ Unicode ขึ้นอยู่กับหมวดหมู่อักขระเชิงบรรทัดฐานและข้อมูลที่ระบุโดย Unicode Standard อักขระในหมวดหมู่ที่ระบุในเวอร์ชัน 3.0 ของมาตรฐาน Unicode ต้องได้รับการปฏิบัติเช่นเดียวกับหมวดหมู่เหล่านั้นโดยการใช้ ECMAScript implementations ทั้งหมดมาตรฐานนี้ระบุการเพิ่มอักขระเฉพาะ:

เครื่องหมายดอลลาร์ ($) และขีดล่าง (_) จะได้รับอนุญาตใดก็ได้ใน IdentifierName

อ่านเพิ่มเติมได้ที่: http://www.ecma-international.org/ecma-262/5.1/#sec-7.6

Ecma Internationalเป็นสมาคมอุตสาหกรรมที่ก่อตั้งขึ้นในปี 2504 และอุทิศตนเพื่อมาตรฐานของเทคโนโลยีสารสนเทศและการสื่อสาร (ICT) และ Consumer Electronics (CE)


แม้ว่าลิงก์นี้อาจตอบคำถามได้ดีกว่าหากรวมส่วนสำคัญของคำตอบไว้ที่นี่และให้ลิงก์สำหรับการอ้างอิง คำตอบสำหรับลิงก์เท่านั้นอาจไม่ถูกต้องหากหน้าเว็บที่เชื่อมโยงนั้นเปลี่ยนแปลง
TartanLlama

... @TartanLlama หากคุณลดระดับคำตอบของฉันโปรดอ่านคำตอบที่อัปเดตของฉัน ขอบคุณ.
Nomis

ไม่ใช่ฉัน! ฉันเพิ่งตั้งค่าสถานะมัน
TartanLlama

... ตกลงกับคนที่ลงคะแนนในเรื่องนี้โปรดอธิบายว่าทำไมและอ่านคำตอบที่แก้ไขแล้วของฉัน ขอบคุณ.
Nomis

5
... @TartanLlama นี่เป็นเพียงการพิสูจน์ (อีกครั้ง) ว่าคุณสมบัติการดาวน์เกรดแบบไม่ระบุชื่อของ Stackoverflow เสีย การตอบคำถามเก่าที่มีคำตอบที่ยอมรับนั้นใช้ได้สำหรับฉันเพราะฉันพบว่ามันมีประโยชน์ที่จะเห็นคำตอบอื่น ๆ เมื่อฉันค้นหาคำตอบ
Nomis

1

เมื่อใช้ jQuery การใช้$สัญลักษณ์เป็นส่วนนำหน้าในชื่อตัวแปรเป็นเพียงการประชุม มันเป็นตัวเลือกที่สมบูรณ์และให้บริการเฉพาะเพื่อระบุว่าตัวแปรเก็บวัตถุ jQuery ตามที่เป็นในตัวอย่างของคุณ

ซึ่งหมายความว่าเมื่อจำเป็นต้องเรียกใช้ฟังก์ชัน jQuery อื่นบนวัตถุคุณไม่จำเป็นต้องปิดฟังก์ชัน$()อีกครั้ง ตัวอย่างเช่นเปรียบเทียบสิ่งเหล่านี้:

// 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

ด้วย$คำนำหน้าตัวแปรที่มีอยู่แล้วการถือครองวัตถุ jQuery เป็นที่รู้จักทันทีและรหัสที่อ่านได้มากขึ้นและขจัดคู่ / $()ห่อหลายกับ

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.