Q:

borrar un atributo de un objeto

Tengo definido un objeto vació (array asociativo)
obj = {}

si trato de consultar algun parametro este me devolverá undefined al estar vació.
>> console.log(obj.id)
undefined

ahora asigno un valor a id
>> obj.id = 123
>> console.log(obj.id)
123

supongamos que quiero borrar el atributo id cual de estos 2 es mas conveniente
obj.id = undefined

ó
delete obj.id

cuando consulte el atributo independiente de cual haya usado devolvera undefined pero si hago console.log() de solo el objeto tengo algo diferente:
Para el primer caso:
>> console.log(obj)
{id: undefined}

En cambio para el segundo caso:
>> console.log(obj)
{}

Cual es la mejor, existe otra alternativa.

A:

En éste mundo de la programación no es que una cosa sea mejor que otra si no la que más se adecue a tus necesidades
Usar delete es muuuuy lento y puede afectarte en el performance de tu aplicación si borras miles y miles de propiedades, pero ¿realmente vas a borrar tantas propiedades? si borras algunas probablemente se haga mas lenta tu aplicación unos 200 milisegundo cosa que nadie va a notar, sin embargo si vas a guardar tus objetos en una base de datos no ralacional o simplemente tienes que mandar objetos al servidor y los usuarios tienen conexiones lentas es mejor perder unos milisegundos borrando propiedades; he trabajado con redes satelitales y es un dolor de cabeza mandar cosas grandes por request.
Ponerlo a undefined es mas rápido pero tendras un monton de basura arrastrando, que si no te afecta no habra ningun problema.
Te dejo un benchmark donde puedes ver que en un segundo pusieron en un defined 296,204,746 objetos y sólo 10,851,554 con delete (aprox)
Asi que usa la que más te acomode o con la que puedas tener un código más limpio y legible para que el mantenimiento sea mas efeciente.

A:

para Borrar un Objeto de javascript debes usar la palabra delete

let obj = {
  id : 2 , 
  nombre : "el nombre"
    };
obj.nombre = undefined;
delete obj.id;
console.log(obj.id !== "undefined")// no declarado
console.log(obj.nombre !== "undefined")//  declarado sin valor
//para ver si existe en el objeto
console.log('id' in obj); 
console.log('nombre' in obj); 
console.log(obj);

realizar el comando obj.id = undefined es para inicializar la variable.Si quieres enviar el JSON sin el valor id debes usar delete, caso contrario si quieres llenar un formulario con valores iniciales, estas obligado a enviar el valor a tu Backend debes declarar la variables como lo muestras
En el ejemplo se visualiza que de las dos formas es indefinido pero cuando consultas si existe el elemento en el objeto existe y te lo imprime

A:

Para borrar una propiedad de un objeto en JavaScript usa el operador delete ya que asignar el valor undefined no la borra.
La ventaja es que delete borra la propiedad y por ende se libera memoria y al recorrer las propiedades del objeto se hace más rápido.
Referencia

https://developer.mozilla.org/es/docs/Web/JavaScript/Referencia/Operadores/delete

