remove objetos matriz eliminar elemento ejemplos array javascript arrays

objetos - javascript array methods



JavaScript Funky array percance (5)

Confirmación (si es necesario) de la respuesta de Guffa:

function a() { var b = ["b"]; console.log (b); console.log ('' '' + b); console.log (b); console.log (b.toString ()); console.log (b); b = b.push("bb"); console.log (b); } a();

Salidas de cromo:

["b", "bb"] b ["b", "bb"] b ["b", "bb"] 2

Observe cómo cada registro que hace referencia al objeto muestra el resultado "anómalo" y cada uno que requiere la evaluación de una expresión no lo hace. Tenga en cuenta también el registro final que muestra que b se establece en el valor valor 2, ya que el valor devuelto por empuje es la nueva longitud de la matriz.

Por lo tanto, para evitar este problema, asegúrese de que cada parámetro de registro incluya la evaluación de una expresión.

function a() { var b = ["b"]; console.log(b); //console.log(b.slice()); b = b.push("bb"); } a();

En un mundo "perfecto", uno pensaría que console.log mostraría ["b"] , pero de forma bastante sorprendente muestra ["b", "bb"] aunque "bb" no se haya activado hasta después.

Si lo hace console.log(b.slice()); Entonces obtendrá el resultado deseado de ["b"] . ¿Porqué es eso? ¿Cuál es la razón detrás de esta complicación? Solo quiero entender esto mejor para poder evitar que suceda.

* Nota, me topé con este mismo punto en una de mis preguntas recientes, pero este es un ejemplo mucho más conciso. @RightSaidFred me ha llevado a este punto y ha sido de gran ayuda hasta ahora.

Editar

Ejemplo ejecutable en JSFiddle


Creo que es un error en las herramientas de google chrome dev


Este es un problema conocido con console.log .

En lugar de convertir el parámetro en una cadena cuando llama al método, el parámetro se almacena y se convierte en una cadena cuando se muestra en la interfaz de usuario. Como no ocurre nada en la interfaz de usuario mientras la función se está ejecutando, verá el estado del objeto tal como está cuando sale de la función.


No creo que este sea un JavaScript wtf; Creo que es un console.log wtf. Basado en una respuesta que vi ayer, console.log es probable que console.log caché su objeto. Si reemplaza console.log(b) con la alert(b) , verá que se muestra b , como se esperaba.

Desafortunadamente, el uso de console.log convincente para comportarse de una manera predecible no es algo para lo que tengo una respuesta.


Supongo que esto tiene que ver con la forma en que funciona console.log() aunque estás haciendo algo un poco raro cuando dices:

b = b.push("bb");

deberías poder decir simplemente

b.push("bb");