यदि जावास्क्रिप्ट में एक स्ट्रिंग है, तो मैं कैसे जांच सकता हूं?
मैंने यह कोशिश की है और यह काम नहीं करता है ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
यदि जावास्क्रिप्ट में एक स्ट्रिंग है, तो मैं कैसे जांच सकता हूं?
मैंने यह कोशिश की है और यह काम नहीं करता है ...
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ऑपरेटर एक इन्फ़िक्स (ताकि आपके उदाहरण के एलएचएस मतलब नहीं है) नहीं है।
आपको इसका उपयोग करने की आवश्यकता है ...
if (typeof a_string == 'string') {
// This is a string.
}
याद रखें, typeofएक ऑपरेटर है, एक फ़ंक्शन नहीं है। इसके बावजूद, आप typeof(var)जंगली में बहुत उपयोग किया जा रहा देखेंगे । यह उतना ही समझ में आता है var a = 4 + (1)।
इसके अलावा, आप ==दोनों ऑपरेंड String( typeof हमेशा रिटर्न ) के बाद से (समानता तुलना ऑपरेटर) का भी उपयोग कर सकते हैं String, जावास्क्रिप्ट को उन्हीं चरणों को निष्पादित करने के लिए परिभाषित किया गया है जिनका मैंने उपयोग किया था ===(सख्त तुलना ऑपरेटर)।
के रूप में Box9 का उल्लेख है , इस का पता नहीं लगा होगा एक instantiated Stringवस्तु।
आप उसके साथ का पता लगा सकते हैं ...।
var isString = str instanceof String;
jsFiddle ।
... या ...
var isString = str.constructor == String;
jsFiddle ।
परंतु यह एक बहु windowपरिवेश में काम नहीं करेगा (सोचें iframe)।
आप इसके साथ मिल सकते हैं ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle ।
लेकिन फिर, (जैसा कि Box9 उल्लेख है ), आप शाब्दिक Stringप्रारूप का उपयोग करके बेहतर हैं , उदाvar str = 'I am a string'; ।
if(myVar.toUpperCase) alert('I am a string');:? देखें: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
निम्नलिखित अभिव्यक्ति सही है :
'qwe'.constructor === String
निम्नलिखित अभिव्यक्ति सही है :
typeof 'qwe' === 'string'
निम्नलिखित अभिव्यक्ति झूठी है (सिक!):
typeof new String('qwe') === 'string'
निम्नलिखित अभिव्यक्ति सही है :
typeof new String('qwe').valueOf() === 'string'
सबसे अच्छा और सही तरीका ( imho ):
if (someVariable.constructor === String) {
...
}
अब दिन मुझे लगता है कि यह टाइपोफ () के एक फ़ंक्शन रूप का उपयोग करना पसंद करता है ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof, आप केवल उन कोष्ठकों के साथ संचालन के क्रम को नियंत्रित कर रहे हैं। कुछ लोगों को कुछ परिस्थितियों में यह अधिक पठनीय लग सकता है।
filenameकेवल चारों ओर के कोष्ठक एक एकल कथन का समूह बनाते हैं, और इसलिए बेकार और बहिष्कृत होते हैं। यह अच्छी बात है कि इस उत्तर में 0 का स्कोर है क्योंकि यह गलत, भ्रामक और अनपेक्षित है; बेहतर होगा कि इसका नकारात्मक अंक हो।
सभी मामलों में अशक्त या अपरिभाषित की जाँच करें
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/
मैं जानना चाहता हूं कि क्या इस पद्धति में खामियां हैं, लेकिन इसने मुझे वर्षों तक अच्छी सेवा दी है।