ฉันจะตรวจสอบว่า var เป็นสตริงใน JavaScript ได้อย่างไร?
ฉันได้ลองแล้ว แต่มันไม่ทำงาน ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
ฉันจะตรวจสอบว่า var เป็นสตริงใน JavaScript ได้อย่างไร?
ฉันได้ลองแล้ว แต่มันไม่ทำงาน ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
คำตอบ:
คุณสนิท:
if (typeof a_string === 'string') {
// this is a string
}
ในบันทึกที่เกี่ยวข้อง: การตรวจสอบข้างต้นจะไม่ทำงานหากมีการสร้างสตริงด้วยnew String('hello')
เนื่องจากจะเป็นประเภทObject
แทน มีวิธีแก้ไขปัญหาที่ซับซ้อนในการแก้ไขปัญหานี้ แต่ก็ควรหลีกเลี่ยงการสร้างสายอักขระแบบที่เคย
if(typeof(str) === typeof(String()))
typeof
ผู้ประกอบการไม่ได้เป็นมัด (เพื่อ LHS ตัวอย่างของคุณไม่ให้ความรู้สึก)
คุณต้องใช้มันอย่างนั้น ...
if (typeof a_string == 'string') {
// This is a string.
}
จำไว้ว่าtypeof
เป็นผู้ประกอบการไม่ใช่ฟังก์ชั่น อย่างไรก็ตามเรื่องนี้คุณจะเห็นtypeof(var)
การใช้งานจำนวนมากในป่า ทำให้รู้สึกเท่าvar a = 4 + (1)
นี้
นอกจากนี้คุณอาจใช้==
(ตัวดำเนินการเปรียบเทียบความเท่าเทียมกัน) เนื่องจากตัวถูกดำเนินการทั้งสองเป็นString
s ( ส่งกลับค่าtypeof
เสมอString
) JavaScript ถูกกำหนดให้ทำตามขั้นตอนเดียวกันกับที่ฉันใช้===
(ตัวดำเนินการเปรียบเทียบที่เข้มงวด)
ดังที่Box9 กล่าวถึงสิ่งนี้จะไม่ตรวจจับString
วัตถุที่สร้างอินสแตนซ์
คุณสามารถตรวจจับสิ่งนั้นได้ด้วย ...
var isString = str instanceof String;
...หรือ...
var isString = str.constructor == String;
แต่สิ่งนี้จะไม่ทำงานในwindow
สภาพแวดล้อมที่หลากหลาย(คิดiframe
)
คุณสามารถหลีกเลี่ยงสิ่งนี้ได้ด้วย ...
var isString = Object.prototype.toString.call(str) == '[object String]';
แต่อีกครั้ง (ตามBox9 กล่าวถึง ) คุณจะดีกว่าเพียงแค่ใช้ตัวอักษรรูปแบบเช่นString
var str = 'I am a string';
if(myVar.toUpperCase) alert('I am a string');
? ดูที่: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
การรวมคำตอบก่อนหน้านี้ให้โซลูชันเหล่านี้:
if (typeof str == 'string' || str instanceof String)
หรือ
Object.prototype.toString.call(str) == '[object String]'
นิพจน์ต่อไปนี้จะคืนค่าเป็นจริง :
'qwe'.constructor === String
นิพจน์ต่อไปนี้จะคืนค่าเป็นจริง :
typeof 'qwe' === 'string'
นิพจน์ต่อไปนี้จะคืนค่าเท็จ (sic!):
typeof new String('qwe') === 'string'
นิพจน์ต่อไปนี้จะคืนค่าเป็นจริง :
typeof new String('qwe').valueOf() === 'string'
วิธีที่ดีที่สุดและถูกต้อง ( imho ):
if (someVariable.constructor === String) {
...
}
วันนี้ฉันเชื่อว่าเป็นที่นิยมใช้รูปแบบฟังก์ชัน typeof () ดังนั้น ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
คุณเพียงแค่ควบคุมลำดับการปฏิบัติงานด้วยวงเล็บเหล่านั้น บางคนอาจพบว่าอ่านได้มากขึ้นในบางสถานการณ์
filename
คำแถลงกลุ่มเดียวดังนั้นจึงไร้ประโยชน์และไม่เกี่ยวข้อง มันเป็นสิ่งที่ดีคำตอบนี้มีคะแนนเป็น 0 เพราะมันผิดทำให้เข้าใจผิดและไม่ช่วยเหลือ มันจะดีกว่าถ้ามีคะแนนเป็นลบ
ตรวจสอบ null หรือ undefined ในทุกกรณี a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
และtypeof undefined
จะไม่กลับมา'string'
ดังนั้นtypeof a_string
ก็เพียงพอแล้ว ขออภัยสำหรับการทำลายล้าง
วิธีการส่วนตัวของฉันซึ่งดูเหมือนจะใช้ได้กับทุกกรณีคือการทดสอบว่ามีสมาชิกคนใดบ้างที่จะปรากฏต่อสายอักขระเท่านั้น
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
ดู: http://jsfiddle.net/x75uy0o6/
ฉันต้องการทราบว่าวิธีการนี้มีข้อบกพร่องหรือไม่ แต่มันให้บริการฉันดีมาหลายปี