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]"
.