2011-02-17 32 views

Respuesta

13

simple:

if(_myValue is Number) 
{ 
    fire(); 

}// end if 

[ACTUALIZACIÓN]

Tenga en cuenta que si _myValue es de tipo int o uint, entonces (_myValue is Number) también se equiparan a true. Si desea saber si _myValue es un número que no es un entero (int) o un entero sin signo (uint), en otras palabras, un flotador, a continuación, sólo tiene que modificar el condicional de la siguiente manera:

(_myValue is Number && !(_myValue is int) && !(_myValue is uint)) 

Let de ver un ejemplo:

package 
{ 
    import flash.display.Sprite; 
    import flash.events.Event; 

    public class Main extends Sprite 
    { 

     public function Main():void 
     { 
      if (stage) init(); 
      else addEventListener(Event.ADDED_TO_STAGE, init); 
     } 

     private function init(e:Event = null):void 
     { 
      removeEventListener(Event.ADDED_TO_STAGE, init); 

      var number1:Object = 1; // int 
      var number2:Object = 1.1; // float 
      var number3:Object = 0x000000; // uint 

      trace(number1 is Number); // true 
      trace(number2 is Number); // true 
      trace(number3 is Number); // true 

      trace(number1 is Number && !(number1 is int) && !(number1 is uint)); // false 
      trace(number2 is Number && !(number2 is int) && !(number2 is uint)); // true 
      trace(number3 is Number && !(number3 is int) && !(number3 is uint)); // false 

     } 

    } 

} 
+0

"_myValue is Number" seguirá siendo verdadero y typeof (_myValue) seguirá siendo "number" incluso si _myValue se escribe como int o uint. De acuerdo con http: // stackoverflow.com/a/9447869/88409 Flash almacena valores enteros como ints, y como Number solo si hay una parte fraccionaria en el valor o excede 0x0FFFFFFF (valor más alto que puede almacenarse en los 28 bits restantes del átomo de 32 bits) que reserva 3 bits para una descripción de tipo y 1 bit para el signo). Consulte también http://stackoverflow.com/a/2697151/88409 y un caso de prueba aquí: http://troyworks.com/blog/2007/12/02/as3-understanding-uint-int-number/ – Triynko

+0

Interlocutor quiere para saber si _myValue es un número, no un Número. – Robert

+0

@Robert lo siento, puedo ser un poco tonto algunas veces, no estoy muy seguro de a qué te refieres. – Taurayi

3

Hay

  • isNaN (Usted tendrá que negar esto)
  • typeof (No está seguro de qué tan fuertemente tipo de número de obras)
  • y is (que ya se ha mencionado, de nuevo, no estoy seguro de qué tan fuerte, sostienen los tipos)
4

Estos métodos podrían ser problemático si se desea comprobar la entrada de un campo de texto, que es 'siempre' una cadena. Si tiene una cadena con "123" y marca con "123" es Número, obtendrá un falso. Entonces Number ("123") daría true, pero también lo hará Number ("lalala") (aunque el resultado es NaN que le dirá que NaN es Número (verdadero).

Para trabajar con una cadena, podría hacer:

var s:String = "1234"; 
String(Number(s)) == String(s); 
--True 

var s:String = "lalala"; 
String(Number(s)) == String(s); 
--False 
5

Si sólo desea saber si myValue es uno de los tipos numéricos (Number, int, uint), se puede comprobar si (_myValue is Number) como Taurayi sugirió

Si también. desea saber si _myValue es una cadena numérica (como "6320" o "5,987"), utilice la siguiente:

if (!isNaN(Number(_myValue))) 
{ 
    fire(); 
} 

Se utiliza para emitir Number(_myValue)_myValue a la clase Number. Si Number no puede convertirlo en un número útil, devolverá NaN, por lo que usaremos !isNaN() para asegurarnos de que el valor devuelto no sea "no un número".

devolverá cierto para cualquier variable de tipo Number (siempre que su valor no es NaN), int, uint y cadenas que contienen una representación válida de un número.

+1

IMO, esta es la mejor respuesta. Es exactamente lo que habría publicado. Aunque no explica completamente la relación entre Number, int y uint (es decir, cualquier int es un número, pero los números no son necesariamente ints o uints), esta implementación es mejor que las verificaciones condicionales, en parte porque también lleva cadenas numéricas en cuenta. – Triynko

+0

@Triynko Edité mi respuesta para explicar mejor los tipos numéricos. – Robert

Cuestiones relacionadas