Почему настраивается: false позволяет изменить флаг записи, но не для перечислимого - PullRequest
0 голосов
/ 19 октября 2018

Я пишу программу javascript, чтобы понять, как настраиваемый флаг, установленный в false, влияет на свойство.Программа выглядит так:

let user={
    name:"heman"
};
Object.defineProperty(user, "name",{
    configurable:false
});
try{
    Object.defineProperty(user, "name",{
    configurable:true
    })
}//Throws error
catch(err){console.log(err)}
try{
    Object.defineProperty(user, "name",{
    enumerable:false
    });
} //Throws Error
catch(err){console.log(err)}

try{
    Object.defineProperty(user, "name", {
    writable:false
    });
} //Does'nt Throws Error. But Why?
catch(err){console.log(err)}

В этой программе я впервые создал объект с именем user, user содержит одно свойство, т. е. name: "heman".Я установил настраиваемый флаг свойства name в false (настраиваемый: false).Затем я снова попытался изменить настраиваемый флаг на true. Это вызвало ошибку.После того, как я попытался изменить перечисляемый флаг на false, который противоположен его значению по умолчанию, он снова выдал ошибку.На этот раз, когда я попытался изменить флаг записи на false.Флаг изменился без каких-либо ошибок.Даже после установки для настраиваемого флага значения false, почему свойство все еще настраивается?Почему изменяемый флаг изменился без каких-либо ошибок.Я хочу знать, что происходит В следующих двух случаях:

1) для настраиваемого флага установлено значение true

2) для настраиваемого флага установлено значение false

1 Ответ

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

Почему флаг записи изменялся без каких-либо ошибок.

Поскольку спецификация позволяет изменять флаг writable для свойства данных с true на false, даже еслиconfigurable свойство объекта false.К сожалению, спецификация не слишком хороша для того, чтобы сказать , почему вещи такие, какие они есть, но обычно очень точно говорят о , чем они являются.: -)

Я хочу знать, что происходит В следующих двух случаях:

Лучше всего вам прочитать шаги спецификации для операции .

1) для настраиваемого флага установлено значение true

В этом случае вы можете изменить writable с false на true или с *От 1031 * до false;свойство полностью настраивается.

2) настраиваемый флаг имеет значение false

Спецификация позволяет изменять флаг writable для свойства данных с true наfalse, но не от false до true.

...