Como posso determinar se uma variável é uma string ou outra coisa em JavaScript?
Você pode utilizar o tipo de
operador:
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"
Exemplo de esta página web. (Exemplo foi ligeiramente modificado no entanto).
Isto não funcionará como esperado no caso de cordas criadas com new String()
, mas isto é raramente utilizado e recomendado contra>[1]]{[2]. Veja as outras respostas para saber como lidar com elas, se você assim o desejar.
A melhor maneira:
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');
Cada um deles foi construído pela sua função de classe apropriada, como "new Object()", etc.
Também, Duck-Typing: "Se parece um pato, anda como um pato, e cheira como um pato - deve ser um Array" Ou seja, verifique as suas propriedades.
Espero que isto ajude.
Lembre-se, você pode sempre usar combinações de abordagens também. Aqui está um exemplo de utilização de um mapa em linha de ações com tipo de:
var type = { 'number': Math.sqrt.bind(Math), ... }[ typeof datum ];
Aqui está um exemplo mais "do mundo real" do uso de mapas em linha:
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
Esta função usaria [ custom ] "type-casting" -- em vez disso, "type/-value-mapping" -- para descobrir se uma variável realmente "existe". Agora você pode dividir esse cabelo desagradável entre null
& 0
!
Muitas vezes você nem se importa com o seu tipo. Outra forma de contornar a digitação é combinando conjuntos Duck-Type:
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) ...;
}
Ambos Number.prototype
e String.prototype
têm um método .toString()'. Você apenas certificou-se de que o equivalente de string do número era o mesmo, e então você certificou-se de passá-lo para a função
httpcomo um
Número`. Em outras palavras, nós nem mesmo cuidamos do seu tipo.
Esperança que lhe dá mais com que trabalhar :)