จุดประสงค์ของสัญลักษณ์เครื่องหมายบวกต่อหน้าตัวแปรคืออะไร?


262

นี่ฟังดูเหมือนคำถามง่ายๆ แต่ฉันไม่มีโชคในการค้นหา อะไร+dใน

function addMonths(d, n, keepTime) { 
    if (+d) {

หมายถึง?


สำเนาที่เป็นไปได้ของเครื่องหมายบวกทำใน 'return + new Date'
nawfal

3
ปัญหาเดียวกัน แต่ชื่อของหน้าอื่น ๆ ไม่ได้อธิบายกรณีทั่วไปเช่นนี้
geotheory

1
ซ้ำเป็นไปได้ของอะไร+…เฉลี่ยใน JavaScript
Bergi

คำตอบ:


312

+ผู้ประกอบการส่งกลับตัวเลขแสดงของวัตถุ ดังนั้นในกรณีเฉพาะของคุณมันจะดูเหมือนว่าเป็นการทำนายว่าdตัวเลขนั้นไม่ใช่ศูนย์หรือไม่

อ้างอิงที่นี่ และเป็นชี้ให้เห็นในความคิดเห็นที่นี่



1
ลิงค์ที่ใช้งานได้: developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/
......

ฉันแค่สงสัยว่าอันไหนมีประสิทธิภาพมากกว่าแยกสตริงเป็นจำนวนเต็มโดยใช้ฟังก์ชัน parseInt หรือใช้ตัวดำเนินการบวก
acarlstein

1
แตกต่างจาก.parseInt()อย่างไร
Daniel W.

1
@acarlstein จากลิงก์ MDN ในคำตอบ: "แม้ว่า unary negation (-) สามารถแปลงไม่ใช่ตัวเลขได้ แต่unary plus เป็นวิธีที่รวดเร็วและเป็นที่นิยมในการแปลงบางสิ่งให้เป็นตัวเลขเพราะมันไม่ได้ทำการดำเนินการอื่นใดกับตัวเลข ." (เพียงสำหรับ "อย่างเป็นทางการ" คำตอบ)

22

มันเป็นโอเปอเรเตอร์ "+" ที่ไม่ได้มาตรฐานซึ่งให้ผลลัพธ์เป็นนิพจน์ตัวเลข มันจะเหมือนกับd*1ฉันเชื่อ


12

ดังที่อธิบายไว้ในคำตอบอื่น ๆ มันจะแปลงตัวแปรเป็นตัวเลข มีประโยชน์เป็นพิเศษเมื่อ d สามารถเป็นตัวเลขหรือสตริงได้ ฟังก์ชัน ที่ประเมินเป็นตัวเลข

ตัวอย่าง (ใช้addMonthsฟังก์ชันในคำถาม):

addMonths(34,1,true);
addMonths("34",1,true);

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


+dจะไม่ประเมินเป็นตัวเลขพร้อมตัวอย่างการเรียกใช้ครั้งแรกของ addMonths
Gus Crawford

จริงฉันไม่รู้ว่าฉันทำอะไรเมื่อฉันเขียนสิ่งนี้ +function(){...}จะสร้างNaNฟังก์ชั่นที่ไม่ประเมิน
RubenLaguna

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