Мое резюме одного предложения: исходное значение не изменит исходное значение независимо от того, является ли оно назначение переменной или проход функции. Будь то назначение переменной или проход функции, если новая переменная переназначена, она не повлияет на исходное эталонное значение. Если новая переменная является прямой операцией, она повлияет на исходное эталонное значение.
Прежде всего, ясно, что значения и типы являются двумя разными понятиями. Например, NULL является уникальным значением нулевого типа, неопределенным является уникальное значение неопределенного типа, а TRUE и FALSE - единственные два значения логического типа и т. Д. На любом языке операция стоимости может быть обобщена в следующие 3 аспекта.
Значение копирования: то есть назначить значение новой переменной или назначить значение другой переменной, атрибут или элемент массива через переменную.
Проходящее значение: то есть передача значения в качестве параметра функции или методу.
Сравните значения: то есть сравните значение с другим значением, чтобы увидеть, равно ли оно.
Поскольку значения данных типа значения и справочных данных имеют разные формы, методы их естественного использования и полученные результаты также различны. Обратите внимание, что когда значение является данных типа значения, мы часто называем его исходным значением или базовым значением; Когда значение ссылается на данные, мы часто называем их ссылочным значением или составным значением.
1. Используйте исходные значения
Для исходного значения три уровня его работы объясняются следующим образом.
1) Скопировать значение
В операторе присвоения процесс работы будет создан копию фактического значения. Нет связи между значением копии и фактическим значением. Они расположены в разных областях стека или в отдельных областях кучи. Эта копия может хранить переменные, свойства объектов и элементы массива. Например:
var n = 123, a, b = [], c = {}; a = n; // Скопировать число 123 B [0] = n; // скопировать номер 123 cx = n; // Скопируйте число 123 (a == b [0]) && (a == cx) && (b [0] == cx) && alert («Копированные значения равны»); // обнаружение того, что их значения равныВ приведенном выше примере значение 123 копируется 3 копии в переменную A, массив B и объект C соответственно. Хотя их значения равны, они не зависят друг от друга.
2) Пройдите значение
При передаче значения функции или методу проходящее значение - это только копия, а не само значение. Например, если вы изменяете прошедшее значение в функции, результат может повлиять только на копию этого значения параметра и не повлияет на исходное значение.
var a = 123; // Функция исходного значения f (x) {x = x + x; } f (a); // Вызовите функцию, чтобы изменить оповещение о передаваемом значении (a); // проверяют, влияет ли значение переменной a. Возвратное значение составляет 123, что указывает на то, что нет изменений3) Сравнение значения
В приведенном выше примере мы также можем видеть, что при сравнении исходных значений проводится байто-байтовое сравнение, чтобы определить, равны ли они. Сравнивая сами значения, а не место, где значения находятся. Хотя результаты сравнения могут быть одинаковыми, это только означает, что информация, которую они содержат, та же.
2. Используйте эталонные значения
Для справочных значений три уровня их операций объясняются следующим образом.
1) Скопировать значение
В операторе назначения назначенное значение является ссылкой на исходное значение, а не исходное значение значения, ни само исходное значение. То есть после выполнения назначения переменная сохраняет ссылки на исходное значение (то есть адрес хранения исходного значения). При копировании между несколькими переменными, элементами массива или свойствами объекта все они будут такими же, как и ссылки, сохраненные исходной переменной.
Все ссылки имеют одинаковый эффект и функцию и могут быть выполнены. Если данные отредактированы через одну из ссылок, эта модификация будет отражена в исходном значении и других связанных ссылках. Например:
var a = [1,2,3]; // Присвоение ссылки на массив b = a; // значение копии B [0] = 4; // изменять значение первого элемента в переменной B Alert (a [0]); // Возврат 4, отображая, что значение первого элемента в переменной A также изменяется на 4
Однако, если новое значение переназначается в переменной B, новое значение не повлияет на содержание исходного значения. Например:
var a = [1,2,3]; // Присвоение ссылки на массив b = a; // значение копии b = 4; // перезаписать оповещение о назначении (a [0]); // содержание переменной А остается неизменным
Повторные назначения фактически переоценивают ссылку переменной на исходное значение, становясь копией другого значения или ссылкой на нее. Следовательно, это не повлияет на исходное значение, а демонстрационная диаграмма показана на рисунке 4-2.
2) Пройдите значение
Когда ссылка используется для передачи данных в функцию, передача в функцию также является ссылкой на исходное значение. Функция может использовать эту ссылку для изменения самого исходного значения, и любая модификация видна вне функции. Например:
var a = [1,2,3]; Функция f (x) {x [0] = 4; // изменять значение параметра в функции} f (a); // пройти оповещение о эталонном значении (a [0]); // return 4, исходное значение изменяетсяОбратите внимание, что то, что изменено внутри функции, является ссылкой на внешний объект или массив, а не значение объекта или самого массива. Вы можете использовать ссылку на изменение атрибутов объекта или элементов массива в функции, но если внутри функции используется новая ссылка для перезаписи исходной ссылки, то модификация внутри функции не повлияет на значение исходной ссылки и не может быть замечена вне функции.
var a = [1,2,3]; функция f (x) {x = 4; // изменять значение параметра в функции} f (a); // пройти оповещение о эталонном значении (a [0]); // возврат 1, исходное значение не изменится3) Сравнение значения
При сравнении двух эталонных значений эти два эталонных адреса сравниваются, чтобы увидеть, являются ли оригинальные значения, которые они ссылаются, одинаковыми копиями, а не являются ли их исходные значения равными байтами. При ссылке на два разных значения, хотя они имеют одинаковую композицию байта, значения двух ссылок не равны.
var a = новое число (1); // Справочное значение A var b = новое число (1); // ссылочное значение B var c = a; // назначить ссылку на A Alert (a == b); // вернуть ложное предупреждение (a == c); // вернуть истину
Итак, {} == {}, [] == [], все возвращают false. Потому что справочный адрес отличается.
Короче говоря, для любого языка использование значений и использования ссылок являются двумя основными методами манипулирования данными. Когда мы работаем с данными, какой метод следует использовать для его обработки в основном, зависит от типа данных. Тип значения и справочные данные, участвующие в операциях, разные. Данные типа значения работают на данных с помощью значений, в то время как справочные данные работают на данных с использованием ссылок. Различные методы расчета также дают разные результаты естественным образом. Давайте посмотрим на другой пример:
var s = "abc"; // строка, тип значения Данные VAR O = Новая строка (ы); // Строковой объект, функция строки в коробке F (v) {// Функция операции v.toString = function () {// Метод toString toString () return 123; }; } f (s); // пройти оповещение о значении; // возвращает строку «ABC», указывая на то, что операция не повлияла на исходные данные F (O); // пройти ссылочное оповещение (O); // Возврат значения 123, указывая на то, что операция повлияла на внутреннюю структуру исходных данныхТип значения участвует в операции с фактическим значением, поэтому он не имеет прямого соединения с исходными данными. Тип ссылки участвует в операции с помощью эталонного адреса, и результат вычисления повлияет на блок данных площади кучи, связанный с эталонным адресом. Однако есть одно исключение. Для строк JavaScript его методы работы относительно сложны. Пожалуйста, Google для деталей!
Приведенная выше статья JavaScript Data Operation_A Краткое обсуждение сущности работы исходных значений и эталонных значений - это все контент, которым я делюсь с вами. Я надеюсь, что вы можете дать вам ссылку, и я надеюсь, что вы сможете поддержать Wulin.com больше.