Frage Überprüfen Sie, ob eine Variable eine Zeichenfolge in JavaScript ist


Wie kann ich feststellen, ob eine Variable eine Zeichenkette oder etwas anderes in JavaScript ist?


1172
2017-10-30 14:36


Ursprung


Antworten:


Sie können verwenden typeof Operator:

var booleanValue = true; 
var numericalValue = 354;
var stringValue = "This is a String";
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"

Beispiel aus diese Webseite. (Beispiel wurde jedoch leicht modifiziert).


1095
2017-10-30 14:40



Das funktioniert für mich:

if (typeof myVar === 'string' || myVar instanceof String)
// it's a string
else
// it's something else

1457
2018-02-24 19:38



Da 580+ Menschen für eine falsche Antwort gestimmt haben und 800+ für eine funktionierende, aber Schrotflinte-ähnliche Antwort gestimmt haben, dachte ich, es könnte sich lohnen, meine Antwort in einer einfacheren Form zu wiederholen, die jeder verstehen kann.

function isString(x) {
  return Object.prototype.toString.call(x) === "[object String]"
}

Oder, inline (Ich habe ein UltiSnip-Setup dafür):

Object.prototype.toString.call(myVar) === "[object String]"

Zu Ihrer Information, Pablo Santa Cruz's Antwort ist falsch, weil typeof new String("string") ist object

DRAXs Antwort ist korrekt und funktional und sollte die richtige Antwort sein (da Pablo Santa Cruz definitiv inkorrekt ist, und ich werde nicht gegen die Volksabstimmung argumentieren.)

Allerdings ist diese Antwort auch definitiv richtig und tatsächlich die beste Antwort (außer vielleicht für den Vorschlag, zu verwenden lodash/unterstreichen). Disclaimer: Ich habe zu der Codebase von lodash 4 beigetragen.

Meine ursprüngliche Antwort (die offensichtlich über viele Köpfe hinweg flog) lautet:

Ich transcodierte das von underscore.js:

['Arguments', 'Function', 'String', 'Number', 'Date', 'RegExp'].forEach( 
    function(name) { 
        window['is' + name] = function(obj) {
              return toString.call(obj) == '[object ' + name + ']';
    }; 
});

Das wird isString, isNumber usw. definieren


In Node.js kann dies als ein Modul implementiert werden:

module.exports = [
  'Arguments', 
  'Function', 
  'String', 
  'Number', 
  'Date', 
  'RegExp'
].reduce( (obj, name) => {
  obj[ 'is' + name ] = x => toString.call(x) == '[object ' + name + ']';
  return obj;
}, {});

100
2017-07-21 11:59



Ich empfehle die Verwendung der integrierten Funktionen von jQuery oder Lodash / Unterstrich. Sie sind einfacher zu benutzen und leichter zu lesen.

Beide Funktionen behandeln den Fall DRAX erwähnt ... das heißt, sie beide Überprüfen Sie, ob (A) die Variable ein String-Literal oder (B) eine Instanz des String-Objekts ist. In beiden Fällen identifizieren diese Funktionen den Wert korrekt als Zeichenfolge.

lodash/Underscore.js

if(_.isString(myVar))
   //it's a string
else
   //it's something else

jQuery

if($.type(myVar) === "string")
   //it's a string
else
   //it's something else

Sehen Dokumentation für _.isString () für mehr Details.

Sehen jQuery-Dokumentation für $ .type () für mehr Details.


78
2018-01-06 20:43



function isString (obj) {
  return (Object.prototype.toString.call(obj) === '[object String]');
}

Ich habe das hier gesehen:

http://perfectionkills.com/instanceof-sidered-harmful-oder-how-to-write-a-robust-isarray/


28
2017-07-24 19:07



Sie können diese Open Source wiederverwendbar verwenden Is-String-Komponente um zu überprüfen, ob eine Variable eine Zeichenkette ist, während sie vermieden wird, sie zu kopieren.

Beispiele:

 isString(3) // => false
 isString('') // => true

Auch hier ist wie isString wurde in AngularJS implementiert:

function isString(value) {return typeof value === 'string';}

23
2018-02-10 13:10



Bester Weg:

var s = 'String';
var a = [1,2,3];
var o = {key: 'val'};

(s.constructor === String) && console.log('its a string');
(a.constructor === Array) && console.log('its an array');
(o.constructor === Object) && console.log('its an object');
(o.constructor === Number || s.constructor === Boolean) && console.log('this won\'t run');

Jeder von diesen wurde durch seine entsprechende Klassenfunktion wie "neues Objekt ()" usw. konstruiert.

Auch, Duck-Typing: "Wenn es aussieht wie eine Ente, läuft wie eine Ente und riecht wie eine Ente - es muss ein Array sein" Bedeutung, überprüfen Sie seine Eigenschaften.

Hoffe das hilft.

Bearbeiten; 12/05/2016

Denken Sie daran, Sie können immer auch Kombinationen von Ansätzen verwenden. Hier ist ein Beispiel für die Verwendung eines Inline-Karte von Handlungen mit Art der:

var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];

Hier ist ein Beispiel aus der realen Welt für Inline-Maps:

function is(datum) {
    var isnt = !{ null: true, undefined: true, '': true, false: false, 0: false }[ datum ];
    return !isnt;
}
console.log( is(0), is(false), is(undefined), ... );  // >> true true false

Diese Funktion verwendet [custom] "type-casting" - eher "type - / - value-mapping" - um herauszufinden, ob eine Variable tatsächlich "existiert". Jetzt können Sie dieses eklige Haar zwischen teilen null& 0!

Viele Male Sie interessieren sich nicht einmal für seinen Typ. Eine weitere Möglichkeit, die Eingabe zu umgehen, besteht in der Kombination von Ducktypen:

this.id = "998";  // use a number or a string-equivalent
function get(id) {
    if (!id || !id.toString) return;
    if (id.toString() === this.id.toString()) http( id || +this.id );
    // if (+id === +this.id) ...;
}

Beide Number.prototype  und  String.prototype habe einen .toString() method. Sie haben nur sichergestellt, dass das String-Äquivalent der Nummer gleich ist, und dann haben Sie sichergestellt, dass Sie es in die übergeben haben http Funktion als a Number. Mit anderen Worten, wir haben nicht einmal Pflege Was war sein Typ?

Hoffe das gibt dir mehr zum arbeiten mit :)


15
2018-04-25 13:15



Genommen von lodash:

function isString(val) {
   return typeof val === 'string' || ((!!val && typeof val === 'object') && Object.prototype.toString.call(val) === '[object String]');
}

console.log(isString('hello world!')); // true
console.log(isString(new String('hello world'))); // true

7
2017-09-06 05:06



Ich benutze gerne diese einfache Lösung:

var myString = "test";
if(myString.constructor === String)
{
     //It's a string
}

6
2017-11-06 21:21



Eine einfache Lösung wäre:

var x = "hello"

if(x === x.toString(){
// it's a string 
}else{
// it isn't
}

5
2018-02-25 15:00