Recuperar datos booleanos de atributo de datos en jQuery

Estoy intentando recuperar un atributo de datos de tipo booleano desde un elemento html DIV, sin embargo, siempre devuelve falso cuando la cadena se convierte en booleano.

HTML

JS

 isreturn_str = $('#test').data('return'); isreturn = (isreturn_str === 'true'); if (isreturn) { document.write("It is true"); } else { document.write("It is false"); } 

salida

Es falso

http://jsfiddle.net/neilghosh/494wC/

El método jQuery .data() es inteligente en cuanto al reconocimiento de valores booleanos y numéricos y los convierte a su tipo nativo. Así que esto devuelve el true booleano, no "true" :

 $('#test').data('return'); 

Si desea obtener los datos sin procesar (sin la conversión automática de datos), puede usar .attr() :

 $('#test').attr("data-return"); 

Vea el caso de prueba de trabajo aquí: http://jsfiddle.net/jfriend00/6BA8t/

jQuery reconoce la cadena “true” como su contraparte booleana (en el contexto de los atributos de datos) y por lo tanto:

 typeof isreturn_str; // boolean 

pero se está comparando estrictamente con la cadena 'true' que produce falso ya que una cadena no es un valor booleano.

"true" se convierte internamente en booleano (intente alert (typeof(isreturn_str)) ), por lo tanto, su comparación === falla en la verificación de tipo.

Puedes llamar a .toString()

 isreturn_str = $('#test').data('return').toString(); 

http://jsfiddle.net/494wC/8/

En mi caso, las soluciones propuestas no me ayudaron, por lo tanto, creé mi propia función de conversión booleana usando jquery:

 /** * Convert a value into a boolean * @param {Mixed} value The value to check convert into boolean * @return {Boolean} */ var boolVal=function(value){ var falseValues=['false',0,undefined,'0','no','null',null]; if (typeof value === 'string' || value instanceof String){ value=value.toLowerCase(); } return $.inArray(value, falseValues) == -1 } 

Así que recupero el valor a través del método attr jquery y lo paso así, por ejemplo:

 boolVal($(href).attr('data-sidebar-sm-display')); 

También puedes verlo por ti mismo en la siguiente demostración:

 var boolVal = function(value) { var falseValues = ['false', 0, undefined, '0', 'no', 'null', null]; if (typeof value === 'string' || value instanceof String) { value = value.toLowerCase(); } return $.inArray(value, falseValues) == -1 } console.log("#1_true: " + boolVal($("#1_true").attr('data-boolean'))) console.log("#2_true: " + boolVal($("#2_true").attr('data-boolean'))) console.log("#3_true: " + boolVal($("#3_true").attr('data-boolean'))) console.log("#4_true: " + boolVal($("#4_true").attr('data-boolean'))) console.log("#5_true: " + boolVal($("#5_true").attr('data-boolean'))) console.log("#6_true: " + boolVal($("#6_true").attr('data-boolean'))) console.log("#7_true: " + boolVal($("#7_true").attr('data-boolean'))) console.log("#1: " + boolVal($("#1").attr('data-boolean'))) console.log("#2: " + boolVal($("#2").attr('data-boolean'))) console.log("#3: " + boolVal($("#3").attr('data-boolean'))) console.log("#4: " + boolVal($("#4").attr('data-boolean'))) console.log("#4: " + boolVal($("#no_data").attr('data-boolean'))) 
  

Estoy usando jquery 2.1.0 y tengo que usar eval

 // $('#test').attr("data-return");" doesn't works eval($('#test').attr("data-return"));