Почему настраивается: false позволяет изменить флаг записи, но не для перечислимого

1

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

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

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

Теги:
ecmascript-6
browser
ecmascript-5

1 ответ

1
Лучший ответ

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

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

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

Лучше всего прочитать инструкции по выполнению операции.

1) настраиваемый флаг установлен в true

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

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

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

  • 0
    Я хочу снять сомнения. Я знаю, что мы говорим, что записываемые, перечислимые и настраиваемые являются флагами. Но можем ли мы сказать, что значение также является флагом
  • 1
    @ user9218974 - Нет, флаги являются значениями true / false.
Показать ещё 3 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню