Error facilito de Javascript

denimH

Hola, he dudado entre ponerlo en el #HG de Javascript o hacer un hilo nuevo, y aquí estamos.
La cosa es que estoy usando .lastIndexOf() para sacar la posición de una letra en un string

Todo bien cuando asigno el string a una variable, pero si quiero aplicarlo a una función, se me rompe

 let x = 'string random'
 // Aqui si pongo un console.log del x.lastindexof('r') va perfectamente.

function search(str) {
 return str.lastIndexOf('r')
  }

console.log(search(x))
 //Aquí el asunto se me rompe y no veo el motivo

He estado mirando en StackOverflow y me he leído la documentación del .lastIndexOf pero no doy con la respuesta.
Qué es lo que me estoy perdiendo?

cabron

tu código copiado y pegado cambiando log por alert para que se vea el resultado directamente:

https://jsfiddle.net/9m4vup1a/

en el sitio donde te esté fallando tienes algo más que eso

y usa ; para terminar cada sentencia

1 1 respuesta
denimH

#2 Lo he vuelto a escribir para abrir el hilo en lugar de hacer copypaste y resulta que el error era una coma en lugar de punto. Una hora para esta gilipollez.

Gracias XD

1 respuesta
B

#3 Respecto al uso de ";" y otros muchos detalles puedes seguir: https://standardjs.com/rules-en.html#rules

Si sigues su filosofía "más dura" no usarás ";"... yo soy más de "semi-standard"... que es lo mismo pero permitiendo ";"

1 3 respuestas
Kaledros

#4 Hostia, qué maravilla, a marcadores.

1 1 respuesta
cabron

#4

no poner los ; me parece una parida

hay casos donde no ponerlos te cambia el significado del código, así que o te los aprendes de memoria para evitarlos, o pones el ; y te dejas de problemas.

es como lo de memorizar la preferencia de los operadores vs poner paréntesis y ser explícito con lo que quieres evaluar

mira la documentación de react, node.js, angular o casi cualquier cosa conocida y siempre van puestos.

no sé que justificación tienen en esa guía para recomendar no ponerlos, pero no hay ningún motivo más allá de "estética" o ahorrarte pulsar dos teclas en cada línea

1 2 respuestas
B

#6 Un motivo que podría decir desu perfectamente:

If you don’t understand how statements in JavaScript are terminated, then you just don’t know JavaScript very well, and shouldn’t write JavaScript programs professionally without supervision, and you definitely should not tell anyone else how to write their JavaScript programs.

Yo, como he dicho... semistandard y a volar :P

La gracia es que esta revisión se haga automáticamente... el editor te lo va chivando resaltando error y el linter mismo auto aplica correcciones o no lo deja pasar hasta que no este todo correcto. Es algo orgánico... no es de "empollar".

1 respuesta
eXtreM3

#4 #5 con ESLint os quitáis las movidas de estándares.

1 respuesta
B

#8 Esto justamente está ya hecho para poderse usar con eslint aplicando las reglas que proponen... al final a eslint le tienes que decir como trabajar.

1 respuesta
sasher

#9 O extiendes de la config de alguien con un poco de sentido común y a tirar millas con un plugin en el IDE que te haga el prettify al guardar el archivo.

Todo lo demás es perder el tiempo/liarte con tonterías. Y por cierto, estoy con #6 en esto; no poner los ; trae más problemas/líos que ventajas.

2 respuestas
B

#10 En esa docu también mencionan a standardjs... al final puedes usar lo que quieras o no usar nada... o de lo que uses el 10% de standardjs el otro 30% de google, un 50% de airbnb y un 10% de tus propias reglas.
Lo importante es mantener unos estándares para tu producto y equipo.
Yo solo he querido puntualizar que el uso de ; no es estrictamente obligatorio... que para ti (como para mi) sea mas engorroso no quiere decir que para todo el mundo lo sea... existe gente que se siente cómoda usando vim.

Si airbnb te merece mas respeto como para imitar su estilo, adelante.

eXtreM3

#10 la guideline de airbnb es la misma que la de google?

https://google.github.io/styleguide/jsguide.html

1 respuesta
pantocreitor

#12 muy muy parecidas si no recuerdo mal

isvidal

A mi me han dicho en MV que configurar el linter para que te formatee el codigo automaticamente al guardar (Poniendo punto y coma, tabulaciones, saltos de linea).

