Відповіді:
Ви були поруч:
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
завжди повертає a String
), JavaScript визначається для виконання тих же кроків, що і я ===
(оператор жорсткого порівняння).
Як згадує Box9 , це не буде виявляти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'
Наступний вираз повертає false (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, тому що вона неправильна, оманлива і не корисна; було б краще, якби вона мала негативний бал.
перевірити наявність недійсного або невизначеного у всіх випадках 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/
Я хотів би знати, чи є у цього методу недоліки, але він мені добре допомагає роками.