Яка різниця між JSON та об'єктною літеральною нотацією?


220

Хтось може сказати мені, в чому головна відмінність об’єкта JavaScript, визначеного за допомогою Object Literal Notation та JSON-об'єкта ?

Згідно з книгою JavaScript, в ній сказано, що це об'єкт, визначений за допомогою Object Notation :

var anObject = {
    property1 : true,
    showMessage : function (msg) { alert(msg) }
};

Чому в цьому випадку це не об'єкт JSON? Просто тому, що це не визначено за допомогою лапок?


20
"Чому в цьому випадку це не об'єкт JSON?": Тому що ваші ключі повинні бути рядками, а функція не є дійсним значенням JSON.
Мет

Відповіді:


248

Давайте спочатку уточнимо, що насправді є JSON . JSON - це текстовий , незалежний від мови формат обміну даними, подібно до XML, CSV або YAML.

Дані можна зберігати різними способами, але якщо вони повинні зберігатися у текстовому файлі та читатись комп'ютером, він повинен дотримуватися деякої структури. JSON - один із багатьох форматів, що визначають таку структуру.

Такі формати, як правило, не залежать від мови, тобто вони можуть бути оброблені Java, Python, JavaScript, PHP.

На відміну від цього, JavaScript є мовою програмування. Звичайно, JavaScript також забезпечує спосіб визначення / опису даних, але синтаксис дуже специфічний для JavaScript.

Як протилежний приклад, Python має поняття кортежів , їх синтаксис (x, y). У JavaScript немає подібного.


Розглянемо синтаксичні відмінності між JSON та JavaScript-літералами.

JSON має такі синтаксичні обмеження:

  • Об'єктні ключі повинні бути рядками (тобто послідовність символів, укладена у подвійні лапки ").
  • Значення можуть бути будь-якими:
    • рядок
    • число
    • об’єкт (JSON)
    • масив
    • true
    • false
    • null
  • Дублюючі клавіші ( {"foo":"bar","foo":"baz"}) дають невизначені результати, що стосуються впровадження; специфікація JSON конкретно не визначає їх семантику

У JavaScript можуть бути об'єктні літерали

  • Рядок літералів, літералів чисел або ідентифікаторів імен як ключів (оскільки ES6, тепер можна також обчислити ключі, що вводить ще один синтаксис).
  • Значення можуть бути будь-яким дійсним виразом JavaScript, включаючи визначення функцій та undefined.
  • Дублюючі ключі дають задані, задані результати (у вільному режимі останнє визначення замінює перший; у суворому режимі - це помилка).

Знаючи, що, дивлячись на синтаксис , ваш приклад - це не JSON з двох причин:

  1. Ваші ключі не є рядками (буквальними). Вони є іменами ідентифікаторів .
  2. Ви не можете призначити функцію як значення об’єкту JSON (оскільки JSON не визначає жодного синтаксису для функцій).

Але найголовніше - повторити моє пояснення з самого початку: Ви перебуваєте в контексті JavaScript. Ви визначаєте об’єкт JavaScript. Якщо такий є, "об'єкт JSON" може міститися лише в рядку:

 var obj = {foo: 42}; // creates a JavaScript object (this is *not* JSON)
 var json = '{"foo": 452}'; // creates a string containing JSON

Тобто, якщо ви пишете вихідний код JavaScript і не маєте справу з рядком , ви не маєте справу з JSON. Можливо, ви отримали дані як JSON (наприклад, через ajax або читання з файлу), але коли ви або бібліотека, яку ви використовуєте, проаналізували їх, це вже не JSON.


Тільки тому, що об'єктивні літерали та JSON виглядають схоже , це не означає, що ви можете їх називати взаємозамінними. Дивіться також. Немає такого поняття, як "Об'єкт JSON" .


8
Також зауважте, що JSON - це підмножина буквеної нотації об’єкта
Шон Кінсі,

14
@SeanKinsey: За винятком того, що це не так: timelessrepo.com/json-isnt-a-javascript-subset
квітня 1313

