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)
cadena, número, booleano, y nula indefinido cinco tipos denominados colectivamente como tipos primitivos (primitivo), que no pueden ser subdivididos por tipos básicos
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
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
-
En primer lugar llamar al método toString de obj, si el valor original, y luego volver, de lo contrario el paso 2
-
método Call valueOf de obj, si el valor original, y luego de regreso, de lo contrario el paso 3
-
TypeError excepción es lanzada
-
-
de tipo para el número
-
método Call valueOf de obj, si se devuelve el valor original, de lo contrario el paso 2 de
-
toString llama obj, si el valor original, y luego volver, de lo contrario el paso 3
-
TypeError excepción es lanzada
-
-
parámetro de tipo es nulo
-
El objeto es una fecha, el tipo se establece en Cadena
-
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 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
-
indefinido
-
nulo
-
-0
-
0 o 0
-
NaN
-
'' (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"
// 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
-
Quede para la cadena, no cambia el valor original después de la conversión ToPrimitive
-
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
-
Llamada toString () de retorno 'a'
-
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
-
La salida 2a
De los anteriores '2' + obj1 se ilustra en detalle como sigue
-
No cambia después de la izquierda para la cadena, ToPrimitive en el valor original
-
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
-
Llamada toString () de retorno [object Object]
-
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
-
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
var obj = { anchura: '100' }; obj.width + 20 // "10020"
Resultados esperados como resultado una salida real 120 10020
-
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
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
-
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
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
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)
-