เครื่องหมายดอลลาร์ใน Javascript คืออะไรถ้าไม่ใช่ jQuery


86

ฉันเขียนโปรแกรม javascript / jQuery เมื่อสองสามปีก่อนและฉันเพิ่งเริ่มต้นอีกครั้ง ในตอนนั้นเครื่องหมายดอลลาร์ถูกใช้สำหรับฟังก์ชัน jQuery ทั้งหมดและหากไม่มีการนำเข้าไลบรารี jQuery จะไม่มีการกำหนดเครื่องหมายดอลลาร์

วันนี้ฉันเริ่ม Firefox ในไฟล์ html ที่ว่างเปล่าโดยไม่มีไลบรารี javascript แต่เครื่องหมายดอลลาร์ชี้ไปที่บางสิ่ง ถ้าผมเปิด Firefox คอนโซลและประเภท'$'"function()"ฉันได้รับ

1) ถูกต้องหรือไม่ที่ไม่ได้กำหนดเครื่องหมายดอลลาร์ย้อนหลังไปสองสามปีหรือฉันจำผิด?

2) เครื่องหมายดอลลาร์คืออะไรถ้าไม่ใช่ jQuery?

คำตอบ:


123

1) ถูกต้องหรือไม่ที่ไม่ได้กำหนดเครื่องหมายดอลลาร์ย้อนหลังไปสองสามปีหรือฉันจำผิด?

ถูกต้องและยังคงเป็นจริง

2) เครื่องหมายดอลลาร์คืออะไรถ้าไม่ใช่ jQuery?

FirefoxและChromeใช้$, $$และอื่น ๆ หลายเป็นคำสั่งผู้ช่วย ทั้งสองจะตั้งค่า$$เป็นdocument.querySelectorAll()และตั้งค่า$เป็นdocument.querySelectorถ้าwindow.$ไม่ได้กำหนดไว้

ดังนั้นสิ่งที่คุณเห็นไม่ใช่ JavaScript มาตรฐาน แต่เป็นผู้ช่วยในคอนโซลนักพัฒนาซอฟต์แวร์ของเบราว์เซอร์ของคุณ นอกจากนี้ยังไม่ใช่ jQuery (ตราบใดที่คุณไม่ได้อยู่บนเพจโดยใช้ jQuery) อย่างไรก็ตามพฤติกรรมนี้ใกล้เคียงกับหนึ่งในjQueryนั้นเกี่ยวกับquerySelector(สำหรับการแข่งขันเดี่ยว) และquerySelectorAll(สำหรับการแข่งขันหลายรายการ) ให้ความแข็งแกร่งเกือบเท่ากับตัวเลือก jQuery


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

1
ไม่แน่ใจว่าเมื่อใดที่เบราว์เซอร์อื่นนำมาใช้ แต่ฉันเห็นว่ามีให้ใช้งานบน IE11 และ Edge ด้วย
isapir

แล้วคนจะรู้ได้อย่างไรว่ามันคือ jquery? สมมติว่าคุณได้นำเข้าไลบรารีขนาดใหญ่ที่อาจรวม libs อื่น ๆ ไว้ด้วยคุณอยากรู้ว่ามี jquery อยู่หรือไม่ กรุณาช่วย.
Martian2049

2
@ Martian2049 ฉันคิดว่า jQuery จริงจะตอบสนอง$.fn.jquery
mb21

2
@Gaspacchio นั่นน่าจะเป็นอีกหนึ่งคำตอบ อย่างไรก็ตามโปรดทราบว่าคำถามนี้$ไม่ได้ใช้ในเทมเพลตลิเทอรัล
Zeta

11

มันไม่มีความหมายสำหรับล่ามเหมือนกับเครื่องหมายขีดล่าง

จากข้อกำหนด ECMAScript:

อนุญาตให้ใช้เครื่องหมายดอลลาร์ ($) และขีดล่าง (_) ได้ทุกที่ในตัวระบุ เครื่องหมายดอลลาร์มีไว้สำหรับใช้ในรหัสที่สร้างขึ้นโดยกลไกเท่านั้น

คุณสามารถตรวจสอบJavaScript Dollar Sign ($) - มีไว้เพื่ออะไร?

