reglas de conversión forzada en js

prefacio

JavaScript Hay siete tipos integrados de datos, incluyendo los tipos básicos y tipos de objetos

 

tipos básicos

Los tipos básicos se dividen en los seis siguientes:

  • string (cadena)

  • booleano (valor booleano)

  • Número (Digital)

  • Símbolo (símbolo)

  • el nulo (valor vacío)

  • indefinido (indefinido)

  1. cadena, número, booleano, y nula indefinido cinco tipos denominados colectivamente como tipos primitivos (primitivo), que no pueden ser subdivididos por tipos básicos

  2. es el símbolo ES6 nuevo tipo de datos, representa un único valores de símbolos generados por la llamada de función del símbolo, debido a la formación del símbolo valor de tipo primitivo, la nueva función no se puede utilizar la llamada Símbolo

  3. null y undefined generalmente se considera que un valor especial, el valor de estos dos tipos de único, es su propia

 

Tipos de objetos

Tipo de objeto, también conocido como los tipos de referencia, matriz y función es un sub-tipo del objeto. Colección de los objetos lógicamente desordenada de propiedades, diferentes valores del contenedor se encuentra. El objeto es un valor de referencia almacenado en la dirección de, por lo que los diferentes tipos y valores de característica inmutable básicos, el valor del objeto es variable

 

 

reglas de conversión forzada en js

ToPrimitive (en el valor original)

proceso de conversión ToPrimitive no se produce en el tipo original, solamente para el tipo de referencia (objeto), que es un objeto de tipo de referencia (objeto) en una tipos no objeto, es decir, el tipo de original

operadores ToPrimitive aceptan un valor, y un parámetro opcional para el tipo deseado. operador ToPrimitive para convertir un valor de tipo de no-objeto, si el objeto tiene la capacidad de ser convertido en más de un tipo de primitiva, el tipo deseado se puede utilizar para sugerir alternativa que tipo

El resultado de convertir el tipo de original está determinada por el tipo deseado, escriba el tipo deseado de hecho, es que se pasa. Directo ver más claramente a continuación. Método ToPrimitive probablemente mucho como una forma de la siguiente manera

/ **
* @Obj necesita para convertir los objetos
* @Type datos en bruto se convierte en un tipo deseado, opcional
* /
ToPrimitive (obj, tipo)

 

Ilustrar los diferentes valores de tipo

    • Tipo de cadena es

      1. En primer lugar llamar al método toString de obj, si el valor original, y luego volver, de lo contrario el paso 2

      2. método Call valueOf de obj, si el valor original, y luego de regreso, de lo contrario el paso 3

      3. TypeError excepción es lanzada

    • de tipo para el número

      1. método Call valueOf de obj, si se devuelve el valor original, de lo contrario el paso 2 de

      2. toString llama obj, si el valor original, y luego volver, de lo contrario el paso 3

      3. TypeError excepción es lanzada

    • parámetro de tipo es nulo

      1. El objeto es una fecha, el tipo se establece en Cadena

      2. De lo contrario, el tipo se establece en Número

 

Fecha instrucciones específicas de tipos de datos

tipos de datos de fecha, esperamos que más de la cadena se convierte a su vez, en lugar de milisegundos (sello de tiempo), si el número, tomará un valor correspondiente a una milésima de segundo, la cadena con mayor claridad. Otros tipos de objetos de acuerdo con el tipo de operación al valor

 

resumen ToPrimitive 

 ToPrimitive convierte en tipo original que, dependiendo del tipo, escriba un parámetro opcional, si se especifica, la conversión de tipo especificado, si no se especifica, el valor predeterminado dos condiciones de acuerdo con la situación práctica, Fecha de la cadena, los objetos restantes como un número. Así que cuando se especifica el tipo de tipo, que depende de la forma siguiente conversión de los dos

 

 

Object.toString ()

toString () devuelve una cadena que representa el objeto

Cada objeto tiene un método toString (), cuando el valor objetivo se representa como una cadena de texto o cuando los objetos de referencia deseada, el método se invoca automáticamente

Aquí recordar, valueOf () y toString () llamarán a sí mismo en una situación particular

 

 

Object.valueOf () devuelve el valor de original del objeto especificado

método de llamada de JavaScript valueOf () se utiliza para convertir un objeto en un valor (numérico, secuencia, y Boolean) tipo primitivo. Pero rara vez necesita llamar a esta función manualmente, el método valueOf normalmente se invoca automáticamente JavaScript

valueOf diferentes objetos integrados para lograr

  • Cuerda => Devuelve un valor de cadena

  • Número => devuelve valores numéricos

  • Fecha => Devuelve un número, es decir, el valor de tiempo, el contenido de la cadena depende de la aplicación específica

  • Boolean => valor de retorno booleano de esta

  • Objeto => devolver este

control de código

const str = newString ( '123');
console.log (str.valueOf ()); // 123

const num = NewNumber (123);
console.log (num.valueOf ()); // 123

fecha const = NewDate ();
console.log (date.valueOf ()); // 1526990889729

const bool = newBoolean ( '123');
console.log (bool.valueOf ()); // true

