Q:

can I delete an attribute which configurable is false? 

if I set an attribute with configurable: false, can I change or delete it any more?  Just like below:  
var a = {
test: {
// there are some function
}
}
Object.defineProperty(a, 'test', {configurable: false, value: null})

I want to do something like this a.test.b = '1'again, but now test is null and no-configurable. 
Maybe this question is boring, but I just don't want to get something cannot be changed or used with js code. 
I have try to redefined: Object.defineProperty(a, 'test', {configurable: true, value: {}})
or want to make a new 'test' with delete a.test
nothing worked. 
Object.defineProperty(a, 'test', {configurable: false, value: null});
delete a.test; // error
a.test; // null, and I want it be {} with some code. 

Object.defineProperty(a, 'test', {configurable: false, value: null});
// there is some code to make sure below code right. 
a.test.b = 1

A:

You can't delete the property, but if you use writable: true, you will be able to reassign it:

'use strict';
var a = {
  test: {
    b: 'x'
  }
}
Object.defineProperty(a, 'test', {
  configurable: false,
  writable: true,
  value: null
})
a.test = {
  b: 'foo'
};
console.log(a.test.b);

(writable defaults to false, so you have to explicitly pass writable: true for the descriptor)
configurable: false means that the property descriptor can't be changed from a data descriptor to an accessor descriptor (or vice versa), nor can the property be removed from the object, but that doesn't prevent you from changing the actual value of the property, if the descriptor is writable.