Как узнать значение переменной

Просмотр переменных с помощью окна контрольных значений и быстрой проверки

Во время отладки для просмотра переменных и выражений можно использовать окна контрольных значений и диалоговое окно Быстрая проверка. Окна доступны только во время сеанса отладки.

В окнах контрольных значений в процессе отладки могут отображаться несколько переменных. В диалоговом окне Быстрая проверка отображается одна переменная за раз. Его следует закрыть до того, как можно будет продолжить отладку. Дополнительные сведения об использовании окна «Быстрая проверка» см. в разделе Наблюдение за одной переменной или выражением с помощью быстрой проверки.

Если вы не знакомы с процессом отладки кода, перед выполнением задач в этой статье рекомендуется прочесть документ об отладке для начинающих и статью Методы и инструменты отладки.

Наблюдение за переменными с помощью окна контрольных значений

Можно открыть несколько окон контрольных значений и наблюдать за несколькими переменными в окне контрольных значений.

Начните отладку, выбрав зеленую стрелку Старт или выбрав Отладка > Начать отладку или нажав клавишу F5. Выполнение останавливается в точке останова.

Откройте окно Контрольные значения, выбрав Отладка > Окна > Контрольные значения > Контрольные значения 1 или нажав клавиши CTRL+ALT+W > 1.

Вы можете открыть дополнительные окна контрольных значений, выбрав окна 2, 3 или 4.

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Продолжите отладку, выбрав Отладка > Шаг с заходом или нажав клавишу F11 по мере необходимости для перехода. В процессе итерации по циклу for значения переменных в окне Контрольные значения должны меняться.

Может потребоваться уточнить контекст имени переменной или выражение, использующее имя переменной. Контекст — это функция, файл исходного кода или модуль, где находится переменная. Если необходимо уточнить контекст, используйте синтаксис оператора контекста (C++) в поле Имя в окне Контрольные значения.

Вы можете добавить имена регистров и имена переменных с помощью $ или @ в поле Имя в окне Контрольные значения. Для получения дополнительной информации см. Pseudovariables.

Использование выражений в окне контрольных значений

В окне Контрольные значения можно просмотреть любое допустимое выражение, которое распознает отладчик.

Например, для кода, приведенного в предыдущем разделе, можно вычислить среднее трех значений, введя (a + b + c) / 3 в окне контрольных значений:

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Правила вычисления выражений в окне Контрольные значения обычно аналогичны правилам вычисления выражений в используемом языке программирования. Если в выражении есть синтаксическая ошибка, должна произойти та же ошибка компилятора, которая возникла бы в редакторе кода. Например, опечатка в предыдущем выражении выдает следующую ошибку в окне Контрольные значения:

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

В окне Контрольные значения может появиться значок кружки с двумя волнистыми линиями. Он указывает на то, что отладчик не вычисляет выражение из-за возможной зависимости между потоками. Для оценки кода необходимо, чтобы другие потоки в приложении выполнялись временно, но, поскольку вы находитесь в режиме приостановки выполнения, все потоки в приложении обычно останавливаются. Разрешение временного запуска других потоков может привести к непредвиденным результатам в работе приложения, а также к тому, что отладчик будет игнорировать различные события, например точки останова и исключения, созданные в этих потоках.

Поиск в окне контрольных значений

Используя панель поиска над каждым окном, можно искать ключевые слова в столбцах «Имя», «Значение» и «Тип» в окне Контрольные значения. Нажмите клавишу ВВОД или щелкните одну из стрелок, чтобы выполнить поиск. Чтобы отменить текущий поиск, нажмите значок «x» на панели поиска.

Для перехода между найденными совпадениями используйте стрелки влево и вправо (SHIFT + F3 и F3 соответственно).

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Чтобы сделать поиск более или менее детальным, воспользуйтесь раскрывающимся списком Поиск на уровень глубже в верхней части окна Контрольные значения, чтобы выбрать число уровней детализации поиска во вложенных объектах.

Закрепление свойств в окне контрольных значений

