Por alguna razón para (var i en Matemáticas) {console.log (i)} no muestra el tan esperado, cos, atan2, E, PI en Javascript.¿Por qué (var i en Matemáticas) no itera a través de Matemáticas * en Javascript?
Respuesta
Porque Math
es un objeto incorporado cuyas propiedades están marcadas no numerable. Muchos objetos incorporados tienen este comportamiento, que es la razón por la que recorrer una matriz con for..in
no le dará problemas hasta que Array.prototype
se extienda con funciones de usuario, que siempre son enumerables por defecto.
Hasta hace poco tiempo no enumerable era una propiedad interna a la que no se puede acceder mediante el código JavaScript normal. Sin embargo, EMCAScript 5 especifica la capacidad de establecer la enumerabilidad y la capacidad de escritura (intente cambiar el valor de Math.PI
) de cualquier propiedad de objeto a través de Object.defineProperty().
También proporciona Object.getOwnPropertyNames() como una forma de obtener una lista de todas las propiedades de un objeto independientemente de su enumerabilidad.
Object.getOwnPropertyNames(Math);
//returns
["LN10", "PI", "E", "LOG10E", "SQRT2", "LOG2E", "SQRT1_2", "LN2", "cos", "pow", "log", "tan", "sqrt", "ceil", "asin", "abs", "max", "exp", "atan2", "random", "round", "floor", "acos", "atan", "min", "sin"]
Por lo que sé, los únicos navegadores que actualmente admiten estas funciones son Chrome y Safari. Firefox debería soportarlo en la versión 4. IE9 de lo que no estoy seguro, pero Microsoft ha declarado que pretenden apoyar el estándar EMCAScript 5 eventualmente.
No creo que haya ninguna forma de emular esta funcionalidad en los intérpretes de Javascript sin soporte explícito.
Al igual que la mayoría de los objetos incorporados en JavaScript, las propiedades y métodos del objeto Math
se definen en la especificación ECMAScript (sección 15.8.1) como no enumerables mediante el atributo DontEnum
(inaccesible). En ECMAScript 5, puede marcar propiedades y métodos de sus propios objetos como no-numerable también:
var o = {};
Object.defineProperty(o, "p", {
enumerable: false,
value: 1
});
Object.defineProperty(o, "q", {
enumerable: true,
value: 2
});
for (var i in o) {
console.log(i + "=>" + o[i]);
}
// q=>2
Estas propiedades no son numerables.
De the MDC documentation on for..in:
Un bucle for ... in no iterar sobre propiedades integradas.
En las implementaciones de JavaScript más recientes puede hacer sus propias propiedades no enumerables. Consulte propertyIsEnumerable() y Object.defineProperty().
- 1. moneda Matemáticas en JavaScript
- 2. Mapeo de Matemáticas y Javascript
- 3. ¿Por dónde empezar a aprender matemáticas para la programación de juegos para un novato en matemáticas?
- 4. MySQL Ordenar por matemáticas
- 5. Matemáticas en lote (ganar)
- 6. Matemáticas Rango a porcentaje
- 7. Matemáticas enteras en C#
- 8. Matemáticas de tiempo en Delphi
- 9. Operaciones matemáticas en expresiones regulares
- 10. llaves para matemáticas en LaTeX
- 11. Operaciones matemáticas básicas en XAML
- 12. Operaciones matemáticas con nulo
- 13. Gráficos por computadora: Matemáticas al código
- 14. ¿Cómo habilitar las matemáticas en sphinx?
- 15. Proceso de ecuaciones matemáticas en php
- 16. Matemáticas - números de mapeo
- 17. Matemáticas de Precisión Arbitraria en PHP
- 18. Cómo representar ecuaciones matemáticas en Android
- 19. i = i ++ no incrementa i. ¿Por qué?
- 20. jquery Hacer matemáticas simples?
- 21. Girar imagen matemáticas (C#)
- 22. Matemáticas y programación
- 23. GPU aceleró matemáticas en el navegador
- 24. seleccionar operaciones matemáticas *
- 25. ¿Qué matemáticas necesito para convertir este número
- 26. Manipulación de ecuaciones matemáticas en Python
- 27. matemáticas con enumeraciones (por ejemplo DAYOFWEEK) en C#
- 28. Editor con funciones matemáticas
- 29. Matemáticas con variables interpoladas?
- 30. ¿Cómo funcionan las ecuaciones matemáticas en Java?
Me pregunto por qué ... – You