Skip to content
garevna edited this page Oct 14, 2018 · 3 revisions

🎓 JSON

Формат хранения объектов JS в виде текстовой строки удобен с точки зрения обмена данными с сервером и хранения данных сложной структры

Он является более компактной альтернативой формату XML ( eXtensible Markup Language )

JSON - это встроенный нативный объект ( не конструктор )

Имеет всего два метода:

JSON.stringify ()
JSON.parse ()
▼ JSON
    ► parse: ƒ parse()
    ► stringify: ƒ stringify()
      Symbol(Symbol.toStringTag): "JSON"
    ▼ __proto__:
        ► constructor: ƒ Object()
        ► hasOwnProperty: ƒ hasOwnProperty()
        ► isPrototypeOf: ƒ isPrototypeOf()
        ► propertyIsEnumerable: ƒ propertyIsEnumerable()
        ► toLocaleString: ƒ toLocaleString()
        ► toString: ƒ toString()
        ► valueOf: ƒ valueOf()
        ► __defineGetter__: ƒ __defineGetter__()
        ► __defineSetter__: ƒ __defineSetter__()
        ► __lookupGetter__: ƒ __lookupGetter__()
        ► __lookupSetter__: ƒ __lookupSetter__()
        ► get __proto__: ƒ __proto__()
        ► set __proto__: ƒ __proto__()

🎓 JSON.stringify ()

  • Единственный обязательный аргумент метода - ссылка на объект ( массив )
  • Возвращаемое значение - JSON-строка

☕ 1️⃣

var obj = {
   name: "sample",
   type: "figure",
   color: "green",
   size: 200,
   position: [ 250, 250 ]
}

JSON.stringify ( obj )
'{"name":"sample","type":"figure","color":"green","size":200,"position":[250,250]}'

🎓 JSON.parse ()

  • Единственный обязательный аргумент метода - JSON-строка
  • Возвращаемое значение - объект JS
⚠️ В строке JSON все строчные значения ( включая имена свойств ) заключаются в двойные кавычки
⚠️ Числовые и логические значения, массивы и объекты в кавычки не заключаются

☕ 2️⃣

var x = `{
    "name": "sample",
    "type": "figure",
    "attrs": {
           "color": "green",
           "size": 200,
           "position": [ 250, 250 ]
    }
}`

JSON.parse ( x )
▼ {name: "sample", type: "figure", attrs: {…}}
  ▼ attrs:
        color: "green"
      ► position: (2) [250, 250]
        size: 200
      ► __proto__: Object
    name: "sample"
    type: "figure"
  ► __proto__: Object

🎓 Глубокое копирование

Известно, что массивы и объекты передаются по ссылке

Если объект имеет плоскую структуру, то получить точную копию этого объекта можно с помощью метода Object.assign ()

Однако если свойства объекта являются объектами или массивами, то Object.assign () скопирует ссылки на эти вложенные объекты

Если же выполнить сначала JSON.stringify (), а затем JSON.parse (), то в результате мы получим точную копию объекта, а не ссылку

☕ 3️⃣

var obj = {
        name: "sample",
        type: "figure",
        color: "green",
        size: 200,
        position: [ 250, 250 ]
}
var sample = JSON.parse ( JSON.stringify ( obj ) )

В переменной sample теперь находится точная копия объекта obj, включая значения элементов массива position, а не ссылка на него

Сравним результаты Object.assign () и JSON.stringify () ➡️ JSON.parse ()

var test = Object.assign ( {}, obj )

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

test.position === obj.position

возвращает true, поскольку значение свойства test.position является ссылкой на объект obj.position

А вот логическое выражение

sample.position === obj.position

вернет false, потому что sample.position является другим объектом, ссылка на который не совпадает со ссылкой на объект obj.position

© Irina H.Fylyppova 2018
Использование данных материалов или любой их части коммерческими школами ( курсами ) является нарушением авторских прав


Новая версия


1 2 3 4 5
6 7 8 9 10
11 12 13 14 15
16 17 18 19

Занятие 1

⤵️

Занятие 2

⤴️ ⤵️

Занятие 3

⤴️ ⤵️

Занятие 4

⤴️ ⤵️

Занятие 5

⤴️ ⤵️

Занятие 6

⤴️ ⤵️

Занятие 7

⤴️ ⤵️

Занятие 8

⤴️ ⤵️

Занятие 9

⤴️ ⤵️

Занятие 10

⤴️ ⤵️

Занятие 11

⤴️ ⤵️

Занятие 12

⤴️ ⤵️

Занятие 13

⤴️ ⤵️

Занятие 14

⤴️ ⤵️

Занятие 15

⤴️ ⤵️

Занятие 16

⤴️ ⤵️

Занятие 17

⤴️ ⤵️

Занятие 18

⤴️ ⤵️

Занятие 19

⤴️ ⤵️

⤴️

ico20 Дополнительно
dir-20 Справочная инфо

Clone this wiki locally