1
Можливо, варто відзначити, що зазвичай ви очікуєте прямого об’єкта JavaScript в контексті, коли коментарі є законними, а специфікація JSON не дозволяє коментувати (див. Цю публікацію .
Brian Henry,

клавіші в об'єктному літералі - це завжди рядки, незважаючи на те, що ви використовуєте "" чи ні.
переобмін

2
@overexchange: "клавіші в об'єктному літералі - це завжди рядки" Ви тут змішуєте дві речі, але я не можу вас звинувачувати, тому що я також не намалював чітку межу. Ви повинні розрізняти буквене об'єктне значення і значення об'єкта . Буквальним є послідовність символів , ви пишете в вихідному коді. Значення є те , що створюється шляхом інтерпретації вихідного коду. Об'єктний літерал (синтаксис) дозволяє використовувати ідентифікатори імена , рядкові літерали чи літерали чисел . Ви впевнені, що під час виконання всі вони перетворюються на рядки (але зараз у нас є символи).
Фелікс Клінг

41

JSON має набагато обмежений синтаксис, включаючи:

  • Ключові значення повинні бути цитовані
  • Рядки повинні бути цитовані з, "а не'
  • У вас обмежений діапазон значень (наприклад, заборонені функції)

1
Сподобалось це "жодна функція не дозволена".
Каран Кау

Коментарі також заборонені. З сумнівних причин. (Чула, що їх допитували кілька разів.) Це головна відмінність, яку я скажу
user7610

15

Дійсно немає такого поняття, як "Об'єкт JSON".

Специфікація JSON - це синтаксис для кодування даних у вигляді рядка. Те, що люди називають "Об'єктом JSON" (у JavaScript) - це просто звичайний об'єкт JavaScript, який (мабуть) був десеризований з дійсної рядка JSON і може бути легко повторно серіалізований як дійсний рядок JSON. Це загалом означає, що він містить лише дані (а не функції). Це також означає, що немає дат, оскільки JSON не має типу дати (можливо, це найбільш болісно про JSON;)

Крім того, (бічні рейки ...), коли люди говорять про "об'єкт JSON", вони майже завжди мають на увазі дані, які мають "фігурні дужки" на верхньому рівні. Це добре відповідає об’єкту javascript. Однак специфікація JSON не вимагає, щоб на самому верхньому рівні рядка JSON був один об'єкт "фігурних дужок". Цілком справедливо JSON мати список на найвищому рівні або навіть мати лише одне значення. Отже, хоча кожному "Об'єкту JSON" відповідає дійсний JSON, не всі дійсні рядки JSON відповідають тому, що ми би назвали "Об'єктом JSON"! (тому що рядок може представляти список або атомне значення)


5
У вашій відповіді є помилка: неправильний JSON має атомне значення на верхньому рівні. JSON дозволяє вершині бути об'єктом або масивом, але нічого іншого. RFC4627 , стандарт, описує граматику JSON як JSON-text = object / array.
Rory O'Kane

9

Згідно JSON в JavaScript ,

JSON - це підмножина об'єктного буквального позначення JavaScript.

Іншими словами, дійсний JSON також є дійсним позначенням об'єкта JavaScript, але не обов'язково навпаки.

На додаток до читання документації , як запропонував @Filix King, я пропоную також пограти з онлайн-валідатором JSONLint JSONLint . Ось так я дізнався, що ключі об’єктів JSON повинні бути рядками.


2
Зауважимо: це не точний підмножина , є деякі рядки JSON, які були недійсними як літерали об'єктів JS
Бергі

5

🔫 JSON : Нежирна альтернатива XML

JSON широко прийняли люди, які виявили, що це значно спростило виробництво розподілених додатків та послуг. Офіційним типом Інтернет-ЗМІ для JSON є application/json RFC 4627. Назви файлів JSON використовують розширення .json.


► JavaScript Object Notation ( JSON) - це легкий, текстовий, незалежний від мови формат обміну даними. JSON використовувався для обміну даними між програмами, написаними будь-якою мовою програмування.

Об'єкт JSON - це єдиний об'єкт, який містить дві функції, розбір та строфікацію, які використовуються для розбору та побудови текстів JSON.

  • JSON.stringify створює рядок, який відповідає наведеній нижче граматиці JSON.
  • JSON.parse приймає рядок, який відповідає граматиці JSON.

Метод parseJSON буде включений у Fourth Edition of ECMAScript. Тим часом реалізація JavaScript доступна на json.org.

var objLiteral = {foo: 42}; // JavaScript Object
console.log('Object Literal : ', objLiteral ); // Object {foo: 42}foo: 42__proto__: Object

// This is a JSON String, like what you'd get back from an AJAX request.
var jsonString = '{"foo": 452}';
console.log('JOSN String : ', jsonString ); // {"foo": 452}

// This is how you deserialize that JSON String into an Object.
var serverResposnceObject = JSON.parse( jsonString );
console.log('Converting Ajax response to JavaScript Object : ', serverResposnceObject); // Object {foo: 42}foo: 42 __proto__: Object

// And this is how you serialize an Object into a JSON String.
var serverRequestJSON = JSON.stringify( objLiteral );
console.log('Reqesting server with JSON Data : ', serverRequestJSON); // '{"foo": 452}'

JSON - це підмножина JavaScript. Javascript отриманий із стандарту мови програмування ECMAScript.


► ECMAScript

ECMAScript став однією з найбільш широко використовуваних у світі мов програмування загального призначення. Він найбільш відомий як мова, вбудований у веб-браузери, але також широко застосовується для серверних та вбудованих додатків. ECMAScript базується на декількох оригінальних технологіях, найбільш відомими JavaScript(Netscape Communications)) та JScript(Microsoft Corporation) . Хоча до 1994 року ECMA була відома як "Європейська асоціація виробників комп'ютерів", після 1994 року, коли організація стала глобальною, "торгова марка" "Ecma" зберігалася з історичних причин.

