el problema que tengo es que el segmento no está definido: no se pueden leer las propiedades de undefined (leyendo 'segmento') ¿cómo puedo escribir un código para usar si el valor no está definido o es un error, simplemente use $("#x").val().slice(3,5)
intenté así pero parece que no funciona
w = (typeof x.val() !== 'undefined') ? $("#x").val().slice(3,5) : 0;
x.val()
y $("#x").val()
son cosas muy diferentes, a menos que suceda que x
sea el resultado de una llamada anterior a $("#x")
.
La única vez que el val
de jQuery devuelve undefined
es si lo llama en un conjunto vacío (lo que significaría que no hay ningún elemento con id="x"
en el DOM cuando hace $("#x")
). La manera simple de hacer esto es tomar el valor y luego hacer la verificación:
const val = x.val(); // Or `= $("#x").val()`, whatever is the one you actually want w = typeof val !== "undefined" ? val.slice(3,5) : 0;
Sin embargo, tenga en cuenta que está asignando una cadena a w
en un caso pero un número en el otro. Por lo general, es mejor que sea consistente, ya sea que use siempre una cadena o siempre use un número.
En JavaScript, tanto el valor undefined
como las cadenas vacías se consideran falsos y se evaluarán como falsos si se usan como argumentos booleanos. Puede usar este comportamiento para crear comprobaciones nulas muy simples con algunos paréntesis.
w = ($('#x').val() || '').slice(3,5) || 0;
Este código primero agregará una verificación segura indefinida/nula a su operación $(...).val()
usando una operación lógica o ( ||
). Entonces, si no se encuentra ningún valor, se devolverá una cadena vacía en su lugar.
Una vez hecho esto, el segmento se aplicará al valor o a una cadena vacía. Si el resultado del segmento es una cadena vacía, se devuelve un 0
en su lugar.
Tenga en cuenta que en su ejemplo inicial también está intentando abordar la variable x
en lugar de usar $('#x')
. Estos no son intercambiables a menos que primero asigne var x = $('#x')
.
Considera lo siguiente.
$(function() { var w; $("#btn").click(function() { var x = $("#x").val(); w = (x !== undefined || x.length >= 4 ? x.slice(3, 5) : "0"); console.log(w); }); });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <div> <input type="text" id="x"> <button id="btn">Go</buton> </div>
Esto comprueba si x
no está undefined
o si la longitud de la cadena es lo suficientemente larga para cortarla.