Mi resumen de una oración: el valor original no cambiará el valor original independientemente de si se trata de una asignación variable o una función de función. Ya sea que se trate de una asignación variable o una función de función, si la nueva variable se reasigna, no afectará el valor de referencia original. Si la nueva variable es una operación directa, afectará el valor de referencia original.
En primer lugar, está claro que los valores y tipos son dos conceptos diferentes. Por ejemplo, NULL es el valor único del tipo nulo, undefinado es el valor único del tipo indefinido, y verdadero y falso son los únicos dos valores de tipo booleano, etc. En cualquier idioma, la operación de valor se puede resumir en los siguientes 3 aspectos.
Valor de copia: es decir, asigne el valor a una nueva variable o asigne el valor a otra variable, atributo o elemento de matriz a través de la variable.
Valor de paso: es decir, pasar el valor como parámetro a una función o método.
Compare valores: es decir, compare el valor con otro valor para ver si es igual.
Dado que los valores de los datos de tipo de valor y los datos de referencia tienen diferentes formas, los métodos para operarlos naturalmente y los resultados producidos también son diferentes. Tenga en cuenta que cuando el valor es datos de tipo valor, a menudo lo llamamos el valor original o el valor básico; Cuando se hace referencia al valor, a menudo lo llamamos el valor referenciado o el valor compuesto.
1. Use valores originales
Para el valor original, los tres niveles de su operación se explican de la siguiente manera.
1) Copie el valor
En la declaración de asignación, el proceso de operación producirá una copia del valor real. No hay conexión entre el valor de la copia y el valor real. Están ubicados solo en diferentes áreas de pila o áreas de montón. Esta copia puede almacenar variables, propiedades de objetos y elementos de matriz. Por ejemplo:
var n = 123, a, b = [], c = {}; a = n; // Copiar el número 123 b [0] = n; // Copiar el número 123 cx = n; // Copiar el número 123 (a == b [0]) && (a == cx) && (b [0] == cx) && alert ("Los valores copiados son iguales"); // detectar que sus valores son igualesEn el ejemplo anterior, el valor 123 se copia 3 copias a la variable A, la matriz B y el objeto C respectivamente. Aunque sus valores son iguales, son independientes entre sí.
2) Pase el valor
Al pasar un valor a una función o método, el valor aprobado es solo una copia, no el valor en sí. Por ejemplo, si modifica el valor aprobado en una función, el resultado solo puede afectar la copia de este valor de parámetro y no afectará el valor original.
var a = 123; // La función de valor original f (x) {x = x + x; } f (a); // llame a la función para modificar la alerta de valor aprobada (a); // Verifique si el valor de la variable A se ve afectado. El valor de retorno es 123, lo que indica que no hay cambios3) Valor de comparación
En el ejemplo anterior, también podemos ver que al comparar los valores originales, se realiza una comparación de bytes bytes para determinar si son iguales. Comparando los valores en sí mismos, no la ubicación donde están los valores. Aunque los resultados de la comparación pueden ser iguales, solo significa que la información de bytes que contienen es la misma.
2. Use valores de referencia
Para los valores de referencia, los tres niveles de sus operaciones se explican de la siguiente manera.
1) Copie el valor
En la declaración de asignación, el valor asignado es una referencia al valor original, no al valor original, ni al valor original en sí. Es decir, después de realizar la asignación, la variable guarda referencias al valor original (es decir, la dirección de almacenamiento del valor original). Cuando se copian entre múltiples variables, elementos de matriz o propiedades del objeto, todas serán las mismas que las referencias guardadas por la variable original.
Todas las referencias tienen el mismo efecto y función y se pueden realizar. Si los datos se editan a través de una de las referencias, esta modificación se reflejará en el valor original y otras referencias relacionadas. Por ejemplo:
var a = [1,2,3]; // Asignar referencia de matriz b = a; // Valor de copia B [0] = 4; // modificar el valor del primer elemento en la alerta de la variable B (A [0]); // Devuelve 4, mostrando que el valor del primer elemento en la variable A también se modifica a 4
Sin embargo, si se reasigna un nuevo valor a la variable B, el nuevo valor no afectará el contenido del valor original. Por ejemplo:
var a = [1,2,3]; // Asignar referencia de matriz b = a; // Valor de copia B = 4; // sobrescribe la alerta de asignación (a [0]); // El contenido de la variable A permanece sin cambios
Las tareas repetidas en realidad están anulando la referencia de una variable al valor original, convirtiéndose en una copia de otro valor o referencia a él. Por lo tanto, no afectará el valor original, y el diagrama de demostración se muestra en la Figura 4-2.
2) Pase el valor
Cuando se utiliza una referencia para pasar datos a una función, la función pasada a la función también es una referencia al valor original. La función puede usar esta referencia para modificar el valor original en sí, y cualquier modificación es visible fuera de la función. Por ejemplo:
var a = [1,2,3]; función f (x) {x [0] = 4; // modificar el valor del parámetro en la función} f (a); // pasar la alerta de valor de referencia (a [0]); // Devuelve 4, el valor original cambiaTenga en cuenta que lo que se modifica dentro de la función es una referencia a un objeto o matriz externo, no el valor del objeto o la matriz en sí. Puede usar una referencia para modificar los atributos de un objeto o los elementos de una matriz dentro de la función, pero si se usa una nueva referencia dentro de la función para sobrescribir la referencia original, entonces la modificación dentro de la función no afectará el valor de la referencia original y no se puede ver fuera de la función.
var a = [1,2,3]; función f (x) {x = 4; // modificar el valor del parámetro en la función} f (a); // pasar la alerta de valor de referencia (a [0]); // Devuelve 1, el valor original no cambiará3) Valor de comparación
Al comparar dos valores de referencia, las dos direcciones de referencia se comparan para ver si los valores originales a los que hacen referencia son la misma copia, en lugar de si sus valores originales son iguales bytes. Al hacer referencia a dos valores diferentes, aunque tienen la misma composición de bytes, los valores de las dos referencias no son iguales.
var a = nuevo número (1); // valor de referencia a var b = nuevo número (1); // valor de referencia B var c = a; // Asignar una referencia a c Alert (a == b); // devuelve alerta falsa (a == c); // devolver verdadero
Entonces, {} == {}, [] == [], todos return False. Porque la dirección de referencia es diferente.
En resumen, para cualquier idioma, el uso de valores y el uso de referencias hay dos métodos básicos de manipulación de datos. Cuando operamos datos, qué método debe usarse para procesarlo principalmente depende del tipo de datos. El tipo de valor y los datos de referencia que participan en las operaciones son diferentes. Los datos de tipo de valor funcionan en datos utilizando valores, mientras que los datos de referencia funcionan en datos utilizando referencias. Los diferentes métodos de cálculo también producen diferentes resultados naturalmente. Echemos un vistazo a otro ejemplo:
var s = "ABC"; // cadena, tipo de valor datos var o = nuevas cadenas (s); // String Object, función de cadena en caja f (v) {// función de operación v.ToString = function () {// método toString toString () return 123; }; } f (s); // pasar las alertas de valor; // devuelve la cadena "ABC", lo que indica que la operación no ha afectado los datos originales f (O); // pasar la alerta de referencia (o); // devuelve el valor 123, lo que indica que la operación ha afectado la estructura interna de los datos originalesEl tipo de valor participa en la operación con el valor real, por lo que no tiene una conexión directa con los datos originales. El tipo de referencia participa en la operación con la dirección de referencia, y el resultado del cálculo afectará el bloque de datos del área de Heap asociado con la dirección de referencia. Sin embargo, hay una excepción. Para las cadenas de JavaScript, sus métodos de operación son relativamente complicados. ¡Google para obtener más detalles!
El artículo anterior JavaScript Data Operation_A Breve discusión sobre la esencia de la operación de valores y valores de referencia originales es todo el contenido que comparto con usted. Espero que pueda darle una referencia y espero que pueda apoyar más a Wulin.com.