const obj = newObject ({valueOf: () => {
    return1
}})
console.log (obj.valueOf ()); // 1

 

 

Número

Número regla de conversión del operador

  • nula convierte en 0

  • indefinido se convierte en NaN

  • verdaderos se convierte en 1, false convierte en 0

  • Convertir una cadena a seguir las reglas cuando las constantes numéricas, la conversión no pudieron volver NaN

Aquí el objeto primero se debe convertir al valor original, llamando conversión ToPrimitive, tipo especificados como un número, y continuará a volver conversión ToPrimitive (ver ToPrimitive)

 

 

Cuerda

operadores de cadenas de reglas de conversión

  • nula se convierte en 'nulo'

  • convertir indefinido indefinido

  • conversos verdadero 'verdadero', false convertidos a 'false'

  • convertidor de digital a seguir una regla general, el índice de utilización forma digital Maximin

Aquí el objeto primero se debe convertir al valor original, llamando conversión ToPrimitive, escriba la designación como una cadena, y continuar para volver conversión ToPrimitive (ver ToPrimitive)

String (null) // 'nulo'
String (indefinido) // 'indefinido'
String (true) // 'verdadero'
String (1) // '1'
String (-1) // '-1'
String (0) // '0'
String (-0) // '0'
String (Math.pow (1000,10)) // '1E + 30'
String (Infinity) // 'Infinity'
String (-Infinity) // '-Infinity'
String ({}) // '[Objeto objeto]'
String ([1, [2,3]]) // '1,2,3'
String ([ 'koala', 1]) // koala, 1
Boolean (indefinido) // false
Boolean (null) // false
Boolean (0) // false
Boolean (NaN) // false
Boolean ( '') // false
Boole ({}) // verdadera
Boolean ([]) // true
Boole (newBoolean (falso)) // verdadera

 

 

Boole

ToBoolean operadores regla de conversión

Además de los valores de resultado de conversión por debajo de 6 que es falso, la verdadera de todos los demás

  1. indefinido

  2. nulo

  3. -0

  4. 0 o 0

  5. NaN

  6. '' (La cadena vacía)

falsos valores son valores que no sean el verdadero valor. Esto incluye todos los objetos (incluyendo un objeto vacío) resultado de la conversión es cierto, incluso objeto booleano falso correspondiente a la nueva Boolean (falso) es cierto

Boolean (indefinido) // false
Boolean (null) // false
Boolean (0) // false
Boolean (NaN) // false
Boolean ( '') // false
Boole ({}) // verdadera
Boolean ([]) // true
Boole (newBoolean (falso)) // verdadera

 

 

reglas de conversión js aplican en diferentes escenarios

¿A qué hora se convierte automáticamente al tipo de cadena

Bajo la premisa de ningún objeto

La conversión automática de cadena se produce principalmente cuando se añade una cadena. Cuando un valor de cadena, el otro valor no es una cadena, la cadena en este último

'2' + 1 // '21'
'2' + verdadera // "2true"
'2' + falsa // "2false"
'2' + indefinido // "2undefined"
'2' + nula // "2null"

Cuando hay un objeto, y cuando el objeto +

// objetos toString
era Obj2 = {
    toString: function () {
        return'a'
    }
}
console.log ( '2' + obj2)
// salida 2a

// objeto general
era obj1 = {
   a: 1,
   b: 2
}
console.log ( '2' + obj1);
// salida 2 [Objeto objeto]

// Varios objetos especiales
'2' + {} // "2 [Objeto objeto]"
'2' + [] // "2"
'2' + function () {} // "2function () {}"
'2' + ['koala',1] // 2koala,1

De los anteriores '2' + obj2 se ilustra en detalle como sigue

  1. Quede para la cadena, no cambia el valor original después de la conversión ToPrimitive

  2. También de acuerdo con la ToPrimitive original de valor para la conversión de la conversión a la derecha, debido a que el tipo especificado es el número, las llamadas para la conversión ToPrimitive obj2.valueof (), no se obtiene el valor original, el tercer paso

  3. Llamada toString () de retorno 'a'

  4. existe cadena de símbolo en ambos lados, pero los usos operador + las reglas de cadena se convierte en un tipo de cadena de empalme

  5. La salida 2a