ตามแบบแผนเครื่องหมายดอลลาร์ ($) ขีดล่าง (_) และแม้แต่อักขระ ASCII บางตัวได้รับอนุญาตให้ใช้ที่ใดก็ได้ในตัวระบุ JavaScript (ที่มา: เอกสาร Ecma Script (7.6 Identifiers, ECMA-262, 3rd Ed.) ดอลลาร์ เข้าสู่ระบบมีไว้สำหรับใช้ในโค้ดที่สร้างโดยกลไกเท่านั้นซึ่งหมายความว่าเราไม่ต้องการใช้เครื่องหมายดอลลาร์ ($) ในชื่อตัวระบุของเราเว้นแต่เราจะเขียนกรอบต่อไปนี้เป็นรายการอักขระที่อนุญาตซึ่งสามารถใช้ได้ ที่ใดก็ได้ในชื่อตัวระบุ:

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

แก้ไข: -

จริง ๆ แล้วฟังก์ชันเครื่องหมายดอลลาร์กลายเป็นทางลัดโดยพฤตินัยไม่มากก็น้อย document.getElementById()ที่จริงฟังก์ชั่นเครื่องหมายดอลลาร์ได้กลายเป็นมากขึ้นหรือน้อยพฤตินัยทางลัดไปยัง

เพื่อยืนยันคะแนนของฉันให้ตรวจสอบสิ่งนี้ :

$ (ตัวเลือก)

ส่งคืนองค์ประกอบเดียวที่ตรงกับตัวเลือก CSS ที่กำหนด ในรุ่นเก่า Firebugนี้เคยเป็นเทียบเท่ากับ document.getElementById


ลิงก์ของบล็อกนั้นตายไปแล้ว
Victor Zamanian

คำตอบส่วนแรกไม่เกี่ยวข้องส่วนที่สองล้าสมัยและไม่ถูกต้องในบริบทของเบราว์เซอร์สมัยใหม่
Sebastian Simon

7

Dollar sign($) ไม่ได้กำหนด แต่เบราว์เซอร์บางตัวจะเพิ่มฟังก์ชันสำหรับการใช้งานพิเศษ

เช่นเดียวกับ Google Chrome หากคุณพิมพ์$บนคอนโซลมันจะกลับมา:

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

ฟังก์ชันนี้กำหนดให้กับเครื่องมือสำหรับนักพัฒนา Google Chrome และช่วยให้การแก้ไขข้อบกพร่องง่ายขึ้น

ถ้าคุณพิมพ์$('div')มันจะส่งคืนค่าแบบนี้:

e.fn.e.init[178]

และรวมdivวัตถุ DOM ทั้งหมดไว้ในนั้น

BTW หลังจากที่คุณคลิกปุ่มขวาบนเมาส์เพื่อเลือกองค์ประกอบคุณสามารถเข้าถึงขอบเขต angular.js ตามประเภท$scopeบนคอนโซล


4

โปรดทราบว่า$$ไม่มากdocument.querySelectorAllนักเนื่องจากไม่เหมือนกับฟังก์ชันนั้นจะไม่ส่งคืน a NodeList:

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

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

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

ดังนั้นเป็นจริงมากขึ้นเช่น$$(selector) Array.from(document.querySelectorAll(selector))ซึ่งหมายความว่าวิธีการอาร์เรย์เช่นmapและเพื่อนไม่เพียง แต่forEachสามารถใช้ได้เมื่อใช้งาน$$ซึ่งมีประโยชน์มาก


1

มันอาจจะเป็นสิ่งที่เป็นคือชื่อตัวแปรที่ถูกต้องเช่นเดียวกับ$dollar

จากECMAScript :

Identifier ::
IdentifierName but not ReservedWord

IdentifierName ::
IdentifierStart
IdentifierName IdentifierPart

IdentifierStart ::
UnicodeLetter
$
_ 
\ UnicodeEscapeSequence

วิธีแก้ปัญหาที่ง่ายที่สุดในการดูว่ามันคืออะไรและกำหนดไว้ที่ใดก็อาจจะพิมพ์$()และวางเบรกพอยต์ในบรรทัดนี้


1

เพียงแค่ให้เสร็จสมบูรณ์คำตอบอื่น ๆ ที่นี่ MooTools ยังใช้เป็นชื่อแทนไป$document.getElementById

มันไม่ตรวจสอบว่ามีการดำเนินการแล้วจะเริ่มต้น$document.id

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