С помощью средства Закрепляемые свойства можно быстро проверить объекты на основе их свойств в окне контрольных значений. Чтобы воспользоваться этим средством, наведите указатель мыши на свойство и выберите значок булавки либо щелкните правой кнопкой мыши и в контекстном меню выберите пункт Закрепить элемент в избранном. Свойство будет размещено в верхней части списка свойств объекта, а имя и значение свойства будут отображаться в столбце Значение. Чтобы открепить свойство, щелкните значок булавки еще раз или в контекстном меню выберите пункт Открепить элемент в избранном.

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

При просмотре списка свойств объекта в окне контрольных значений можно также включать и отключать отображение имен свойств и отфильтровывать незакрепленные свойства. Доступ к каждому параметру можно получить, нажимая кнопки на панели инструментов над окном контрольных значений.

Обновление контрольных значений

При вычислении выражения в окне Контрольные значения может отображаться значок обновления (круговая стрелка). Значок обновления указывает на ошибочные или устаревшие значения.

Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. Отладчик попытается пересчитать выражение. Однако вы, возможно, не захотите или не сможете повторно вычислить выражение, в зависимости от того, почему значение не было вычислено.

Наведите указатель мыши на значок обновления или обратитесь к столбцу Значение, чтобы узнать причину, по которой выражение не было вычислено. Причины.

При вычислении выражения возникла ошибка, как в предыдущем примере. Возможно, истекло время ожидания или переменная находится вне области действия.

Выражение содержит вызов функции, который мог вызвать побочный эффект в приложении. См. раздел Побочные эффекты.

Автоматическое вычисление свойств и неявные вызовы функций должны быть отключены.

Если значок обновления отображается ввиду того, что автоматическое вычисление свойств и неявные вызовы функций отключены, его можно включить, установив флажок Включить вычисление свойств и другие неявные вызовы функций в разделе Сервис > Параметры > Отладка > Общие.

Демонстрация использования значка обновления

В разделе Сервис > Параметры > Отладка > Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций.

Приступите к отладке. В окне Контрольные значения отображается примерно следующее сообщение:

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Чтобы обновить значение, щелкните значок обновления или нажмите клавишу ПРОБЕЛ. Отладчик повторно вычислит выражение.

Побочные эффекты выражения

Вычисление некоторых выражений может привести к изменению значения некоторой переменной или иным образом повлиять на состояние приложения. Например, вычисление следующего выражения изменяет значение var1 :

Этот код может вызвать побочный эффект. Побочные эффекты могут усложнить отладку из-за изменения способа работы приложения.

Выражение, у которого есть побочные эффекты, вычисляется только один раз при первом его вводе. После этого выражение отображается в окне Контрольные значения серым цветом, а дальнейшие вычисления отключаются. В столбце подсказки или Значение объясняется, что выражение вызывает побочный эффект. Можно принудительно выполнить повторное вычисление, щелкнув значок обновления рядом с этим значением.

Один из способов предотвратить побочные эффекты — отключить автоматическое вычисление функций. В разделе Сервис > Параметры > Отладка > Общие снимите флажок Включить вычисление свойств и другие неявные вызовы функций.

Только для C#: если вычисление свойств и неявных вызовов функций отключено, можно принудительно вычислить выражение, добавив модификатор формата ac к переменной Имя в окне Контрольные значения. См. раздел Определители формата C#.

