Yanıtlar:
Yakınız:
if (typeof a_string === 'string') {
// this is a string
}
İlgili bir notta: new String('hello')
tür olarak bir dize oluşturulursa yukarıdaki kontrol çalışmaz Object
. Bu sorunu çözmek için karmaşık çözümler vardır, ancak dizeleri bu şekilde oluşturmaktan kaçınmak daha iyidir.
if(typeof(str) === typeof(String()))
typeof
Operatör bir infix (böylece örnek LHS mantıklı değil) değil.
Bu şekilde kullanmanız gerekiyor ...
if (typeof a_string == 'string') {
// This is a string.
}
Unutmayın, typeof
bir işleç değil, bir işleçtir. Buna rağmen typeof(var)
, vahşi doğada çok kullanıldığını göreceksiniz . Bu kadar mantıklı var a = 4 + (1)
.
Ayrıca, ==
her iki işlenen de String
s ( typeof
her zaman döndürür a String
) olduğu için (eşitlik karşılaştırma operatörü) de kullanabilirsiniz , JavaScript kullandığım aynı adımları ===
(katı karşılaştırma operatörü) gerçekleştirmek için tanımlanır .
As BOX9 bahseder , bu algılamaz bir örneği String
nesne.
Bunun için tespit edebilirsiniz ....
var isString = str instanceof String;
jsFiddle .
...veya...
var isString = str.constructor == String;
jsFiddle .
Ancak bu çoklu bir window
ortamda çalışmaz (sanırım iframe
).
Bu sorunla ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Ama yine de, ( Box9'dan bahsedildiği gibi ), sadece değişmez String
formatı kullanmaktan daha iyidir , örn var str = 'I am a string';
.
if(myVar.toUpperCase) alert('I am a string');
? Bkz: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
Aşağıdaki ifade true değerini döndürür :
'qwe'.constructor === String
Aşağıdaki ifade true değerini döndürür :
typeof 'qwe' === 'string'
Aşağıdaki ifade false (sic!) Döndürür:
typeof new String('qwe') === 'string'
Aşağıdaki ifade true değerini döndürür :
typeof new String('qwe').valueOf() === 'string'
En iyi ve doğru yol ( imho ):
if (someVariable.constructor === String) {
...
}
Şimdi gün inanıyorum typeof () bir işlev formu kullanmak tercih ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
, sadece bu parantezlerle işlem sırasını kontrol edersiniz. Bazı insanlar bazı durumlarda daha okunabilir bulabilir.
filename
yalnızca tek bir ifadeyi gruplandırır ve bu nedenle işe yaramaz ve yabancıdır. Bu cevabın puanı 0 olması iyi bir şey çünkü yanlış, yanıltıcı ve yararsızdır; olumsuz bir skoru olsaydı daha iyi olurdu.
her durumda null veya undefined olup olmadığını kontrol et a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
ve typeof undefined
asla geri dönmeyecek 'string'
, bu yüzden typeof a_string
yeter. Necroposting için özür dilerim
Tüm durumlar için işe yarayan kişisel yaklaşımım, sadece dizeler için mevcut olacak üyelerin varlığını test etmektir.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Bkz. Http://jsfiddle.net/x75uy0o6/
Bu yöntemin kusurları olup olmadığını bilmek istiyorum, ama bana yıllarca iyi hizmet etti.