Kā JavaScript var noteikt, vai mainīgais ir virkne vai kas cits?
Varat izmantot operatoru typeof
:
var booleanValue = true;
var numericalValue = 354;
var stringValue = "This is a String";
var stringObject = new String( "This is a String Object" );
alert(typeof booleanValue) // displays "boolean"
alert(typeof numericalValue) // displays "number"
alert(typeof stringValue) // displays "string"
alert(typeof stringObject) // displays "object"
Piemērs no šī lapa. (Piemērs ir nedaudz pārveidots).
Tas nedarbosies, kā gaidīts, ja virknes tiks izveidotas ar new String()
, bet tas tiek reti izmantots un to ieteicams novērst[1][2]. Ja vēlaties, skatiet citas atbildes par to, kā ar tām rīkoties.
Labākais veids:
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');
Katrs no šiem objektiem ir konstruēts ar atbilstošas klases funkciju, piemēram, "new Object()" utt.
Arī Duck-Typing: Ja tas izskatās kā pīle, staigā kā pīle un smaržo kā pīle - tam jābūt masīvam" Tas nozīmē, ka pārbaudiet tā īpašības.
Ceru, ka tas palīdzēs.
Atcerieties, ka vienmēr varat izmantot arī pieejas kombinācijas. Lūk, piemērs, kā izmantot darbību inline map ar typeof:
var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];
Lūk'reālāks 'reālās pasaules' inline-mapas izmantošanas piemērs:
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
Šī funkcija izmantotu [ custom ] "type-casting" -- drīzāk "type-/-value-mapping" -- lai noskaidrotu, vai mainīgais patiešām "pastāv". Tagad jūs varat sadalīt šo nepatīkamo matu starp null
& amp; 0
!
Daudzos gadījumos jums pat nav svarīgs tā tips. Vēl viens veids, kā apiet tipizēšanu, ir kombinēt Duck-Type kopas:
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) ...;
}
Gan Number.prototipam
, gan String.prototipam
ir .toString() metode
. Jūs vienkārši pārliecinājāties, ka skaitļa virknes ekvivalents ir vienāds, un pēc tam pārliecinājāties, ka esat to nodevis http
funkcijai kā Numer
. Citiem vārdiem sakot, mums pat nebija svarīgi, kāds ir tā tips.
Ceru, ka tas dos jums vairāk darba :)