Дескриптор JavaScript

364
15 декабря 2017, 05:02

Здравствуйте, помогите разобраться со следующим:

На MDN указано,что атрибуты writable, enumerable, configurable по умолчанию false;

Но почему тогда:

var person = {name};
console.log(Object.getOwnPropertyDescriptor(person,'name'));
19:20:38.695 VM130:2 {value: "", writable: true, enumerable: true, configurable: true}
Answer 1

Если создавать свойство через defineProperty, оно получит именно те атрибуты, которые указаны по умолчанию:

var person = {};
Object.defineProperty(person, 'name', {});
console.log(Object.getOwnPropertyDescriptor(person,'name'));
> {value: undefined, writable: false, enumerable: false, configurable: false}

В стандарте ECMA 262 пункт 11.1.5 есть описание, когда в каких случаях какие атрибуты ставятся; в частности:

The production PropertyAssignment : PropertyName : AssignmentExpression is evaluated as follows:
Let propName be the result of evaluating PropertyName. 
Let exprValue be the result of evaluating AssignmentExpression. 
Let propValue be GetValue(exprValue). 
Let desc be the Property Descriptor{
    [[Value]]: propValue, 
    [[Writable]]: true, 
    [[Enumerable]]: true, 
    [[Configurable]]: true
}
Return Property Identifier (propName, desc).
READ ALSO
Зачем промисы в js?

Зачем промисы в js?

Я просто никак не могу понять их смысла

294
Разные версии перевода Google translate API

Разные версии перевода Google translate API

Пишу приложение на Nodejs, использую гугл переводчик для перевода отдельных словСкажите пожалуйста, можно ли в Google translate API получить разные варианты...

306
Как правильно использовать requestAnimationFrame()

Как правильно использовать requestAnimationFrame()

Гугл советует использовать requestAnimationFrame() для внесения визуальных измененийДопустим, у меня есть следующий код:

256