Bagaimana saya bisa memeriksa apakah var adalah string dalam JavaScript?
Saya sudah mencoba ini dan tidak berhasil ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Bagaimana saya bisa memeriksa apakah var adalah string dalam JavaScript?
Saya sudah mencoba ini dan tidak berhasil ...
var a_string = "Hello, I'm a string.";
if (a_string typeof 'string') {
// this is a string
}
Jawaban:
Anda sudah dekat:
if (typeof a_string === 'string') {
// this is a string
}
Pada catatan terkait: centang di atas tidak akan berfungsi jika string dibuat dengan new String('hello')
jenis yang akan digunakan Object
. Ada solusi rumit untuk mengatasi hal ini, tetapi lebih baik untuk menghindari menciptakan string seperti itu, selamanya.
if(typeof(str) === typeof(String()))
The typeof
Operator bukanlah infiks (sehingga LHS dari contoh Anda tidak masuk akal).
Anda harus menggunakannya seperti itu ...
if (typeof a_string == 'string') {
// This is a string.
}
Ingat, typeof
adalah operator, bukan fungsi. Meskipun demikian, Anda akan melihat typeof(var)
banyak digunakan di alam liar. Ini masuk akal seperti var a = 4 + (1)
.
Juga, Anda juga dapat menggunakan ==
(operator perbandingan kesetaraan) karena kedua operan adalah String
s ( typeof
selalu mengembalikan a String
), JavaScript didefinisikan untuk melakukan langkah-langkah yang sama seperti yang saya gunakan ===
(operator perbandingan ketat).
Seperti Box9 menyebutkan , ini tidak akan mendeteksiString
objek yang dipakai .
Anda dapat mendeteksi untuk itu dengan ....
var isString = str instanceof String;
jsFiddle .
...atau...
var isString = str.constructor == String;
jsFiddle .
Tetapi ini tidak akan bekerja di window
lingkungan multi (pikirkan iframe
s).
Anda dapat menyiasati ini dengan ...
var isString = Object.prototype.toString.call(str) == '[object String]';
jsFiddle .
Tetapi sekali lagi, (seperti Box9 menyebutkan ), Anda lebih baik hanya menggunakan String
format literal , misalnya var str = 'I am a string';
.
if(myVar.toUpperCase) alert('I am a string');
? Lihat: jsfiddle.net/tb3t4nsx
{ toUpperCase: '' }
Ekspresi berikut mengembalikan true :
'qwe'.constructor === String
Ekspresi berikut mengembalikan true :
typeof 'qwe' === 'string'
Ekspresi berikut menghasilkan false (sic!):
typeof new String('qwe') === 'string'
Ekspresi berikut mengembalikan true :
typeof new String('qwe').valueOf() === 'string'
Cara terbaik dan benar ( imho ):
if (someVariable.constructor === String) {
...
}
Sekarang saya percaya ini lebih disukai untuk menggunakan bentuk fungsi typeof () jadi ...
if(filename === undefined || typeof(filename) !== "string" || filename === "") {
console.log("no filename aborted.");
return;
}
typeof
, Anda hanya mengendalikan urutan operasi dengan tanda kurung itu. Beberapa orang mungkin merasa lebih mudah dibaca dalam keadaan tertentu.
filename
grup hanya satu pernyataan, dan karena itu tidak berguna dan asing. Untung jawaban ini memiliki skor 0 karena salah, menyesatkan, dan tidak membantu; akan lebih baik jika memiliki skor negatif.
periksa null atau tidak terdefinisi dalam semua kasus a_string
if (a_string && typeof a_string === 'string') {
// this is a string and it is not null or undefined.
}
typeof null
dan typeof undefined
tidak akan pernah kembali 'string'
, itu typeof a_string
sudah cukup. Maaf untuk necroposting
Pendekatan pribadi saya, yang tampaknya bekerja untuk semua kasus, sedang menguji kehadiran anggota yang semuanya hanya akan hadir untuk string.
function isString(x) {
return (typeof x == 'string' || typeof x == 'object' && x.toUpperCase && x.substr && x.charAt && x.trim && x.replace ? true : false);
}
Lihat: http://jsfiddle.net/x75uy0o6/
Saya ingin tahu apakah metode ini memiliki kekurangan, tetapi telah membantu saya selama bertahun-tahun.