jak zjistit, zda je proměnná řetězec

Jak zjistím, zda je proměnná řetězec?

Odpověď

Toto je způsob určený ve specifikaci ECMAScript k určení vnitřní vlastnosti [[Class]].

if( Object.prototype.toString.call(myvar) == '[object String]' ) {
   // a string
}

Z 8.6.2 Vnitřní vlastnosti a metody objektu :

Hodnota vnitřní vlastnosti [[Class]] je definována touto specifikací pro každý druh vestavěného objektu. Hodnota vnitřní vlastnosti [[Class]] hostitelského objektu může být jakákoliv hodnota String kromě jedné z „Arguments“, „Array“, „Boolean“, „Date“, „Error“, „Function“, „JSON“, „Matematika“, „Číslo“, „Objekt“, „RegExp“, a „Řetězec“ . Hodnota vnitřní vlastnosti [[Class]] se používá interně k rozlišení různých druhů objektů. Všimněte si, že tato specifikace neposkytuje programu žádné prostředky pro přístup k této hodnotě s výjimkou Object.prototype.toString (viz 15.2.4.2).

Jako příklad, jak je to užitečné, zvažte tento příklad:

var str = new String('some string');

alert( typeof str ); // "object"

alert( Object.prototype.toString.call(str) ); // "[object String]"

Pokud používáte typeof , získáte "object" .

Ale pokud použijete výše uvedenou metodu, dostanete správný výsledek "[object String]" .