ésto regular rae quitar frases expresion esto errores ejemplos con acentuacion acentos javascript syntax bit-manipulation

javascript - regular - ¿Qué hace una tilde cuando precede a una expresión?



frases con errores de acentuacion ejemplos (6)

El ~ es operador Bitwise NOT , ~x es aproximadamente el mismo que -(x+1) . Es más fácil de entender, más o menos. Asi que:

~2; // -(2+1) ==> -3

Considere -(x+1) . -1 puede realizar esa operación para producir un 0 .

En otras palabras, ~ usado con un rango de valores numéricos producirá un valor de falsy (forzar a false desde 0 ) solo para el valor de entrada -1 , de lo contrario, cualquier otro valor de truthy .

Como sabemos, -1 se llama comúnmente un valor centinela . Se usa para muchas funciones que devuelven valores >= 0 para el éxito y -1 para el error en el lenguaje C Que la misma regla de valor de retorno de indexOf() en JavaScript.

Es común comprobar la presencia / ausencia de una substring en otra string de esta manera

var a = "Hello Baby"; if (a.indexOf("Ba") >= 0) { // found it } if (a.indexOf("Ba") != -1) { // found it } if (a.indexOf("aB") < 0) { // not found } if (a.indexOf( "aB" ) == -1) { // not found }

Sin embargo, sería más fácil hacerlo a través de ~ como a continuación

var a = "Hello Baby"; ~a.indexOf("Ba"); // -7 -> truthy if (~a.indexOf("Ba")) { // true // found it } ~a.indexOf("aB"); // 0 -> falsy !~a.indexOf("aB"); // true if (!~a.indexOf( "aB" )) { // true // not found }

var attr = ~''input,textarea''.indexOf( target.tagName.toLowerCase() ) ? ''value'' : ''innerHTML''

Lo vi en una respuesta, y nunca lo había visto antes.

Qué significa eso?


En lugar de usar la tilde con indexOf , podrías usar:

if (!fb.indexOf(''foobar'')) { // Does match } else { // Doesn''t match }


Para aquellos que estén considerando usar el truco de tilde para crear un valor de verdad a partir de un resultado indexOf , es más explícito y tiene menos magia para usar el String.prototype.includes() .

''hello world''.includes(''hello'') //=> true ''hello world''.includes(''kittens'') //=> false

Tenga en cuenta que este es un nuevo método estándar a partir de ES 2015, por lo que no funcionará en navegadores más antiguos. En los casos en que eso importe, considere usar String.prototype.includes polyfill .

Esta característica también está disponible para matrices que usan la Array.prototype.includes() :

[''apples'', ''oranges'', ''cherries''].includes(''apples'') //=> true [''apples'', ''oranges'', ''cherries''].includes(''unicorns'') //=> false

Aquí está el Array.prototype. Incluye polyfill si necesita soporte de navegador más antiguo.


Utilizándolo antes de que una expresión indexOf() efectivamente le dé un resultado verdadero / falso en lugar del índice numérico que se devuelve directamente.

Si el valor de retorno es -1 , entonces ~-1 es 0 porque -1 es una cadena de todos los 1 bits. Cualquier valor mayor que o igual a cero dará un resultado distinto de cero. Así,

if (~someString.indexOf(something)) { }

causará que el código if ejecute cuando "algo" está en "someString". Si intenta utilizar .indexOf() como un booleano directamente, entonces eso no funcionará porque a veces devuelve cero (cuando "algo" está al principio de la cadena).

Por supuesto, esto también funciona:

if (someString.indexOf(something) >= 0) { }

y es considerablemente menos misterioso.

Algunas veces también verás esto:

var i = ~~something;

Usar el operador ~ dos veces es una forma rápida de convertir una cadena a un entero de 32 bits. El primero ~ hace la conversión, y el segundo ~ devuelve los bits. Por supuesto, si el operador se aplica a algo que no se puede convertir en un número, se obtiene NaN como resultado. ( editar - en realidad es el segundo ~ que se aplica primero, pero se entiende la idea).


~ es un operador bit a bit que voltea todos los bits en su operando.

Por ejemplo, si su número era 1 , su representación binaria del flotador IEEE 754 (cómo JavaScript trata los números) sería ...

0011 1111 1111 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000 0000

Entonces ~ convierte su operando a un entero de 32 bits (los operadores bit a bit en JavaScript lo hacen) ...

0000 0000 0000 0000 0000 0000 0000 0001

Si fuera un número negativo, se almacenará en complemento a 2: invierta todos los bits y agregue 1.

... y luego voltea todos sus bits ...

1111 1111 1111 1111 1111 1111 1111 1110

Entonces, ¿cuál es el uso de eso? ¿Cuándo podría alguna vez usarlo?

Tiene bastantes usos. Si estás escribiendo cosas de bajo nivel, es útil. Si perfila su aplicación y encuentra un cuello de botella, se puede hacer más eficiente mediante el uso de trucos en modo bit (como una posible herramienta en una bolsa mucho más grande).

También es un truco (generalmente) poco claro para convertir el valor de retorno encontrado de indexOf() en verdadero (mientras que no se encuentra como falso ) y la gente a menudo lo usa por su efecto secundario de truncar números a 32 bits (y dejar caer su lugar decimal duplicándolo, efectivamente lo mismo que Math.floor() para números positivos).

Digo poco claro porque no es inmediatamente obvio para qué se está utilizando. En general, desea que su código se comunique claramente a otras personas que lo lean. Mientras usa ~ puede parecer genial , generalmente es demasiado inteligente para su propio bien. :)

También es menos relevante ahora que JavaScript tiene Array.prototype.includes() y String.prototype.includes() . Estos devuelven un valor booleano. Si su (s) plataforma (s) de destino lo soportan, debería preferir esto para probar la existencia de un valor en una cadena o matriz.


~indexOf(item) aparece con bastante frecuencia, y las respuestas aquí son geniales, pero tal vez algunas personas solo necesiten saber cómo usarlo y "omitir" la teoría:

if (~list.indexOf(item)) { // item in list } else { // item *not* in list }