Es algo muy raro, malo y de vagos. Lo podeis leer en /dev/ siempre que sale el tema.

Por supuesto la gracia es ponter el linter luego tambien en el pre-commit de tal forma que el codigo ya llegue formateadito al origin

1 1 respuesta
B

#14 Quien no usa linters es o por que su proyecto es enano o por que es enano y trabaja solo

cabron
#7overflow:

If you don’t understand how statements in JavaScript are terminated, then you just don’t know JavaScript very well, and shouldn’t write JavaScript programs professionally without supervision, and you definitely should not tell anyone else how to write their JavaScript programs.

de las tonterías más grandes que he leído.

Casi todos los lenguajes tienen casos muy extremos donde hasta los más profesionales acaban cayendo, el mejor ejemplo es C y como ha plagado de bugs de seguridad por buffer overflow casi cualquier cosa que está escrita en este lenguaje, incluso librerías y programas que están hechos por gente de mucho nivel como openssl o curl.

Está bastante aceptada la idea de que cuanta más carga cognitiva tenga que tener el programador, cuantas más cosas tenga que tener en cuenta a la hora de escribir el código, más probabilidades hay de que cometa un error, sea lo profesional que sea, por que al final es algo humano, por eso C++ es un lenguaje muy criticado debido a su complejidad.

En python no hay que poner ; en ningún sitio, en C en todas las sentencias, en javascript no hay que ponerlo pero ojo que en ciertos casos si no lo pones puedes tener problemas. Esto es a todas luces una cagada por parte del lenguaje, que es herencia del diseño original de js que ya se sabe que tenía algunos aspectos problemáticos. Cuando un lenguaje tiene estás cosas (como pasa en casi todos) la solución es ayudarte a ti mismo todo lo que puedas para evitar caer en algún caso extraño, y no la cita esa que has puesto de "los verdaderos pr0 133t no caen nunca en esos fallos, no seas n00b y aprende cada detalle absurdo del lenguaje", por eso me parece más sencillo simplificar y ponerlo siempre aunque no sea obligatorio.

Y sobre lo de usar un linter para que te ayude a cazar cosas problemas no recuerdo haber dicho nada al respecto ni haber dicho que no lo uses, de hecho al contrario, está más bien en consonancia con lo que digo de cuantas menos cosas tengas que tener en tu cabeza mejor, yo también recomiendo usar un analizador estático que te cante problemas, lo que he criticado ha sido recomendar no poner ; en un lenguaje donde no ponerlo puede ser problemático.

Ah y si ya nos queremos poner técnicos para ver quien sabe como funciona js y quien no, el ; no es opcional como tal, si no que el intérprete lo inserta de forma automática al evaluar el código en caso de que tú no lo hayas puesto, y este es el motivo por el que se pueden producir sentencias ambiguas ya que si no lo pones tú de forma explicita el interprete lo puede insertar en otro sitio que no es el que esperabas y cambia el significado del código.

Pero vaya que no deja de ser una opinión, que cada uno haga lo que quiera, yo sigo con mi recomendación de ponerlo siempre y fuera.

1 respuesta
B

#16 No te lo tomes a lo personal eh... o igual es que respetas mucho a desu :P

Coincido en que esa justificación que he copiado y pegado de un texto mucho más largo es una salida por la tangente. Yo tampoco lo comparto... pero no por no compartir la opinión he de hacer como que no exista.
Los propios de standardjs te dicen que la gracia está en automatizar los pasos, no ponerse a empollarlos. Por ejemplo, en python yo no me mato ni un poquito en seguir la regla PEP8... que lo haga black, que es su puto trabajo xD si black no puede en una linea pues le ayudo.

Lo del ";" yo también lo veo más como un "hack"... por eso uso semistandard. Aunque tampoco le he dado una oportunidad la verdad... pero de calle yo leo mejor el código con ; que sin el y ya con eso pierde muchos puntos el no usar ";".

Creo que nadie en este hilo ha dicho que tu hayas dicho que no te gusta usar linters :S

Saludos... y lo dicho, mengano puede decir que la forma XY es la mejor mundial en hacer algo... pero es que XY no es Dios... por mucho que lo pueda intentar.

P.D: Otra herramienta interesante para javascript: https://terser.org/

Usuarios habituales