javascript - javascript HTML5数据 * 属性类型转换字符串和数字

  显示原文与译文双语对照的内容
116 3

为什么 data-value="2.0"的值转换为字符串,而 data-value="2.5" 转换为数字的值? 我可以在我的函数中处理这个问题。 我只是想了解一些关于Javascript如何处理数字和字符串的更多信息。 这种of我 guard 。


<a data-value="2.0">2.0</a>


<a data-value="2.5">2.5</a>




$("a").click(function() {


 alert(typeof $(this).data("value")); 


});



[ Fiddle with it ]

时间: 原作者:

98 0

这些值只是对普通javascript的字符串;它并不试图对它的自身进行任何转换。


[...document.querySelectorAll("a")].forEach(a =>


 console.log("type: %s, value: %o", 


 typeof a.dataset.value, 


 a.dataset.value)


);

<a data-value="2.0">2.0</a>


<a data-value="2.5">2.5</a>

另一方面,jQuery尝试通过 data() when访问数据属性来确定和转换到适当的类型。 这是( arguably )的一个问题。 他们的文档 ( 强调挖掘) 实际上解决了以下问题:

每次尝试将字符串转换为JavaScript值( 。这包括布尔值,数字,对象,数组和 null ) 。 如果这样做不改变值的表示形式,则值仅转换为数字。 例如和" 100.000"是等价的数字,但是转换它们会改变它们的表示,因此它们会被作为字符串。 字符串值" 100"被转换为数字 100.

另请参阅 HTMLElement.dataset

原作者:
51 2

查看jquery代码源代码,我确定了原因。

它将解析为一个数字,如果以及只有在这样做的时候,它不会改变字符串。 源:https://github.com/jquery/jquery/blob/master/src/data.js#L36


(+"2.0") +"" ==="2"//!== the original string


(+"2.1") +"" ==="2.1"//== the original string



原作者:
...