De los anteriores '2' + obj1 se ilustra en detalle como sigue

  1. No cambia después de la izquierda para la cadena, ToPrimitive en el valor original

  2. También de acuerdo con la ToPrimitive original de valor para la conversión de la conversión a la derecha, debido a que el tipo especificado es el número, las llamadas para la conversión ToPrimitive obj2.valueof (), para dar {a: 1, b: 2

  3. Llamada toString () de retorno [object Object]

  4. existe cadena de símbolo en ambos lados, pero los usos operador + las reglas de cadena se convierte en un tipo de cadena de empalme

  5. Salida 2 [Objeto objeto]

Varios código objeto regla de conversión especial es básicamente el mismo, no fijar ellos, se puede pensar en el proceso

Si el objeto no es un objeto, hay un proceso de convertir el valor original, que es la conversión ToPrimitive, pero no cambia la conversión de tipo original, se producirá la conversión específica de tipo de objeto

  

tipo de cadena de proceso de desarrollo de conversión de frecuencia punto equivocado

var obj = {
  anchura: '100'
};

obj.width + 20 // "10020"

Resultados esperados como resultado una salida real 120 10020

 

 

Cuando se convierte automáticamente a tipo Número

  • Hay operador de suma, pero sin tipo String, el tipo será convertido preferentemente a Número

    verdadera + 0 // 1
    verdadera + true // 2
    verdadera + false // 1
  • Además del operador de suma, otros operadores se convierten automáticamente en el cálculo numérico

    '5' - '2' // 3
    '5' * '2' // 10
    verdad - 1 // 0
    false - 1 // -1
    '1' - 1 // 0
    '5' * [] // 0
    falso / '5' // 0
    'Abc' - 1 // NaN
    nula + 1 // 1
    Indefinido + 1 // NaN
    
    // unario (punto de nota)
    + 'Abc' // NaN
    -'abc '// NaN
    + True // 1
    // 0 es falsa
    

    Cuando se convierte a valor nulo es 0, mientras que un valor de interruptor indefinido NaN

     

 

 

Analizando el signo de igualdad también se coloca en el interior de número de instrucciones especiales

Abstract es igual a los operadores + == comparación diferente prioridad de cadena es más larga, pero la prioridad Nuber. Ejemplos de x == y se enumeran a continuación

  • Si x, y son el número, no hay comparación directa de la interpretable

    1 == 2 // false
  • Si el objeto existe, ToPrimitive () tipo convirtió al número, la comparación luego más tarde

    era obj1 = {
        valueOf: function () {
            return'1'
        }
    }
    1 == obj1 // true
    // obj1 en el valor original, llamando obj1.valueOf ()
    // devuelve el valor original de '1'
    // '1'toNumber compara entonces para dar un 1 == 1
    [] ==! [] // verdadera
    // [] para dar un ToPrimitive objetivo '
    //! [] Como convierte boolean 0
    // '' == 0
    Convertir // 0 == 0 // verdadera
  • En boolean, según la ToNumber boolean convertido a 1 o 0, y luego comparación posterior

    // boolean primero convertido a número, obtenido de acuerdo con las reglas anteriores 1
    // 3 == 1 falsa
    // 0 == 0 verdadera
    3 == true // false
    '0' == false // verdadera
  • Si x es una cadena, y es un número, el número se compara a su vez x

    // '0' ToNumber () para dar 0
    // 0 == 0 verdadera
    '0' == 0 // verdadera
    

     

 

Cuando la conversión Boolean

  • comparación de Boole

  • si (obj), el tiempo, mientras que (obj) se determina, o similares sólo puede contener ternario operador booleano

Cada valor corresponde a la parte condicional son falsas, el operador de negación después de su uso, se convierte en un verdadero

if (! indefinido
  && !nulo
  && 0
  &&! NaN
  &&! ''
) {
  console.log ( 'verdadero');
} // cierto

// los siguientes dos casos se convertirán en un booleano
expresión ? verdadero Falso
!! expresión

 

 

Resumen relacionada NaN

concepto NaN

NaN es una propiedad global del objeto, NaN es una propiedad global del objeto, NaN es un tipo especial Número

Cuando NaN (se resolvieron cuestiones segunda apertura)

  • Infinity dividido por el infinito

  • Para realizar cualquiera raíz cuadrada negativa

  • Los operadores aritméticos utilizados en conjunción con un número o no, no se pueden transformar en un operandos digitales

  • Analizar la cadena en un digitales

algunos ejemplos

El infinito / infinito; // infinito dividido por el infinito
Math.sqrt (-1); // hacer la raíz cuadrada de cualquier negativa
'A' - 1; // operadores aritméticos utilizados en conjunción con el operando no es un número o no convierte a digital
'A' * 1;
'A' / 1;
parseInt ( 'a'); // analizar la cadena en un digitales
parseFloat ( 'a');

Número ( 'a'); //Yaya
'Abc' - 1 // NaN
Indefinido + 1 // NaN
// unario (punto de nota)
+ 'Abc' // NaN
-'abc '// NaN

 

 

malentendido

ToString cadena y la diferencia

 

  • toString () de datos se pueden convertir en una cadena, pero no pueden convertir nulo e indefinido

    consola. log ( . nula toString ()) 
    //报错TypeError: No se puede leer la propiedad 'toString' de null consola. log ( sin definir. toString ()) //报错TypeError: No se puede leer la propiedad 'toString' de la indefinida


  • Cuerda

    String () se puede convertir a una cadena nula e indefinido, pero no puede girar cadena hexadecimal

    consola. log ( String ( null)); 
    // nula
    consola. log ( String ( sin definir));
    // undefine
  • toString () se puede escribir números entre paréntesis, en nombre de hexadecimal

    • Binario: .toString (2)

    • Octal: .toString (8)

    • Decimal: .toString (10)

    • Hex: .toString (16)

 

Supongo que te gusta

Origin www.cnblogs.com/zhazhanitian/p/12599252.html
Recomendado
Clasificación