ECMAScript - це мова, тоді як JavaScript, JScript і навіть ActionScript називаються "Dialects".

Діалекти походять з тієї ж мови. Вони досить схожі між собою, оскільки були похідні від однієї мови, але зазнали певних змін. Діалект - це варіація самої мови. Він походить від однієї мови.

  • Мова SQL - Hibernate MySQL Dialect, Oracle Dialect, .. які мають деякі зміни або додали функціональність.

Інформація про браузер та комп'ютер ваших користувачів.

navigator.appName // "Netscape"

ECMAScript - це сценарна мова, яка є основою JavaScript. .JavaScript language resources

ECMA-262 Links
Initial Edition, June 1997 PDF.
2nd Edition, August 1998 PDF.
3rd Edition, December 1999 PDF.
5th Edition, December 2009 PDF.
5.1 Edition, June 2011 HTML.
6th Edition, June 2015 HTML.
7ᵗʰ Edition, June 2016 HTML.
8th edition, June 2017 HTML.
9th Edition, 2018 HTML.

ПРИМІТКА « 4-е видання ECMAScript не опубліковане, оскільки робота була неповною .


JSON визначає невеликий набір правил форматування для портативного подання структурованих даних.

  1. ► Ключові значення повинні бути цитовані, для ключів допускаються лише рядки. Якщо ви використовуєте іншу, ніж String, вона перетвориться на String. Але не рекомендується використовувати інші клавіші, ніж String. Перевірте такий приклад - { 'key':'val' }понадRFC 4627 - jsonformatter

    var storage = {
      0 : null,
      1 : "Hello"
    };
    console.log( storage[1] ); // Hello
    console.log( JSON.stringify( storage ) ); // {"0":null,"1":"Hello","2":"world!"}
    
    var objLiteral = {'key1':'val1'};
        var arr = [10, 20], arr2 = [ 'Yash', 'Sam' ];
        var obj = { k: 'v' }, obj2 = { k2: 'v2' };
        var fun = function keyFun() {} ;
    
    objLiteral[ arr ] = 'ArrayVal';     objLiteral[ arr2 ] = 'OverridenArrayVal';
    objLiteral[ obj ] = 'ObjectVal';    objLiteral[ obj2 ] = 'OverridenObjectVal';
    objLiteral[ fun ] = 'FunctionVal';
    
    console.log( objLiteral );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    console.log( JSON.stringify( objLiteral ) );
    // {"key1":"val1","10,20":"ArrayVal","Yash,Sam":"OverridenArrayVal","[object Object]":"OverridenObjectVal","function keyFun() {}":"FunctionVal"}
    console.log( JSON.parse( JSON.stringify( objLiteral ) ) );
    // Object {key1: "val1", 10,20: "ArrayVal", Yash,Sam: "OverridenArrayVal", [object Object]: "OverridenObjectVal", function keyFun() {}: "FunctionVal"}
    
    console.log('Accessing Array  Val : ', objLiteral[ [10,20] ] );
    console.log('Accessing Object Val : ', objLiteral[ '[object Object]' ] );
    console.log('Accessing Function Val : ', objLiteral[ 'function keyFun() {}' ] );
  2. ► Рядки JSON повинні бути котировані "а не". Рядок дуже схожий на рядок C або Java. Струни повинні бути загорнуті у подвійні лапки.

    • Літерали - це фіксовані значення, а не змінні, які ви буквально надаєте у своєму сценарії.
    • Рядок - це послідовність нульових або більше символів, загорнутих у лапки із зворотним косою рисою, те саме позначення, яке використовується у більшості мов програмування.
      • 🔫 - Спеціальні символи дозволені в рядку, але їх не рекомендується використовувати.
      • \ "- Спеціальних символів можна уникнути. Але не рекомендується бігти (') Одиночні котирування. У суворому режимі він кине і помилка - SyntaxError: Unexpected token ' in JSON

    Перевірте цей код { "Hai\" \n Team 🔫":5, "Bye \'": 7 }за допомогою онлайн-видань JSON.ModesnotStrict,Strinct.

    var jsonString = "{'foo': 452}"; // {'foo': 452}
    var jsonStr = '{"foo": 452}'; // {"foo": 452}
    
    JSON.parse( jsonString ); // Unexpected token ' in JSON at position 1(…)
    JSON.parse( jsonStr ); // Object {foo: 452}
    
    objLiteral['key'] = 'val'; // Object {foo: 42, key: "val"}
    objLiteral.key2 = 'val';
    
    // objLiteral.key\n3 - SyntaxError: Invalid or unexpected token
    objLiteral['key\n3'] = 'val'; // Object {"foo": "42", key: "val", key2: "val", "key↵3": "val"}
    
    JSON.stringify( objLiteral ); // {"foo":"42","key":"val","key2":"val","key\n3":"val"}

Об'єкт аксессор власності забезпечують доступ до властивостей об'єкта за допомогою точкового нотації або брекета позначення.

  1. ► У вас обмежений діапазон значень (наприклад, заборонені функції). Значенням може бути рядок у подвійних лапки, число, булеве значення, null, об'єкт або масив. Ці структури можуть вкладатись.

    var objLiteral = {};
    objLiteral.funKey = function sayHello() {
        console.log('Object Key with function as value - Its outcome message.');
    };
    
    objLiteral['Key'] = 'Val';
    
    console.log('Object Literal Fun : ', objLiteral );
    // Object Literal Fun :  Object {Key: "Val"}Key: "Val"funKey: sayHello()__proto__: Object
    console.log( JSON.stringify( objLiteral ) ); // {"Key":"Val"}

введіть тут опис зображення


JavaScript- найпопулярніша реалізація стандарту ECMAScript. Основні особливості Javascript засновані на стандарті ECMAScript, але Javascript також має інші додаткові функції, які не входять до специфікацій / стандарту ECMA. У кожному браузері є інтерпретатор JavaScript.

JavaScript - це динамічно набрана мова. Це означає, що вам не потрібно вказувати тип даних змінної, коли ви її оголошуєте, а типи даних перетворюються автоматично за необхідності під час виконання сценарію.

Literals :

'37' - 7    // 30
'37' + 7    // "377"
+'37' + 7   // 44
+'37'       // 37
'37'        // "37"

parseInt('37');     // 37
parseInt('3.7');    // 3

parseFloat(3.7);    // 3.7

// An alternative method of retrieving a number from a string is with the + (unary plus) operator:
+'3.7'              // 3.7

Object literals RFC 7159

Структура об'єкта представлена ​​у вигляді пари фігурних дужок, що оточують нуль або більше пар імен / значень (або членів). Ім'я - це рядок. Одинарна двокрапка надходить після кожного імені, відокремлюючи ім'я від значення. Одинарна кома відокремлює значення від наступного імені. Імена в межах об’єкта ДОЛЖНІ бути унікальними.