Использование идентификаторов объектов в окне «Контрольные значения» (C# и Visual Basic)

Иногда возникает необходимость наблюдать за поведением определенного объекта. Например, может потребоваться отслеживать объект, на который ссылается локальная переменная, после того как эта переменная вышла из области действия. В C# и Visual Basic можно создавать идентификаторы объектов для определенных экземпляров ссылочных типов и использовать их в окне Контрольные значения и условиях точек останова. Идентификатор объекта создается службами отладки среды CLR и связан с объектом.

Идентификаторы объектов создают слабые ссылки, которые не предотвращают сборку мусора для объекта. Они действительны только в рамках текущего сеанса отладки.

В следующем коде метод MakePerson() создает Person с помощью локальной переменной:

Приступите к отладке.

Когда выполнение приостанавливается на точке останова, откройте окно Локальные, выбрав Отладка > Окна > Локальные.

В окне Локальные щелкните переменную Person правой кнопкой мыши и выберите пункт Создать идентификатор объекта.

В окне Локальные вы должны увидеть знак доллара ( $ ) плюс число, которое является идентификатором объекта.

Добавьте идентификатор объекта в окно Контрольные значения, щелкнув правой кнопкой мыши идентификатор объекта и выбрав пункт Добавить контрольное значение.

Динамическое представление и окно «Контрольные значения»

В окне Контрольные значения эти объекты отображаются как динамические объекты, которые создаются из типов, реализующих интерфейс IDynamicMetaObjectProvider. В узле динамического объекта показаны динамические члены динамического объекта, но не разрешено изменять их значения.

Чтобы обновить значения в динамическом представлении, щелкните значок обновления рядом с узлом динамического объекта.

Чтобы отобразить только динамическое представление для объекта, добавьте описатель динамического формата после имени динамического объекта в окне Контрольные значения.

Вставка новой переменной контрольного значения, которая приводит объект к динамическому объекту

Отладчик также добавляет дочерний узел динамического представления объекта в окно Видимые. Чтобы открыть окно Видимые, во время отладки последовательно выберите пункты Отладка > Окна > Видимые.

Динамическое представление также улучшает процесс отладки для COM-объектов. Когда отладчик встречает COM-объект, инкапсулированный в System.__ComObject, он добавляет узел Динамическое представление для объекта.

Наблюдение за одной переменной или выражением с помощью быстрой проверки

Окно Быстрая проверка можно использовать для наблюдения за одной переменной.

Например, для следующего кода:

Приступите к отладке. Выполнение останавливается в точке останова.

Выберите переменную a в коде.

Выберите Отладка > Быстрая проверка, нажмите клавиши SHIFT+F9 или щелкните правой кнопкой мыши и выберите в контекстном меню команду Быстрая проверка.

Появится диалоговое окно Быстрая проверка. Переменная a находится в поле Выражение со значением 1.

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Чтобы добавить переменную или выражение из окна Быстрая проверка в окно Контрольные значения, выберите Добавить контрольное значение.

Нажмите Закрыть, чтобы закрыть окно Быстрая проверка. (Быстрая проверка — это модальное диалоговое окно, поэтому вы не можете продолжать отладку, пока оно открыто.)

Продолжайте отладку. Переменную можно наблюдать в окне Контрольные значения.

Источник

Руководство по JavaScript, часть 3: переменные, типы данных, выражения, объекты

Сегодня, в третьей части перевода руководства по JavaScript, мы поговорим о разных способах объявления переменных, о типах данных, о выражениях и об особенностях работы с объектами.

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Переменные

Переменная представляет собой идентификатор, которому присвоено некое значение. К переменной можно обращаться в программе, работая таким образом с присвоенным ей значением.

Сама по себе переменная в JavaScript не содержит информацию о типе значений, которые будут в ней храниться. Это означает, что записав в переменную, например, строку, позже в неё можно записать число. Такая операция ошибки в программе не вызовет. Именно поэтому JavaScript иногда называют «нетипизированным» языком.

▍Ключевое слово var

До появления стандарта ES2015 использование ключевого слова var было единственным способом объявления переменных.

Так, если включён так называемый строгий режим (strict mode), подобное вызовет ошибку. Если строгий режим не включён, произойдёт неявное объявление переменной и она будет назначена глобальному объекту. В частности, это означает, что переменная, неявно объявленная таким образом в некоей функции, окажется доступной и после того, как функция завершит работу. Обычно же ожидается, что переменные, объявляемые в функциях, не «выходят» за их пределы. Выглядит это так:

В одном выражении можно объявить несколько переменных:

Областью видимости переменной (scope) называют участок программы, в котором доступна (видима) эта переменная.

Переменная, инициализированная с помощью ключевого слова var за пределами какой-либо функции, назначается глобальному объекту. Она имеет глобальную область видимости и доступна из любого места программы. Если переменная объявлена с использованием ключевого слова var внутри функции, то она видна только внутри этой функции, являясь для неё локальной переменной.

Важно понимать, что блоки (области кода, заключённые в фигурные скобки) не создают новых областей видимости. Новая область видимости создаётся при вызове функции. Ключевое слово var имеет так называемую функциональную область видимости, а не блочную.

Если в коде функции объявлена некая переменная, она видна всему коду функции. Даже если переменная объявлена с помощью var в конце кода функции, обратиться к ней можно и в начале кода, так как в JavaScript работает механизм поднятия переменных (hoisting). Этот механизм «поднимает» объявления переменных, но не операции их инициализации. Это может стать источником путаницы, поэтому возьмите себе за правило объявлять переменные в начале функции.

▍Ключевое слово let

Если само слово «let» кажется не очень понятным, можно представить, что вместо него используется слово «пусть». Тогда выражение let color = ‘red’ можно перевести на английский так: «let the color be red», а на русский — так: «пусть цвет будет красным».

Например, такой код вызовет ошибку:

▍Ключевое слово const

В данном примере константе a нельзя присвоить новое значение. Но надо отметить, что если a — это не примитивное значение, наподобие числа, а объект, использование ключевого слова const не защищает этот объект от изменений.

Когда говорят, что в переменную записан объект, на самом деле имеют в виду то, что в переменной хранится ссылка на объект. Эту вот ссылку изменить не удастся, а сам объект, к которому ведёт ссылка, можно будет изменить.

Ключевое слово const не делает объекты иммутабельными. Оно просто защищает от изменений ссылки на них, записанные в соответствующие константы. Вот как это выглядит:

Типы данных

JavaScript иногда называют «нетипизированным» языком, но это не соответствует реальному положению дел. В переменные, и правда, можно записывать значения разных типов, но типы данных в JavaScript, всё-таки, есть. В частности, речь идёт о примитивных и об объектных типах данных.

▍Примитивные типы данных

Вот список примитивных типов данных JavaScript:

Поговорим о наиболее часто используемых типах данных из этого списка.

Тип number

Значения типа number в JavaScript представлены в виде 64-битных чисел двойной точности с плавающей запятой.

В коде числовые литералы представлены в виде целых и дробных чисел в десятичной системе счисления. Для записи чисел можно использовать и другие способы. Например, если в начале числового литерала имеется префикс 0x — он воспринимается как число, записанное в шестнадцатеричной системе счисления. Числа можно записывать и в экспоненциальном представлении (в таких числах можно найти букву e ).

Вот примеры записи целых чисел:

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Подсказка по объектной обёртке Number

Обратите внимание на двойные скобки после имени метода. Если их не поставить, система не выдаст ошибку, но, вместо ожидаемого вывода, в консоли окажется нечто, совсем не похожее на строковое представление числа 5.

Глобальный объект Number можно использовать в виде конструктора, создавая с его помощью новые числа (правда, в таком виде его практически никогда не используют), им можно пользоваться и как самостоятельной сущностью, не создавая его экземпляры (то есть — некие числа, представляемые с его помощью). Например, его свойство Number.MAX_VALUE содержит максимальное числовое значение, представимое в JavaScript.

Тип string

Значения типа string представляют собой последовательности символов. Такие значения задают в виде строковых литералов, заключённых в одинарные или двойные кавычки.

Строковые значения можно разбивать на несколько частей, используя символ обратной косой черты (backslash).

Строка может содержать так называемые escape-последовательности, интерпретируемые при выводе строки в консоль. Например, последовательность \n означает символ перевода строки. Символ обратной косой черты можно использовать и для того, чтобы добавлять кавычки в строки, заключённые в такие же кавычки. Экранирование символа кавычки с помощью \ приводит к тому, что система не воспринимает его как специальный символ.

Шаблонные литералы

В ES2015 появились так называемые шаблонные литералы, или шаблонные строки. Они представляют собой строки, заключённые в обратные кавычки ( ` ) и обладают некоторыми интересными свойствами.

Например, в шаблонные литералы можно подставлять некие значения, являющиеся результатом вычисления JavaScript-выражений.

Использование обратных кавычек упрощает многострочную запись строковых литералов:

Тип boolean

В частности, ложными значениями являются следующие:

Остальные значения являются истинными.

Тип null

Тип undefined

▍Объекты

Выражения

Выражения — это фрагменты кода, которые можно обработать и получить на основе проведённых вычислений некое значение. В JavaScript существует несколько категорий выражений.

Арифметические выражения

В эту категорию попадают выражения, результатом вычисления которых являются числа.

Строковые выражения

Результатом вычисления таких выражений являются строки.

Первичные выражения

В эту категорию попадают литералы, константы, ссылки на идентификаторы.

Сюда же можно отнести и некоторые ключевые слова и конструкции JavaScript.

Выражения инициализации массивов и объектов

Логические выражения

В логических выражениях используются логические операторы, результатом их вычисления оказываются логические значения.

Выражения доступа к свойствам

Эти выражения позволяют обращаться к свойствам и методам объектов.

Выражения создания объектов

Выражения объявления функций

Выражения вызова

Такие выражения используются для вызова функций или методов объектов.

Работа с объектами

▍Прототипное наследование

JavaScript выделяется среди современных языков программирования тем, что поддерживает прототипное наследование. Большинство же объектно-ориентированных языков используют модель наследования, основанную на классах.

У каждого JavaScript-объекта есть особое свойство ( __proto__ ), которое указывает на другой объект, являющийся его прототипом. Объект наследует свойства и методы прототипа.

Предположим, у нас имеется объект, созданный с помощью объектного литерала.

Проверить это можно следующим образом.

Все свойства и методы прототипа доступны объекту, имеющему этот прототип. Вот, например, как выглядит их список для массива.

Как узнать значение переменной. Смотреть фото Как узнать значение переменной. Смотреть картинку Как узнать значение переменной. Картинка про Как узнать значение переменной. Фото Как узнать значение переменной

Подсказка по массиву

У Object.prototype прототипа нет.

То, что мы видели выше, является примером цепочки прототипов.

При попытке обращения к свойству или методу объекта, если такого свойства или метода у самого объекта нет, их поиск выполняется в его прототипе, потом — в прототипе прототипа, и так — до тех пор, пока искомое будет найдено, или до тех пор, пока цепочка прототипов не кончится.

Функции-конструкторы

Выше мы создавали новые объекты, пользуясь уже имеющимися в языке функциями-конструкторами (при их вызове используется ключевое слово new ). Такие функции можно создавать и самостоятельно. Рассмотрим пример.

Здесь мы создаём функцию-конструктор. При её вызове создаётся новый объект, на который указывает ключевое слово this в теле конструктора. Мы добавляем в этот объект свойство name и записываем в него то, что передано конструктору. Этот объект возвращается из конструктора автоматически. С помощью функции-конструктора можно создать множество объектов, свойства name которых будут содержать то, что передано при их создании конструктору.

▍Классы

В стандарте ES6 в JavaScript пришло такое понятие как «класс».

До этого в JavaScript можно было пользоваться лишь вышеописанным механизмом прототипного наследования. Этот механизм непривычно выглядел для программистов, пришедших в JS из других языков. Поэтому в языке и появились классы, которые, по сути, являются «синтаксическим сахаром» для прототипного механизма наследования. То есть, и объекты, созданные традиционным способом, и объекты, созданные с использованием классов, имеют прототипы.

Объявление класса

Вот как выглядит объявление класса.

Наследование, основанное на классах

Классы могут расширять другие классы. Объекты, созданные на основе таких классов, будут наследовать и методы исходного класса, и методы, заданные в расширенном классе.

Если класс, расширяющий другой класс (наследник этого класса) имеет метод, имя которого совпадает с тем, который есть у класса-родителя, этот метод имеет преимущество перед исходным.

В классах не предусмотрено наличие переменных (свойств), свойства создаваемых с помощью классов объектов нужно настраивать в конструкторе.

Статические методы

Методы, описываемые в классе, можно вызывать, обращаясь к объектам, созданным на основе этого класса, но не к самому классу. Статические ( static ) методы можно вызывать, обращаясь непосредственно к классу.

Приватные методы

В JavaScript нет встроенного механизма, который позволяет объявлять приватные (частные, закрытые) методы. Это ограничение можно обойти, например, с использованием замыканий.

Геттеры и сеттеры

Итоги

В этом материале мы поговорили о переменных, о типах данных, о выражениях и о работе с объектами в JavaScript. Темой нашего следующего материала будут функции.

Уважаемые читатели! Если вы уже давно пишете на JS, просим рассказать о том, как вы относитесь к появлению в языке ключевого слова class.

Источник

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *