Javascript объект: Объекты: основы

Содержание

Свойства объектов JavaScript

Свойства — самая важная часть любого объекта JavaScript.

Свойства — это значения, ассоциированные с объектом JavaScript. По сути объект JavaScript это набор неупорядоченных свойств.

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

Доступ к свойствам объекта JavaScript

Получить доступ к свойству объекта можно следующим образом:

имяОбъекта.свойство // person.age

или

имяОбъектасвойство«] // person[«age»]

или

имяОбъекта[выражение] // x = «age»; person[x]

Внимание! Если для доступа к свойству используется выражение, то его результат должен давать имя свойства.

Пример №1

 person.firstname + " было " + person.age + " лет."; 

Пример №2

 person["firstname"] + " было " + person["age"] + " лет. "; 

Цикл for…in

Выражение for…in в цикле проходит по свойствам объекта.

Синтаксис:

for (переменнаяinобъект) {
   выполняемый код
}

Блок кода внутри цикла

for…in выполняется один раз для каждого свойства объекта.

Пример прохода по всем свойствам объекта:

var person = {fname:"Иван", lname:"Петров", age:25}; 
for (x in person) {
    txt += person[x];
 } 

Добавление новых свойств

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

Предположим, что объект person уже существует. Вы можете добавить ему новое свойство:

 person.nationality = "English"; 

Внимание! В качестве имен свойств (или методов) нельзя использовать зарезервированные слова. Здесь действуют правила образования имен в JavaScript.

Удаление свойств

Ключевое слово delete удаляет свойство из объекта:

var person = {firstName:"Иван", lastName:"Петров", age:50, eyeColor:"карие"};
delete person. age;   // или delete person["age"];

Ключевое слово delete

удаляет как значение свойства, так и само свойство.

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

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

Не следует использовать оператор delete с предопределенными свойствами объектов JavaScript. Это может нарушить работу вашего приложения.

Атрибуты (метаданные) свойств

У всех свойств есть имя. Кроме этого, у них также есть значение.

При этом каждое свойство имеет следующие атрибуты или метаданные:

  • value — содержит непосредственно данные
  • enumerable — определяет доступность свойства для перечисления
  • configurable — определяет доступность свойства для изменения (например, может ли свойство быть удалено, может ли быть изменен какой-либо атрибут свойства)
  • writable — определяет, доступно ли данное свойство для записи (по умолчанию, true)

Эти атрибуты определяют доступность свойства (можно ли его прочитать?, его можно изменить?)

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

В ECMAScript 5 есть методы для чтения и записи всех атрибутов свойства.

Свойства прототипа

Объекты JavaScript наследуют свойства своих прототипов.

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

JS JavaScript Свойства объекта

HTML5CSS.ru

ЛУЧШИЙ САЙТ ДЛЯ РАЗРАБОТЧИКОВ

❮ Назад Дальше ❯


Свойства являются наиболее важной частью любого JavaScript-объекта.


Свойства JavaScript

Свойства — это значения, связанные с объектом JavaScript.

Объект JavaScript представляет собой коллекцию неупорядоченных свойств.

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


Доступ к свойствам JavaScript

Синтаксис для доступа к свойству объекта:

objectName.property          // person. age

or

objectNameproperty«]       // person[«age»]

or

objectName[expression]       // x = «age»; person[x]

The expression must evaluate to a property name.

Пример 1

person.firstname + » is » + person.age + » years old.»;

Пример 2

person[«firstname»] + » is » + person[«age»] + » years old.»;



JavaScript for…in loop

Инструкция JavaScript for…in циклически через свойства объекта.

Синтаксис

for (variable in object) {
    code to be executed
}

Блок кода внутри цикла for…in будет выполнен один раз для каждого свойства.

Циклический перебор свойств объекта:

Пример

var person = {fname:»John», lname:»Doe», age:25};

for (x in person) {
    txt += person[x];
}


Добавление новых свойств

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

Предположим, что объект Person уже существует- Затем можно присвоить ему новые свойства:

Пример

person.nationality = «English»;

Нельзя использовать зарезервированные слова для имен свойств (или методов). Применяются правила именования JavaScript.


Удаление свойств

Ключевое слово Delete Удаляет свойство из объекта:

Пример

var person = {firstName:»John», lastName:»Doe», age:50, eyeColor:»blue»};
delete person.age;   // or delete person[«age»];

Ключевое слово Delete удаляет как значение свойства, так и само свойство.

После удаления свойство нельзя использовать перед добавлением обратно.

Оператор Delete предназначен для использования в свойствах объекта. Он не влияет на переменные или функции.

Оператор DELETE не должен использоваться в предопределенных свойствах объекта JavaScript. Это может аварийно завершить работу приложения.


Атрибуты свойств

Все свойства имеют имя. Кроме того, они также имеют значение.

Значение является одним из атрибутов свойства.

Другие атрибуты: перечислимые, настраиваемые и записываемые.

Эти атрибуты определяют, как можно получить доступ к свойству (читается ли он?, является ли он доступным для записи?)

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

(ECMAScript 5 имеет методы для получения и установки всех атрибутов свойства)


Свойства прототипа

Объекты JavaScript наследуют свойства своего прототипа.

Ключевое слово DELETE не удаляет унаследованные свойства, но при удалении свойства prototype оно будет влиять на все объекты, унаследованные от прототипа.

❮ Назад Дальше ❯

PHP\CSS\JS\HMTL Editor


Copyright 2018-2020 HTML5CSS.ru

Правила и Условия Политика конфиденциальности О нас Контакты

Что такое объект в JavaScript?

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

В этом сообщении блога мы объясняем:

  • Что такое объект в JavaScript
  • Как добавить методы к объектам JavaScript
  • Что такое конструктор
  • Что это за ключевое слово
  • Как написать более чистый код, используя наследование
  • Что такое JSON (обозначение объекта JavaScript)

Объекты в программировании могут быть комбинацией переменных, функций и структур данных . Это означает, что объекты могут хранить значения, вы можете использовать объекты для управления значениями и объединять их в более сложные объекты, такие как массивы, и при этом получать все преимущества. JavaScript ничем не отличается. Если вы хотите узнать больше, прочитайте нашу запись в блоге: Что такое JavaScript?

Написание вашего первого объекта на JavaScript

Лучший способ объяснить, что такое объекты, это пример из реальной жизни. Возьмем, к примеру, чашку. Чашка — это объект со свойствами. У чашки есть цвет, объем, вес и т. д.

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

Например, давайте создадим объект с именем myCup и назначим ему свойства, названные цветом, объемом и весом, следующим образом:

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

Во-первых, мы объявляем переменную, начинающуюся с let myCup. Мы инициализируем его с помощью нового объекта(). Далее добавляем все свойства. Мы добавляем свойство с именем color следующим образом. Цвет точек myCup равен. А затем напишите значение: прозрачное в кавычках.

Для чашки объемом 1 литр мы можем написать myCup.volume = 1 . Вес — последнее свойство. myCup.weight равно и значение 0,5.

 

Более короткая запись для объектов JavaScript

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

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

Аналогично объявляем переменную: пусть myCup равняется, а затем фигурная скобка.

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

Далее идет свойство: том. Пишем объем: 1 . Еще раз мы должны добавить запятую в конце строки. Последнее свойство: вес. Вес двоеточия и значение. На этот раз запятая в конце не ставится. Но мы заканчиваем объект закрывающей фигурной скобкой.

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

 

Когда мы используем запятую в конце строки?

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

 

Практика. Что такое объект в JavaScript

Мы в CodeBrainer любим объяснять на примерах, поэтому давайте сделаем еще один объект для практики. Создайте объект для таблицы. Таблица имеет свойства: высоту, ширину, длину и цвет.

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

Мы объяснили, что такое объекты в JavaScript. Мы также показали, как создать объект двумя способами. Теперь мы покажем, в чем заключаются преимущества объектов.

 

Добавление методов для объектов JavaScript

Использование объектов — это здорово, потому что вы можете добавлять методы. Методы — это функции, которые связаны с данными внутри вашего объекта. Это значительно упрощает работу с объектами.

Мы создали объект для таблицы выше, для практики. Представьте, что у вас есть несколько таблиц. Как бы вы распечатали все цвета? Отличный способ — добавить метод, который будет распечатывать описание таблицы.

Другими словами, метод — это свойство объекта, который является функцией.

 

 

Нам нужен объект, чтобы показать, как работают методы

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

Сначала мы объявляем переменную для нашего объекта. Мы начинаем с let myTable equals, затем начинаем объект с открывающей фигурной скобки и нажимаем ввод, теперь мы записываем значения. Поднимите двоеточие и напишите значение «75». Так как нам нужно написать больше свойств, мы заканчиваем запятой и вводим.

Теперь запишем следующее свойство. Ширина двоеточия и напишите значение «120». Мы заканчиваем запятой и нажимаем ввод. Теперь запишем следующее свойство.

Длина двоеточия и запись значения «60». Заканчиваем запятой и вводим. Теперь запишем следующее свойство.

Закрасьте двоеточие и напишите значение «white». Теперь мы выходим из определения объекта, мы также добавляем точку с запятой в конце определения.

В вашем коде давайте оставим немного места для написания нашего метода.

 

Давайте напишем метод для нашего объекта

Мы можем добавить метод, просто добавив еще одно свойство , которое является функцией . Эта функция сможет читать значения объекта и работать с ними.

Мы добавим пример, который будет распечатывать цвет таблицы.

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

Начнем с myTable.whatIsMyColor равно и пишем функцию без параметров.

Здесь мы пишем наш функционал. Это может быть что угодно, лишь бы это помогало вам работать с объектом.

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

Внутри вызываем console.log и пишем: «Мой цвет:» плюс this.color . Ключевое слово: «Это» важно и связывает вас с данными объекта.

Теперь мы можем позвонить.

Теперь мы можем вызвать myTable.whatIsMyColor() . Не забывайте всегда писать фигурные скобки в конце.

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

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

 

Что означает «это» ключевое слово?

Когда функция используется в качестве конструктора (с ключевым словом new ), ключевое слово this привязывается к новому создаваемому объекту. Это означает, что значение для этого определяется на основе того, как выполняется код.

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

Важно помнить, что это ключевое слово имеет разное значение в зависимости от контекста. Если вы используете его внутри конструктора, метода или внешнего объекта. Вы можете прочитать больше об этом в статье, названной просто: this.

 

Практика — методы для объекта в JavaScript

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

Не волнуйтесь, вы можете шаг за шагом увидеть решение в видео выше: Как добавить метод к вашему объекту JavaScript

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

Теперь мы показали, как добавить метод к объекту в JavaScript. Это метод, который вы будете использовать часто, так как он делает ваш код намного короче.

 

Что такое конструктор для объекта JavaScript?

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

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

Это означает, что вы можете писать функции для объектов только один раз и только изменять значения. Это облегчает вашу работу, а также снижает количество ошибок в вашем коде.

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

Покажем это на примере нашего табличного объекта.

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить , поделившись эту статью!

Мы объявляем переменную с const Table и функцией equals. Для функции мы используем параметры: высота, ширина, длина и цвет.

Не забудьте поставить фигурные скобки в конце строки и нажать Enter. Это определяет тело функции.

Для первого свойства запишем this.height = height . И точка с запятой и введите, чтобы закончить строку. Далее напишите this.width = width . С точкой с запятой и введите в конце. А теперь о длине. Здесь мы используем сокращение для длины: len (поскольку длина уже является методом каждого объекта в JavaScript). И цвет.

 

Что такое наследование?

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

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

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

Подробнее читайте в вики: Наследование (объектно-ориентированное программирование)

 

Методы внутри конструкторов

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

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

JavaScript

Спасибо за прочтение!

Если вам понравился наш код, вы можете отблагодарить, поделившись этой статьей!

Напишите this.whatIsMyColor равно и напишите функцию без параметров. С помощью фигурных скобок мы определяем тело функции.

Звоним document.пишем и вводим значение. Только будьте осторожны, вводите галочку, а не знак апострофа.

Значение: «Мой цвет:». Затем напишите знак $ и фигурные скобки. Внутренние скобки этот.цвет . Это считывает значение для объекта. Для новой строки мы используем HTML-тег break в конце.

На этот раз мы используем document.write. Это покажет сообщение в вашем HTML-документе. Но вы можете изменить его и использовать console.log, чтобы увидеть сообщение в консоли отладки.

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

 

Использование конструктора для объявления новых объектов

Мы объявляем переменную с пусть myFirstTable равняется, а затем мы вызываем новый Стол(80, 80, 120, "синий") . Внутри скобок указаны значения для нашего объекта.

Мы можем использовать конструктор много раз. Теперь мы можем объявить вторую переменную с помощью let mySecondTable. Еще раз вызываем новую таблицу и пишем значения: новая таблица(80, 100, 150, "красная") .

Последнее, что нужно сделать, это вызвать метод для обоих объектов. Вызовите myFirstTable.whatIsMyColor() . Помните, скобки в конце.

Вызов для второго объекта такой же: mySecondTable.whatIsMyColor() .

Давайте посмотрим, как это выглядит в браузере. (Если вы использовали console.log, проверьте консоль отладки в своем браузере.) Не забудьте сохранить файл перед его просмотром.

 

Практика — конструктор для JavaScript

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

Вы можете посмотреть пошаговое решение в видео выше: Что такое конструктор в JavaScript

Вот результат, который вы должны получить в браузере:

Мы показали, что такое объект в JavaScript, как написать конструктор и какие есть методы.

Если вам нужна дополнительная информация, просто дайте нам знать, и мы добавим ее в наш блог.

 

Краткая запись для объектов и JSON

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

 

Заключение

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

Мы показали несколько примеров, как создать объект и как использовать их с помощью методов, дайте нам знать, что вы думаете, как мы можем помочь вам еще больше. И не забывайте получать удовольствие от кодирования с помощью CodeBrainer.

Формат обмена данными JavaScript Object Notation (JSON)

RFC 8259: Формат обмена данными JavaScript Object Notation (JSON) [Домашняя страница RFC] [ТЕКСТ|PDF|HTML] [Отслеживание] [ПИС] [Ошибки] [Информационная страница]

СТАНДАРТ ИНТЕРНЕТА
Имеющиеся исправления

 Инженерная рабочая группа Интернета (IETF) T. Bray, Ed.
Запрос комментариев: 8259 Текстуальность
Устарело: 7159 декабря 2017 г.
Категория: Трек стандартов
ISSN: 2070-1721
     Формат обмена данными JavaScript Object Notation (JSON)
Абстрактный
   Нотация объектов JavaScript (JSON) — это легкая текстовая,
   независимый от языка формат обмена данными. Он был получен из
   Стандарт языка программирования ECMAScript. JSON определяет небольшой
   набор правил форматирования для переносимого представления структурированных
   данные.
   Этот документ устраняет несоответствия с другими спецификациями
   JSON, исправляет ошибки спецификации и предлагает основанные на опыте
   руководство по интероперабельности. 
Статус этого меморандума
   Это документ для отслеживания стандартов Интернета.
   Этот документ является продуктом Инженерной группы Интернета.
   (IETF). Он представляет собой консенсус сообщества IETF. В нем есть
   получил общественное мнение и был одобрен для публикации
   Руководящая группа по разработке Интернет-технологий (IESG). Дополнительная информация о
   Интернет-стандарты доступны в разделе 2 RFC 7841.
   Информация о текущем статусе этого документа, любых опечатках,
   и как предоставить отзыв о нем можно получить на
   https://www.rfc-editor.org/info/rfc8259.
Трек стандартов Брея [Страница 1] 

RFC 8259 JSON, декабрь 2017 г.
Уведомление об авторских правах
   Copyright (c) 2017 IETF Trust и лица, указанные в качестве
   авторы документа. Все права защищены.
   Этот документ регулируется BCP 78 и юридическими документами IETF Trust.
   Положения, касающиеся документов IETF
   (https://trustee.ietf.org/license-info) действует на дату
   публикации этого документа.  Пожалуйста, ознакомьтесь с этими документами
   внимательно, так как они описывают ваши права и ограничения в отношении
   к этому документу. Компоненты кода, извлеченные из этого документа, должны
   включить текст упрощенной лицензии BSD, как описано в Разделе 4.e
   Доверительные юридические положения и предоставляются без гарантии, поскольку
   описан в Упрощенной лицензии BSD.
   Этот документ может содержать материалы из документов IETF или IETF.
   Материалы, опубликованные или ставшие общедоступными до ноября
   10, 2008. Лицо (лица), контролирующие авторские права на некоторые из этих
   материал, возможно, не предоставил IETF Trust право разрешать
   модификации такого материала вне процесса стандартизации IETF.
   Без получения соответствующей лицензии от лица (лиц), контролирующего
   авторские права на такие материалы, этот документ не может быть изменен
   вне процесса стандартизации IETF, и его производные продукты могут
   не создаваться вне процесса стандартизации IETF, за исключением форматирования
   для публикации в виде RFC или для перевода на другие языки. 
   чем английский.
Трек стандартов Брея [Страница 2] 

RFC 8259 JSON, декабрь 2017 г.
Оглавление
   1. Введение  . . . . . . . . . . . . . . . . . . . . . . . . 3
     1.1. Условные обозначения, используемые в этом документе. . . . . . . . . . . . 4
     1.2. Спецификации JSON. . . . . . . . . . . . . . . . . 4
     1.3. Введение в эту редакцию. . . . . . . . . . . . . . 5
   2. Грамматика JSON. . . . . . . . . . . . . . . . . . . . . . . . 5
   3. Ценности. . . . . . . . . . . . . . . . . . . . . . . . . . . 6
   4. Объекты. . . . . . . . . . . . . . . . . . . . . . . . . . . 6
   5. Массивы. . . . . . . . . . . . . . . . . . . . . . . . . . . 7
   6 номеров . . . . . . . . . . . . . . . . . . . . . . . . . . . 7
   7. Струны. . . . . . . . . . . . . . . . . . . . . . . . . . . 8
   8. Проблемы со строками и символами. . . . . . . . . . . . . . . . . 98.1. Кодировка символов  . . . . . . . . . . . . . . . . . . . 9
     8.2. Символы Юникода. . . . . . . . . . . . . .  . . . . . 10
     8.3. Сравнение строк. . . . . . . . . . . . . . . . . . . . 10
   9. Парсеры. . . . . . . . . . . . . . . . . . . . . . . . . . . 10
   10. Генераторы. . . . . . . . . . . . . . . . . . . . . . . . . 10
   11. Вопросы IANA. . . . . . . . . . . . . . . . . . . . . 11
   12. Вопросы безопасности. . . . . . . . . . . . . . . . . . . 12
   13. Примеры. . . . . . . . . . . . . . . . . . . . . . . . . . 12
   14. Ссылки. . . . . . . . . . . . . . . . . . . . . . . . . 14
     14.1. Нормативные ссылки . . . . . . . . . . . . . . . . . . 14
     14.2. Информативные ссылки. . . . . . . . . . . . . . . . . 14
   Приложение A. Отличия от RFC 7159. . . . . . . . . . . . . . . 16
   Авторы . . . . . . . . . . . . . . . . . . . . . . . . . . 16
   Адрес автора. . . . . . . . . . . . . . . . . . . . . . . . 16
1. Введение
   Нотация объектов JavaScript (JSON) — это текстовый формат для
   сериализация структурированных данных. Это производное от объекта
   литералы JavaScript, как определено в ECMAScript Programming
   Языковой стандарт, третье издание [ECMA-262]. 
   JSON может представлять четыре примитивных типа (строки, числа, логические значения,
   и null) и два структурированных типа (объекты и массивы).
   Строка представляет собой последовательность из нуля или более символов Юникода [UNICODE].
   Обратите внимание, что эта цитата относится к последней версии Unicode.
   а не конкретный релиз. Не ожидается, что в будущем
   изменения в спецификации Unicode повлияют на синтаксис JSON.
   Объект представляет собой неупорядоченный набор из нуля или более имен/значений.
   пары, где имя — это строка, а значение — это строка, число,
   логическое значение, нуль, объект или массив.
   Массив представляет собой упорядоченную последовательность из нуля или более значений.
Трек стандартов Брея [Страница 3] 

RFC 8259 JSON, декабрь 2017 г.
   Термины «объект» и «массив» исходят из соглашений
   JavaScript.
   Цели дизайна JSON заключались в том, чтобы он был минимальным, портативным, текстовым и
   подмножество JavaScript.
1.1. Условные обозначения, используемые в этом документе
   Ключевые слова «ДОЛЖЕН», «НЕ ДОЛЖЕН», «ТРЕБУЕТСЯ», «ДОЛЖЕН», «НЕ ДОЛЖЕН»,
   «СЛЕДУЕТ», «НЕ СЛЕДУЕТ», «РЕКОМЕНДУЕТСЯ», «НЕ РЕКОМЕНДУЕТСЯ», «МОЖЕТ» и
   «НЕОБЯЗАТЕЛЬНО» в этом документе следует интерпретировать, как описано в BCP. 
   14 [RFC2119] [RFC8174] тогда и только тогда, когда они появляются во всех
   столицы, как показано здесь.
   Грамматические правила в этом документе следует интерпретировать как
   описано в [RFC5234].
1.2. Спецификации JSON
   Этот документ заменяет [RFC7159]. [RFC7159] устарело [RFC4627],
   который изначально описывал JSON и регистрировал тип носителя
   "приложение/json".
   JSON также описан в [ECMA-404].
   Ссылка на ECMA-404 в предыдущем предложении является нормативной, а не
   с обычным значением, что разработчики должны проконсультироваться с ним, чтобы
   понять этот документ, но подчеркнуть, что нет
   несоответствия в определении термина «текст JSON» в любом из
   его спецификации. Обратите внимание, однако, что ECMA-404 допускает несколько
   методы, которые эта спецификация рекомендует избегать в
   интересы максимальной оперативной совместимости.
   Намерение состоит в том, чтобы грамматика была одинаковой между двумя документами,
   хотя используются разные описания.  Если есть разница
   обнаружены между ними, ECMA и IETF будут работать вместе, чтобы обновить
   оба документа.
   Если ошибка обнаружена в одном из документов, другой должен быть
   проверил, есть ли у него аналогичная ошибка; если да, то должно быть
   исправлено, если возможно.
   Если какой-либо документ будет изменен в будущем, ECMA и IETF
   работать вместе, чтобы гарантировать, что два документа остаются согласованными через
   изменение.
Трек стандартов Брея [Страница 4] 

RFC 8259 JSON, декабрь 2017 г.
1.3. Введение в эту редакцию
   За годы, прошедшие после публикации RFC 4627, JSON нашел очень
   широкое использование. Этот опыт выявил определенные закономерности, которые, хотя
   разрешенные его спецификациями, вызвали проблемы совместимости.
   Кроме того, было сообщено о небольшом количестве ошибок в отношении RFC 4627.
   (см. RFC Errata ID 607 [Err607] и 3607 [Err3607]) и относительно
   RFC 7159 (см. RFC Errata ID 3915 [Ошибка3915], 4264 [Ошибка4264], 4336
   [Err4336] и 4388 [Err4388]). 
   Цель этого документа - применить опечатки, устранить несоответствия
   с другими спецификациями JSON и выделить методы, которые могут
   привести к проблемам совместимости.
2. Грамматика JSON
   Текст JSON представляет собой последовательность токенов. В комплект жетонов входит шесть
   структурные символы, строки, числа и три буквенных имени.
   Текст JSON представляет собой сериализованное значение. Обратите внимание, что некоторые предыдущие
   Спецификации JSON ограничивали текст JSON, чтобы быть объектом или
   множество. Реализации, которые генерируют только объекты или массивы, где
   Текст JSON, который требуется, будет совместим в том смысле, что все
   реализации примут их как соответствующие тексты JSON.
      JSON-текст = значение ws ws
   Это шесть структурных символов:
      начало массива = ws %x5B ws ; [ левая квадратная скобка
      начальный объект = ws %x7B ws ; { левая фигурная скобка
      конец массива = ws %x5D ws ; ] правая квадратная скобка
      конечный объект = ws %x7D ws ; } правая фигурная скобка
      разделитель имен = ws %x3A ws ; : двоеточие
      разделитель значений = ws %x2C ws ; , запятая
Трек стандартов Брея [Страница 5] 

RFC 8259 JSON, декабрь 2017 г. 
   Незначительные пробелы разрешены до или после любого из шести
   структурные символы.
      вес = *(
              %x20 / ; Космос
              %x09 / ; Горизонтальная вкладка
              %x0А / ; Перевод строки или Новая строка
              %x0D) ; Возврат каретки
3. Ценности
   Значение JSON ДОЛЖНО быть объектом, массивом, числом, строкой или одним из
   следующие три буквальных имени:
      ЛОЖЬ
      нулевой
      истинный
   Буквенные имена ДОЛЖНЫ быть строчными. Никаких других буквальных имен нет.
   допустимый.
      значение = ложь/нуль/истина/объект/массив/число/строка
      ложь = %x66.61.6c.73.65 ; ЛОЖЬ
      ноль = %x6e.75.6c.6c ; нулевой
      правда = %x74.72.75.65 ; истинный
4. Объекты
   Структура объекта представлена ​​парой фигурных скобок.
   вокруг нуля или более пар имя/значение (или элементов). Имя — это
   нить. После каждого имени ставится одно двоеточие, разделяющее имя.
   от значения. Одна запятая отделяет значение от следующего
   имя. Имена внутри объекта ДОЛЖНЫ быть уникальными. 
      объект = начальный объект [член *(член-разделитель значений)]
               конечный объект
      member = строковое значение разделителя имени
   Объект, все имена которого уникальны, совместим в том смысле, что
   что все программные реализации, получающие этот объект, согласятся
   сопоставления имя-значение. Когда имена внутри объекта не
   уникально, поведение программного обеспечения, которое получает такой объект,
   непредсказуемый. Многие реализации сообщают о паре фамилия/значение
   только. Другие реализации сообщают об ошибке или не могут проанализировать
Трек стандартов Брея [Страница 6] 

RFC 8259 JSON, декабрь 2017 г.
   объект, а некоторые реализации сообщают обо всех парах имя/значение,
   включая дубликаты.
   Было замечено, что библиотеки синтаксического анализа JSON различаются в зависимости от того,
   не они делают порядок членов объекта видимым для вызова
   программное обеспечение. Реализации, поведение которых не зависит от члена
   порядок будет интероперабельным в том смысле, что они не будут
   затронуты этими различиями. 
5. Массивы
   Структура массива представлена ​​в виде квадратных скобок, окружающих ноль.
   или более значений (или элементов). Элементы разделяются запятыми.
   массив = начало массива [значение *(значение-разделитель значений)] конец массива
   Нет требования, чтобы значения в массиве были одинаковыми.
   тип.
6 номеров
   Представление чисел похоже на то, что используется в большинстве
   языки программирования. Число представлено в базе 10 с помощью
   десятичные цифры. Он содержит целочисленный компонент, который может быть
   префикс с необязательным знаком минус, за которым может следовать
   дробная часть и/или показательная часть. Ведущие нули не
   допустимый.
   Дробная часть представляет собой десятичную точку, за которой следует одна или несколько цифр.
   Показательная часть начинается с буквы Е в верхнем или нижнем регистре,
   за которым может следовать знак плюс или минус. E и необязательно
   после знака следует одна или несколько цифр.
   Числовые значения, которые не могут быть представлены в приведенной ниже грамматике (например,
   как Infinity и NaN) не разрешены. 
      число = [ минус ] int [ frac ] [ exp ]
      десятичная точка = %x2E ; .
      цифра1-9= %x31-39; 1-9
      е = %x65/%x45; е E
      exp = e [минус/плюс] 1*ЦИФРА
      frac = десятичная точка 1*ЦИФРА
Трек стандартов Брея [Страница 7] 

RFC 8259 JSON, декабрь 2017 г.
      int = ноль / (цифра1-9 *ЦИФРА)
      минус = %x2D ; -
      плюс = %x2B ; +
      ноль = %x30 ; 0
   Эта спецификация позволяет реализациям устанавливать ограничения на диапазон
   и точность принятых чисел. Поскольку программное обеспечение, реализующее
   Числа IEEE 754 binary64 (двойной точности) [IEEE754] обычно
   доступными и широко используемыми, хорошая функциональная совместимость может быть достигнута за счет
   реализации, которые не ожидают большей точности или диапазона, чем эти
   обеспечить, в том смысле, что реализации будут аппроксимировать JSON
   числа в пределах ожидаемой точности. Номер JSON, например 1E400.
   или 3.141592653589793238462643383279 может означать потенциал
   проблемы взаимодействия, так как это предполагает, что программное обеспечение, которое
   создано, он ожидает, что принимающее программное обеспечение будет иметь большие возможности
   для числовой величины и точности, чем широко доступны. 
   Обратите внимание, что при использовании такого программного обеспечения числа, которые являются целыми и
   находятся в диапазоне [-(2**53)+1, (2**53)-1] взаимодействуют в
   смысле, что реализации будут точно согласовывать свои числовые
   ценности.
7. Струны
   Представление строк аналогично соглашениям, используемым в C
   семейство языков программирования. Строка начинается и заканчивается
   кавычки. Все символы Юникода могут быть помещены в
   кавычки, за исключением символов, которые ДОЛЖНЫ быть экранированы:
   кавычка, перевернутая косая черта и управляющие символы (U+0000
   через U+001F).
   Любой символ может быть экранирован. Если персонаж находится в Базовом
   Многоязычный уровень (от U+0000 до U+FFFF), то это может быть
   представлен в виде последовательности из шести символов: перевернутая солидус, за которой следует
   строчной буквой u, за которой следуют четыре шестнадцатеричных цифры,
   закодировать кодовую точку символа. Шестнадцатеричные буквы от А до
   F может быть в верхнем или нижнем регистре.  Так, например, строка
   может быть представлен только один знак обратной косой черты
   как "\u005C".
   В качестве альтернативы есть двухсимвольная последовательность escape
   образы некоторых популярных персонажей. Так, например,
   строка, содержащая только один символ обратной косой черты, может быть
   представлен более компактно как "\\".
Трек стандартов Брея [Страница 8] 

RFC 8259 JSON, декабрь 2017 г.
   Чтобы экранировать расширенный символ, которого нет в Basic Multilingual
   Plane, символ представлен в виде 12-символьной последовательности,
   кодирование суррогатной пары UTF-16. Так, например, строка
   содержащий только символ ключа G (U+1D11E), может быть представлен как
   "\uD834\uDD1E".
      строка = кавычка * символьная кавычка
      символ = неэкранированный /
          побег (
              %x22 / ; " кавычка U+0022
              %x5C / ; \ обратный солидус U+005C
              %x2F / ; / солид U+002F
              %x62 / ; б назад пробел U+0008
              %x66 / ; f подача формы U+000C
              %x6E / ; n перевод строки U+000A
              %x72 / ; r возврат каретки U+000D
              %x74 / ; вкладка U+0009%x75 4HEXDIG ); uXXXX U+XXXX
      побег = %x5C ; \
      кавычка = %x22 ; "
      без экранирования = %x20-21 / %x23-5B / %x5D-10FFFF
8.  Проблемы со строками и символами
8.1. Кодировка символов
   Текст JSON, которым обмениваются системы, не являющиеся частью закрытого
   экосистема ДОЛЖНА быть закодирована с использованием UTF-8 [RFC3629].
   Предыдущие спецификации JSON не требовали использования UTF-8.
   при передаче текста JSON. Однако подавляющее большинство JSON-
   программные реализации решили использовать кодировку UTF-8,
   до такой степени, что это единственная кодировка, которая достигает
   совместимость.
   Реализации НЕ ДОЛЖНЫ добавлять метку порядка байтов (U+FEFF) к
   начало передаваемого по сети текста JSON. В интересах
   интероперабельность, реализации, анализирующие тексты JSON, МОГУТ игнорировать
   наличие знака порядка байтов, а не рассматривать его как
   ошибка.
Трек стандартов Брея [Страница 9] 

RFC 8259 JSON, декабрь 2017 г.
8.2. Символы Юникода
   Когда все строки, представленные в тексте JSON, полностью составлены
   символов Unicode [UNICODE] (однако с экранированием), то этот JSON
   текст совместим в том смысле, что все программные реализации
   этот синтаксический анализ будет согласовываться с содержимым имен и строк
   значения в объектах и ​​массивах. 
   Однако ABNF в этой спецификации допускает имена элементов и
   строковые значения, содержащие битовые последовательности, которые не могут кодировать Unicode
   персонажи; например, "\uDEAD" (один непарный символ UTF-16
   суррогат). Примеры этого наблюдались, например, при
   библиотека усекает строку UTF-16, не проверяя, является ли
   усечение разделило суррогатную пару. Поведение программного обеспечения, которое
   получение текстов JSON, содержащих такие значения, непредсказуемо; для
   например, реализации могут возвращать разные значения длины
   строкового значения или даже страдать от фатальных исключений во время выполнения.
8.3. Сравнение строк
   Программные реализации обычно требуются для проверки имен
   члены объекта для равенства. Реализации, которые преобразуют
   текстовое представление в последовательности единиц кода Unicode, а затем
   выполнить численное сравнение, кодовая единица за кодовой единицей, являются
   интероперабельны в том смысле, что реализации будут согласовываться во всех
   кейсы на равенство или неравенство двух строк.  Например,
   реализации, которые сравнивают строки с экранированными символами
   непреобразованный может ошибочно обнаружить, что "a\\b" и "a\u005Cb" не являются
   равный.
9. Парсеры
   Анализатор JSON преобразует текст JSON в другое представление. А
   Анализатор JSON ДОЛЖЕН принимать все тексты, соответствующие грамматике JSON.
   Парсер JSON МОЖЕТ принимать формы или расширения, отличные от JSON.
   Реализация может устанавливать ограничения на размер текстов, которые она
   принимает. Реализация может устанавливать ограничения на максимальную глубину
   вложение. Реализация может устанавливать ограничения на диапазон и точность
   чисел. Реализация может устанавливать ограничения на длину и
   символьное содержимое строк.
10. Генераторы
   Генератор JSON создает текст JSON. Полученный текст ДОЛЖЕН
   строго соответствовать грамматике JSON.
Трек стандартов Брея [Страница 10] 

RFC 8259 JSON, декабрь 2017 г.
11. Соображения IANA
   Тип носителя для текста JSON — application/json. 
   Тип имени: приложение
   Имя подтипа: json
   Требуемые параметры: н/д
   Дополнительные параметры: н/д
   Рекомендации по кодированию: двоичное
   Вопросы безопасности: см. RFC 8259, раздел 12.
   Соображения по совместимости: описано в RFC 8259.
   Опубликованная спецификация: RFC 8259.
   Приложения, использующие этот тип носителя:
      JSON использовался для обмена данными между приложениями, написанными
      на всех этих языках программирования: ActionScript, C, C#,
      Clojure, ColdFusion, Common Lisp, E, Erlang, Go, Java, JavaScript,
      Lua, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Scala и др.
      Схема.
   Дополнительная информация:
      Магический номер(а): н/д
      Расширение(я) файла: .json
      Коды типов файлов Macintosh: TEXT
   Контактное лицо и адрес электронной почты для получения дополнительной информации:
      IESG
      
   Предполагаемое использование: ОБЩИЙ
   Ограничения на использование: нет
   Автор:
      Дуглас Крокфорд
      <дуглас@crockford. com>
   Сменить контроллер:
      IESG
      
Трек стандартов Брея [Страница 11] 

RFC 8259 JSON, декабрь 2017 г.
   Примечание. Для этой регистрации не определен параметр «charset».
      Добавление одного действительно не влияет на совместимых получателей.
12. Вопросы безопасности
   Как правило, при использовании языков сценариев возникают проблемы с безопасностью. JSON
   является подмножеством JavaScript, но исключает присваивание и вызов.
   Поскольку синтаксис JSON заимствован из JavaScript, можно
   используйте функцию "eval()" этого языка для разбора большинства текстов JSON (но
   не все; некоторые символы, такие как U+2028 LINE SEPARATOR и U+2029PARAGRAPH SEPARATOR допустимы в JSON, но не в JavaScript). Этот
   обычно представляет собой неприемлемую угрозу безопасности, поскольку текст
   может содержать исполняемый код вместе с объявлениями данных. Одинаковый
   внимание относится к использованию функций, подобных eval(), в любом
   другой язык программирования, в котором тексты JSON соответствуют этому
   синтаксис языка. 
13. Примеры
   Это объект JSON:
      {
        "Изображение": {
            "Ширина": 800,
            «Высота»: 600,
            "Название": "Вид с 15 этажа",
            "Миниатюра": {
                "Ссылка": "http://www.example.com/image/481989943",
                «Высота»: 125,
                "Ширина": 100
            },
            «Анимированный»: ложь,
            «Идентификаторы»: [116, 943, 234, 38793]
          }
      }
   Его элемент Image является объектом, а элемент Thumbnail является объектом и
   член идентификаторов которого представляет собой массив чисел.
Трек стандартов Брея [Страница 12] 

RFC 8259 JSON, декабрь 2017 г.
   Это массив JSON, содержащий два объекта:
      [
        {
           "точность": "молния",
           «Широта»: 37,7668,
           "Долгота": -122,3959,
           "Адрес":   "",
           «Город»: «САН-ФРАНЦИСКО»,
           "Штат": "CA",
           «Почтовый индекс»: «94107»,
           "Страна": "США"
        },
        {
           "точность": "молния",
           «Широта»: 37. 371991, г.
           "Долгота": -122.026020,
           "Адрес":   "",
           «Город»: «САННИВЕЙЛ»,
           "Штат": "CA",
           «Почтовый индекс»: «94085»,
           "Страна": "США"
        }
      ]
   Вот три небольших текста JSON, содержащих только значения:
   "Привет, мир!"
   42
   истинный
Трек стандартов Брея [Страница 13] 

RFC 8259 JSON, декабрь 2017 г.
14. Ссылки
14.1. Нормативные ссылки
   [ECMA-404] Ecma International, "Формат обмена данными JSON",
              Стандарт ECMA-404,
              .
   [IEEE754] IEEE, «Стандарт IEEE для арифметики с плавающей запятой»,
              IEEE 754.
   [RFC2119] Брэднер, С., «Ключевые слова для использования в RFC для указания
              Уровни требований», BCP 14, RFC 2119,
              DOI 10.17487/RFC2119, март 1997 г.,
              .
   [RFC3629] Yergeau, F., "UTF-8, формат преобразования ISO
              10646", STD 63, RFC 3629, DOI 10. 17487/RFC3629, ноябрь
              2003 г., .
   [RFC5234] Крокер, Д., изд. и П. Оверелл, "Расширенный BNF для синтаксиса".
              Технические характеристики: ABNF", STD 68, RFC 5234,
              DOI 10.17487/RFC5234, январь 2008 г.,
              .
   [RFC8174] Лейба, Б., «Неоднозначность прописных и строчных букв в RFC».
              2119Ключевые слова», BCP 14, RFC 8174, DOI 10.17487/RFC8174,
              Май 2017 г., .
   [UNICODE] Консорциум Unicode, «Стандарт Unicode»,
              .
14.2. Информативные ссылки
   [ECMA-262] Ecma International, "Спецификация языка ECMAScript",
              Стандарт ECMA-262, третье издание, декабрь 1999 г.,
              .
   [Err3607] RFC Errata, Erratum ID 3607, RFC 4627,
               rfc-editor.org/errata/eid3607>.
   [Err3915] RFC Errata, Erratum ID 3915, RFC 7159,
              .
Трек стандартов Брея [Страница 14] 

RFC 8259 JSON, декабрь 2017 г.
   [Err4264] RFC Errata, Erratum ID 4264, RFC 7159,
              .
   [Err4336] RFC Errata, Erratum ID 4336, RFC 7159,
              .
   [Err4388] RFC Errata, Erratum ID 4388, RFC 7159,
              .
   [Err607] RFC Errata, Erratum ID 607, RFC 4627,
              .
   [RFC4627] Крокфорд, Д., "Тип носителя application/json для
              Нотация объектов JavaScript (JSON)», RFC 4627,
              DOI 10.17487/RFC4627, июль 2006 г.,
              .
   [RFC7159] Брей, Т., изд., «Данные нотации объектов JavaScript (JSON)
              Формат обмена», RFC 7159, DOI 10. 17487/RFC7159, март
              2014 г., .
Трек стандартов Брея [Страница 15] 

 RFC 8259 JSON, декабрь 2017 г.
Приложение A. Отличия от RFC 7159
 В этом разделе перечислены различия между этим документом и текстом в
 RFC 7159.
 o Раздел 1.2 был обновлен, чтобы отразить удаление JSON.
 спецификация ECMA-262, чтобы сделать ECMA-404 нормативным
 ссылка, и объяснить конкретное значение слова «нормативный».
 o Раздел 1.3 был обновлен, чтобы отразить опечатки,
 RFC 7159, а не RFC 4627.
 o Раздел 8.1 был изменен, чтобы требовать использования UTF-8, когда
 передается по сети.
 o Раздел 12 был обновлен для повышения точности
 описание риска безопасности, вытекающего из использования
 Функция ECMAScript "eval()".
 o Раздел 14.1 был обновлен и теперь включает ECMA-404 в качестве нормативного
 ссылка.
 o Раздел 14.2 был обновлен, чтобы удалить ECMA-404, обновить
 версии ECMA-262 и обновите список исправлений.
Оставить комментарий

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

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