Business
Jobs
  • About Us
  • Solutions
    • Job Postings
      Post your job and receive qualified candidates in 48h.
    • Candidate Assessments
      500+ technical and psychological tests, plus anti-fraud.
    • Headhunting
      Tailor-made executive search from start to finish.
    • Payroll + EOR
      Payroll dispersal and EOR across 15+ LATAM countries.
  • Pricing
  • Jobs

0

254
Views
¿Hay un valor de índice de identidad en JavaScript?

En JavaScript, los valores de los objetos y las matrices se pueden indexar de la siguiente manera: objOrArray[index] . ¿Hay un valor de "índice" de identidad?

En otras palabras:

¿Hay un valor de x que hace que lo siguiente sea siempre cierto?

 let a = [1, 2, 3, 4]; /* Is this true? */ a[x] == a let b = { a: 1, b: 2, c: 3 }; /* Is this true? */ b[x] == b

Definición de un elemento de identidad : https://en.wikipedia.org/wiki/Identity_element

over 4 years ago · Santiago Trujillo
2 answers
Answer question

0

La operación de indexación no tiene un elemento de identidad. El dominio y el rango de indexación no son necesariamente los mismos: el dominio son los arreglos y los objetos, pero el rango es cualquier tipo de objeto, ya que los elementos del arreglo y las propiedades del objeto pueden contener cualquier tipo. Si tiene una matriz de enteros, el dominio es Array , mientras que el rango es Integer , por lo que no es posible que haya una identidad. a[x] siempre será un número entero, que nunca puede ser igual a la matriz en sí.

E incluso si tiene una matriz de matrices, no hay motivo para esperar que ninguno de los elementos sea una referencia a la matriz en sí. Es posible crear matrices autorreferenciales como esta, pero la mayoría no lo son. E incluso si lo es, la autorreferencia podría estar en cualquier índice, por lo que no hay un valor de identidad único.

over 4 years ago · Santiago Trujillo Report

0

No existe tal cosa incorporada, ya que rara vez es necesaria (y, a veces, incluso una necesidad contra ella). 0 Sin embargo, es posible rodar su propia clave de 'identidad':

 const self = Symbol('self'); Object.defineProperty(Object.prototype, self, { enumerable: false, get() { "use strict"; return this; } });

Esto funcionará en todas las primitivas (aparte de nulas e indefinidas) y la mayoría de los objetos de JavaScript: es decir, que no sean proxies o aquellos que omiten la cadena de prototipos habitual mediante, por ejemplo Object.create(null) . Cualquier objeto posterior en la cadena de prototipos también podrá deshabilitar la funcionalidad, por ejemplo, haciendo { [self]: void 0 } ; todas estas advertencias significan que x[self] === x de ninguna manera es una ley universal. Pero esto es probablemente lo mejor que puedes hacer.

Modificar Object.prototype generalmente se considera una mala idea, pero lo anterior logra evitar la mayor parte de su maldad: agregar la propiedad en una clave de símbolo (y hacer que también sea explícitamente no enumerable) evita que aparezca inesperadamente en iteraciones y búsquedas que recorren la cadena de prototipos, lo que ayuda a garantizar que no se vea afectado ningún código que no busque específicamente esta propiedad.


0 Incluso si existiera tal característica, no sería una buena solución para el caso de uso original del autor de la pregunta : una operación 'cortar a 50 caracteres o tomar la cadena completa si es más corta' se puede expresar como s.description.substring(0, s.description.length > 50 ? 50 : void 0) (o de hecho solo s.description.substring(0, 50) ). No sería más fácil de expresar incluso con una función de este tipo: dependiendo de la condición, aún necesita invocar el método de subcadena, no solo buscarlo, sino no invocar el no método 'self'. Y dado que necesita agregar puntos suspensivos al final en el primer caso, aún tendría que realizar la verificación de condición fuera de la llamada de subcadena, lo que hace que cualquier abreviatura sea bastante ineficaz. Dicho todo esto, los trucos como los descritos en esta respuesta encuentran algún uso real .

over 4 years ago · Santiago Trujillo Report
Answer question
Find remote jobs

Discover the new way to find a job!

Top jobs
Top job categories
Business
Post vacancy Pricing Sales
Legal
Terms and conditions Privacy policy
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Show me some job opportunities
There's an error!