var.replace ไม่ใช่ฟังก์ชัน


133

ฉันใช้รหัสด้านล่างเพื่อพยายามตัดสตริงใน Javascript แต่ได้รับข้อผิดพลาดที่กล่าวถึงในชื่อเรื่อง:

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}

แก้ไข:

ฉันแก้ไขปัญหาแล้ว .... ขออภัยฉันควรใส่รหัสว่าฉันเรียกมันอย่างไรด้วย .... ตระหนักว่าฉันบังเอิญส่งวัตถุของฟิลด์แบบฟอร์มเองแทนที่จะเป็นค่าของมัน


21
strอาจไม่ใช่สตริง
Pekka

นอกจากนี้คุณยังไม่มีเครื่องหมายคำพูดรอบ ๆregexสตริงซึ่งอาจจะไม่ดีนัก
Grant Thomas

4
@MrDisappointment Javascript มีนิพจน์ทั่วไปที่เป็นตัวอักษร - ไม่จำเป็นต้องเป็นสตริง
Gareth

1
@Closure: คุณอาจพบ (หรือต้องการเริ่มต้น) การอภิปรายที่english.stackexchange.com/search?q=contractions
user113716

15
ใช้str.toString().replace(/^\s+|\s+$/g,'')แทน
M Rostami

คำตอบ:


214

ฉันเดาว่ารหัสที่เรียกtrimใช้ฟังก์ชันของคุณไม่ได้ส่งผ่านสตริงไป

เพื่อแก้ไขปัญหานี้คุณสามารถทำให้strสตริงเช่นนี้str.toString().replace(...)
... เป็นAlperชี้ให้เห็นด้านล่าง


39
str.toString()แก้ไขปัญหาของฉัน
alper

ดีstr.toString()เป็นเพียงการแก้ปัญหาถ้าคุณกำลังผ่านค่าที่ถูกต้องที่สามารถประสบความสำเร็จได้รับการแปลงไปสตริง; ในกรณีของฉันฉันผ่านสิ่งที่ผิดไปทั้งหมด :)
Brett

ฉันได้รับข้อผิดพลาดเดียวกันฉันพยายาม toString () แต่ได้รับข้อผิดพลาด: ไม่สามารถอ่านคุณสมบัติ "toString" ไม่ได้กำหนดและเหมือนกันสำหรับ "แทนที่"
Hitesh Kumar

90

ปัญหาที่เป็นไปได้:

  • ตัวแปรคือNUMBER (แทนสตริง);
    num=35; num.replace(3,'three'); =====> ERROR
    num=35; num.toString().replace(3,'three'); =====> CORRECT !!!!!!
    num='35'; num.replace(3,'three'); =====> CORRECT !!!!!!
  • ตัวแปรคือวัตถุ (แทนสตริง);
  • ไม่ได้กำหนดตัวแปร

1
ขอบคุณสำหรับสิ่งนี้ฉันกำลังประสบปัญหาโดยที่ฉันได้รับ String ในวัตถุ typeof ฉันแปลงวัตถุนั้นด้วย toString () และมันใช้งานได้! ขอบคุณ!
Vishwajit R. Shinde

14

การแทนที่จะไม่แทนที่ตัวเลข แทนที่สตริงเท่านั้น

สิ่งนี้ควรใช้งานได้

function trim(str) {
    return str.toString().replace(/^\s+|\s+$/g,'');
}

หากคุณต้องการตัดสตริงเท่านั้น คุณสามารถใช้"str.trim ()"


6

คุณไม่ได้ส่งสตริงมิฉะนั้นจะมีreplaceวิธีการ ฉันหวังว่าคุณไม่ได้พิมพ์แทนfunction trim(str) { return var.replace(blah); }return str.replace


6

คุณควรทำการตรวจสอบความถูกต้องก่อนที่จะเรียกใช้ฟังก์ชันของคุณจริง:

function trim(str) {
    if(typeof str !== 'string') {
        throw new Error('only string parameter supported!');
    }

    return str.replace(/^\s+|\s+$/g,'');
}

5

คุณเรียกฟังก์ชันของคุณถูกต้องหรือไม่? กล่าวคือ สิ่งที่คุณส่งผ่านเป็นพารามิเตอร์เป็นสตริงจริงหรือ

มิฉะนั้นฉันไม่พบปัญหากับโค้ดของคุณตัวอย่างด้านล่างทำงานได้ตามที่คาดไว้

function trim(str) {
    return str.replace(/^\s+|\s+$/g,'');
}


trim('    hello   ');  // --> 'hello'

อย่างไรก็ตามหากคุณเรียก functoin ของคุณด้วยสิ่งที่ไม่ใช่สตริงคุณจะได้รับข้อผิดพลาดด้านบน:

trim({});  // --> TypeError: str.replace is not a function

5

ในกรณีของตัวเลขคุณสามารถลองแปลงเป็นสตริง:

var stringValue = str.toString();
return stringValue.replace(/^\s+|\s+$/g,'');

3

คุณควรใช้ toString () วิธีการของสคริปต์ java สำหรับการแปลงเป็นสตริงก่อนเนื่องจากวิธีการแทนที่เป็นฟังก์ชันสตริง


1

ฉันแก้ไขปัญหาแล้ว .... ขออภัยฉันควรใส่รหัสว่าฉันเรียกมันอย่างไรด้วย .... ตระหนักว่าฉันบังเอิญส่งวัตถุของฟิลด์แบบฟอร์มเองแทนที่จะเป็นค่า

ขอบคุณสำหรับคำตอบของคุณ :)


1
คุณสามารถแก้ไขคำถามได้ดีกว่าการให้คำตอบกับตัวเอง โอ้ขณะที่คุณกำลังทำอยู่ให้เลือกคนดีคนหนึ่งและยอมรับคำตอบของพวกเขา :-)
Christopher Creutzig

2
@ คริสโตเฟอร์: ไม่; ถ้าเขาแก้ปัญหาด้วยตัวเองเขาควรเขียนคำตอบและยอมรับมัน นั่นคือแนวทางปฏิบัติที่ดีที่สุด การใส่คำตอบในคำถามและยอมรับคำตอบโดยพลการไม่ได้
Lightness Races ใน Orbit

@ โทมะลักษณ์: มีคำตอบที่ถูกต้องหลายคำที่เก่ากว่าคำตอบนี้ ฉันยอมรับว่าการยอมรับคำตอบของคุณเองหากเป็นคำตอบแรกที่ถูกต้องนั้นเป็นสิ่งที่ดีและไม่ต้องการแนะนำให้ใส่คำตอบลงในคำถาม
Christopher Creutzig

@ คริสโตเฟอร์: คำตอบที่ยอมรับควรเป็นคำตอบที่มีโซลูชันที่ OP ใช้
Lightness Races ใน Orbit

0

ตรวจสอบให้แน่ใจว่าคุณกำลังส่งสตริงไปยังเมธอด "แทนที่" มีปัญหาเดียวกันและแก้ไขได้โดยการส่งสตริง คุณยังสามารถทำให้เป็นสตริงโดยใช้วิธี toString ()

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