Cuando recuperamos el descriptor de un tipo primitivo como el ejemplo debajo de este párrafo, especificamos un número entero como el objeto (que también se convierte en el valor de la propiedad) y también especificamos la clave, que es '0'. Ahora bien, debido a que especificamos un número entero como clave, ¿significaría esto que a partir de ES2015 en adelante, el tipo primitivo se considera una matriz?
var e = Object.getOwnPropertyDescriptor([50], 0);valor de 'var e':
{ configurable: false, enumerable: true, value: 50, writable: false }O en el siguiente ejemplo, pasamos un valor de cadena:
var e = Object.getOwnPropertyDescriptor("hello", 0);Lo que produce resultados algo diferentes:
configurable: false enumerable: true value: "h" writable: falseAhora, si pasamos una cadena, también se trata como una matriz. Pero parece que solo el primer carácter se conserva como valor. ¿Por qué sucede esto también?
Cuando tratamos de obtener el descriptor de las primitivas, primero se convierten a una forma de objeto según la especificación :
20.1.2.8 Objeto.getOwnPropertyDescriptor ( O, P )
Cuando se llama a la función getOwnPropertyDescriptor, se toman los siguientes pasos:
- Sea obj ? AObjeto(O).
- ¿Dejar que la clave sea? AClaveDePropiedad(P).
- ¿Será desc? obj.[GetOwnProperty].
- Devolver FromPropertyDescriptor(desc).
por lo tanto, cualquier información que obtengamos de Object.getOwnPropertyDescriptor no nos dirá nada sobre la primitiva en sí, solo nos dice algo sobre las propiedades del objeto que sale del paso toObject .