Почему {.,,.0} оценивать как {}? - PullRequest
0 голосов
/ 25 декабря 2018

Я только что нашел {....0} в коде друга.Оценка в консоли возвращает {} (пустой объект).

Почему это так?Что означает 4 точки в JavaScript?

Ответы [ 4 ]

0 голосов
/ 05 января 2019

Оператор распространения {...} позволяет расширять итерации.Это означает, что те типы данных, которые могут быть определены в виде пар key-value, могут быть расширены.С точки зрения Object мы называем пару ключ-значение как свойство объекта и его значение, тогда как с точки зрения arrays мы можем рассматривать индекс как ключ, а элемент массива - как его значение.

let obj = { a: 4, b: 1};
let obj2 = { ...obj, c: 2, d: 4}; // {a: 4, b: 1, c: 2, d: 4}

let arr1 = ['1', '2'];
let obj3 = { ...arr1, ...['3']}; // {0: "3", 1: "2"}

В терминах массива, поскольку он принимает индекс в качестве ключа, здесь он заменяет элемент '1' из arr1 на '3', поскольку оба они имеют одинаковый индекс в другом массиве.

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

let obj4 = {...'hi',...'hello'}   // {0: "h", 1: "e", 2: "l", 3: "l", 4: "o"}
let obj5 = {...'y',...'x'}   // {0: "x" }

Но с другими примитивными типами данных она возвращает пустой объект

с числами

let obj6 = { ...0.0, ...55} // {}

с логическим значением

let obj7 = { ...true, ...false} // {}

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

0 голосов
/ 25 декабря 2018

Три точки в литерале объекта являются свойством распространения , например:

  const a = { b: 1, c: 1 };
  const d = { ...a, e: 1 }; // { b: 1, c: 1, e: 1 }

Последняя точка с 0 является литералом числа .0 и 0.0.Поэтому это:

 { ...(0.0) }

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

0 голосов
/ 26 декабря 2018

Проще говоря, {...} оператор распространения в javascript расширяет один объект / массив другим.

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

В случае array он повторяется по элементам.

В случае object он повторяется по ключам.

В этом сценарии babelyfierпытается извлечь ключи для number, проверяя own property call объекта, который отсутствует для number, поэтому он возвращает пустой объект.

0 голосов
/ 25 декабря 2018

Четыре точки на самом деле не имеют смысла.... является оператором распространения , а .0 - это сокращение 0.0.

Выкладывание 0 (или любого числа) в объект приводит к пустому объекту, поэтому {}.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...