JavaScript: как консоли браузера отображают значения ключей объекта - PullRequest
0 голосов
/ 19 сентября 2018

С консоли Chrome:

> myParam = {"test": "test value"}    
> myFunc = function(x) { myParam[x] = x; }

> myFunc("func value")
> myParam
{test: "test value", func value: "func value"} // (a) question

> myFunc(2)
> myParam
{2: 2, test: "test value", func value: "func value"}

> myFunc()
> myParam
{2: 2, test: "test value", func value: "func value", undefined: undefined} // (b) question

это последняя версия Chrome на сегодняшний день (69.0.3497.100) enter image description here
Пожалуйста, объясните, как, в JavaScript

a) может быть создан элемент объекта, содержащий пробелы («значение myParam.func»)
b) может быть создан «неопределенный» элемент объекта («myParam.undefined»)
c) дляслучай (b), действительно ли "undefined" действительно "undefined" или просто строка "undefined"?


PS. Благодаря замечанию @ ryanpcmcquen, следующий PSenter image description here


PPS. Не могли бы вы подтвердить мое предположение, что это Google Chrome v (69.0.3497.100) ошибка отображения консоли если строки не отображаются в виде строк , «между скобками» и красным цветом?


PPS.
Только Firefox , кажется, правильно отображает строковые клавиши:

Chrome, Opera
enter image description here
Firefox
enter image description here
Edge
enter image description here
MS IE
enter image description here

Ответы [ 4 ]

0 голосов
/ 19 сентября 2018

Позволяет ответить на ваши вопросы.

a) можно создать элемент-объект, содержащий пробелы («значение myParam.func»)

const myParam = {}
myParam["func value"] = 'serge';
console.log(myParam)

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

b) можно создать «неопределенный» член объекта («myParam.undefined»)

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

const myParam = {};
myParam.undefiend = 'serge';
console.log(myParam)

c) для случая (b), действительно ли "undefined" действительно "undefined" или просто строка "undefined"?

Я думаю, это строка "undefined"

0 голосов
/ 19 сентября 2018

Учитывая объект foo:

var foo = {};

a) может быть создан элемент объекта, содержащий пробелы ("myParam.func value")

// You have to use square bracket notation when
// declaring properties with spaces.
foo['func value'] = 'Whatever you want.';

b) может быть создан«неопределенный» член объекта («myParam.undefined»)

// Keyword undefined:
foo[undefined] = undefined;
// String 'undefined':
foo['undefined'] = 'undefined';

c) для случая (b), действительно ли «undefined» действительно «undefined» или просто строка «undefined»?

Зависит от того, как вы это определяете.На скриншоте это ключевое слово undefined для значения свойства и строка 'undefined' для ключа.

Чтобы проверить типы внутри вашего объекта, вы можете запустить:

Object.keys(foo).map(key => typeof key);
Object.values(foo).map(value => typeof value);
0 голосов
/ 19 сентября 2018

Это одна из красот JavaScript.

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

var a = {
  'my key': 'my key'
  yourKey: 'your key'
}
a['my key'];
a.yourKey

b) В JavaScript undefined - это тип данных, поэтому вполне допустимо иметь переменнуючье значение не определено

в) Это действительно не определено.Подробнее здесь: https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/undefined

0 голосов
/ 19 сентября 2018

Ответьте за c "undefined" обычно по направлению к "null" значению, вы можете console.log (null) и найти undefined

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