ECMAScript підтримує успадкування на основі прототипу. Кожен конструктор має пов'язаний прототип, і кожен об'єкт, створений цим конструктором, має неявну посилання на прототип (називається прототипом об'єкта), пов'язаний з його конструктором. Крім того, прототип може мати ненульове неявне посилання на його прототип тощо; це називається ланцюгом прототипу.

У об'єктно-орієнтованій мові, що базується на класі, загалом стан переноситься екземплярами, методи переносяться класами, а успадкування - лише структурою та поведінкою. У ECMAScript стан та методи переносяться об'єктами, а структура, поведінка та стан успадковуються.

Прототип - це об'єкт, який використовується для реалізації спадкування структури, стану та поведінки в ECMAScript. Коли конструктор створює об'єкт, цей об'єкт неявно посилається на пов'язаний прототип конструктора з метою вирішення посилань на властивості. Асоційований прототип конструктора може посилатися на програмний вираз constructor.prototype, а властивості, додані до прототипу об'єкта, дістаються шляхом успадкування всіма об'єктами, що поділяють прототип.


2

Для тих, хто все ще вважає, що RFC важливіше, ніж блоги та помилкові уявлення, спробуємо відповісти, уточнюючи деякі моменти. Я не збираюся повторювати всі правильні відмінності, про які вже говорилося в попередніх відповідях, тут я просто намагаюся додати значення, узагальнюючи якусь важливу частину rfc7159

Виписки з https://tools.ietf.org/html/rfc7159

  1. JavaScript Object Notation (JSON) - це текстовий формат для серіалізації структурованих даних. Він походить від об'єктних літералів JavaScript, як визначено в стандартній мові програмування ECMAScript, Третє видання [ECMA-262].
  2. JSON може представляти чотири примітивні типи (рядки, числа, булеві і нульові) та два структуровані типи ( об'єкти та масиви).
  3. Об'єкт являє собою невпорядкований набір з нуля або більше пар ім'я / значення, де ім'я являє собою рядок і значення є рядок, число, логічне значення, нульовий об'єкт , або масив.
  4. begin-object = ws% x7B ws; {ліва фігурна дужка
  5. end-object = ws% x7D ws; } правий фігурний кронштейн
  6. Значення JSON ОБОВ'ЯЗКОВО має бути об'єктом , масивом, числом або рядком або одним із наступних трьох буквальних імен: false null true
  7. Об'єкт структура представлена у вигляді пари фігурних дужок
  8. Імена в межах об’єкта ДОЛЖНІ бути унікальними. object = begin-object [member * (член-роздільник значень)] end-object
  9. Об'єкт , чиї імена є унікальним поєднає в тому сенсі , що всі програмні реалізації , які отримують цей об'єкт погоджуватимуть відображення імені-значення. Коли імена всередині об'єкта не є унікальними, поведінка програмного забезпечення, яке отримує такий об'єкт, є непередбачуваним.
  10. Приклади (зі сторінки 12 RFC)

    Це об’єкт JSON:

          {
            "Image": {
                "Width":  800,
                "Height": 600,
                "Title":  "View from 15th Floor",
                "Thumbnail": {
                    "Url":    "http://www.example.com/image/481989943",
                    "Height": 125,
                    "Width":  100
                },
                "Animated" : false,
                "IDs": [116, 943, 234, 38793]
              }
          }

    Його член зображення є об'єктом якого мініатюрного елемент являє собою об'єкт і член його ID - це масив чисел.

Дійсно немає такого поняття, як "Об'єкт JSON".

Дійсно?


1
Даві, це не а Object, це String. Спасибі
abu abu

1

Наскільки я розумію, головна відмінність - це гнучкість .

JSON - це своєрідна обгортка "Нотації об'єктів JavaScript", яка змушує користувачів дотримуватися більш суворих правил визначення об'єктів. І це робиться, обмежуючи можливі способи декларування об'єкта, передбачені функцією JavaScript Object Notation.

В результаті у нас є більш прості та стандартизовані об'єкти, які краще підходять для обміну даними між платформами.

Таким чином, newObject у моєму прикладі вище - це об'єкт, визначений за допомогою JavaScript Obrect Notation; але це не "дійсний" об'єкт JSON, оскільки він не відповідає правилам, яких вимагають стандарти JSON.

Це посилання також дуже корисно: http://msdn.microsoft.com/en-us/library/bb299886.aspx


2
Компонент JSON та позначення об'єктів зовсім відрізняються: перший використовується лише для обміну даними, а другий - для створення JS-об'єктів лише для внутрішнього використання. Вони не більш і менш суворі версії одного і того ж.
ilyo

0

Спочатку слід знати, що таке JSON:

Це формат обміну даними мовної агностики. Синтаксис JSON був натхненний нотацією JavaScript Object Literal, але між ними існують відмінності.

Наприклад, у JSON повинні бути цитовані всі ключі, тоді як в об'єктних літералах це не обов'язково:

// JSON: {"foo": "bar"}

// Об'єкт буквальний: var o = {foo: "bar"}; Лапки в JSON є обов'язковими, оскільки в JavaScript (точніше в ECMAScript 3rd. Edition) використання зарезервованих слів як імен властивостей заборонено, наприклад:

var o = {if: "foo"}; // SyntaxError в ES3 Хоча використання літерального рядка як імені властивості (цитування імені властивості) не створює проблем:

var o = {"if": "foo"}; Тож для "сумісності" (а може бути легкої еваляції?) Цитати є обов'язковими.

Типи даних у JSON також обмежені такими значеннями:

рядковий масив масиву об'єктів Буквальний як: true false null Граматика Strings змінюється. Вони повинні бути розмежовані подвійними лапками, тоді як у JavaScript ви можете використовувати одинарні чи подвійні лапки взаємозамінно.

// Недійсний JSON: {"foo": 'bar'} Прийнята граматика цифр JSON також змінюється. У JavaScript ви можете використовувати шістнадцяткові літерали, наприклад 0xFF, або (сумнозвісні) восьмеричні літерали, наприклад 010. У JSON ви можете використовувати лише десяткові літерали.

// Недійсний JSON: {"foo": 0xFF}


0

Лінійний об’єкт Javascript проти JSON:

  • Об'єктний буквальний синтаксис - дуже зручний спосіб створення об’єктів javascript
  • JSONМова, який означає «об'єктів JavaScript», має свій синтаксис , отриманий з об'єктів JavaScript буквального синтаксису. Він використовується як незалежний від мови програмування формат передачі текстуальних даних.

Приклад:

Позначення об'єктів JS, яке використовується в JS для зручного створення об'єктів у коді:

const JS_Object = {
  1: 2,  // the key here is the number 1, the value is the number 2
  a: 'b', // the key is the string a, the value is the string b
  func: function () { console.log('hi') }
  // the key is func, the value is the function
}

Приклад JSON:

{"widget": {
    "debug": "on",
    "window": {
        "title": "Sample Konfabulator Widget",
        "name": "main_window",
        "width": 500,
        "height": 500
    },
    "image": { 
        "src": "Images/Sun.png",
        "name": "sun1",
        "hOffset": 250,
        "vOffset": 250,
        "alignment": "center"
    },
    "text": {
        "data": "Click Here",
        "size": 36,
        "style": "bold",
        "name": "text1",
        "hOffset": 250,
        "vOffset": 100,
        "alignment": "center",
        "onMouseUp": "sun1.opacity = (sun1.opacity / 100) * 90;"
    }
}}

Основні відмінності:

  • Усі об'єктивні ключі в JSON повинні бути рядками. У об'єктному Javascript клавішами можуть бути рядки чи цифри

  • Усі рядки в JSON повинні бути наведені у "подвійних лапках". Тоді як у Javascript дозволені як одиничні, так і подвійні лапки. Навіть при відсутності лапок в нотації об'єкта Javascript, клавіші об'єкта неявно відводяться до рядків.

  • У JSON функцію не можна визначити як значення об'єкта (оскільки це специфічно для Javascript). У Javascript це повністю законно.

Вбудований Javascript в JSONоб'єкт:

JSONОб'єкти можна легко перетворити на Javascript і навпаки, використовуючи вбудований JSONоб'єкт, який Javascript пропонує під час його виконання. Наприклад:

const Object = {
  property1: true,
  property2: false,
}; // creating object with JS object literal syntax

const JSON_object = JSON.stringify(Object);  // stringify JS object to a JSON string

console.log(JSON_object); // note that the (string) keys are in double quotes

const JS_object = JSON.parse(JSON_object);  // parse JSON string to JS object

console.log(JS_object.property1, JS_object.property2); 
// accessing keys of the newly created object


0

Ось одна дивовижна відмінність: ви не можете використовувати undefinedв json, і всі об'єктні поля з невизначеними значеннями зникнуть післяJSON.stringify

let object =  { "a": undefined } ;

let badJSON= '{ "a": undefined }';


console.log('valid JS object :', object );
console.log('JSON from object:', JSON.stringify(object) );
console.log('invalid json    :', JSON.parse(badJSON) );

🙈🙉🙊

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.