1

JSLint says the + are getting confused in the hints in Webstorm yet this code works.

var totalheightInInches = +selectedFeetToInches + +this.inchSelect.get("value");

is this bad practice or is there a better way to convert so that JSLint is satisfied since JSLint is based on best practices as we know?

before people hastily reach to close this, I wanna know what's some of the better ways to handle this conversion.

4

6 回答 6

2

您可以使用 parseFloat 和 parseInt 函数

parseFloat("2", 10) //returns the Number 2 
于 2013-05-14T04:52:12.997 回答
1

如果您只是尝试使用不幸存储为字符串的数字,那么 parseInt() 和 parseFloat() 就像用原子弹杀死苍蝇一样。它们旨在用于更繁重的工作,例如在进行可选的基本转换时提取字符串的数字部分等。JavaScript 是一种动态类型的语言,可自动确定数据是数字还是字符串。正如您所知道的那样,“+”是这种动态类型的优点并不总是那么好的情况之一。

如果你有一个不幸地存储为字符串的数值,那么我们可以注意并利用 JavaScript 在内部所做的事情(根据 ECMA 标准),对于“+”来说,这是模棱两可地试图猜测是加法还是连接,但减法总是意味着将所有变量解释为数字数据类型或 NaN(就像建议的转换函数作为其工作的一小部分一样)。

parseInt()因此,除非我真的想从另一个字符串中解析一个整数来进行基本转换,否则我认为减慢我的代码没有任何意义。这就像Boolean()在每个 if 语句中使用将每个表达式转换为布尔值一样。

对于我的程序的深层内部结构,我专门使用减法来添加有时可能存储为字符串的任何变量,并且在每个公式中,根据结果,我只需将结果变量替换为相反的变量。结果是零额外代码和最大执行效率,但以混乱为代价(一旦有人认识到这种做法,混乱就会消失)。

对于更易于阅读的代码,虽然仍然比使用任何一个解析函数快得多,但我减去 0 并附上一条注释,指出我这样做是为了确保将未指定类型的数据理解为数字。

(实际上,当我确定我的空格以后不会被折叠时,我也会使用 ++variable。这是 ++ 方法的唯一缺点,因为几乎所有代码都可以在没有空格的情况下编写,但是这个操作需要空格或括号。)

于 2013-05-14T05:29:48.460 回答
1

我认为+ 在这种情况下这是首选,因为它将操作数显式转换为 Number。它相当于Number(x)但比打字少。parseInt并且parseFloat用于修剪尾随的非数字字符(例如转换5px5或)并推断您想要一个整数或浮点数,5.5cm而不是。5.5+

我是不是说打字少了?:-)

产生式 +标识符+ +标识符只能以一种方式解释,它不是模棱两可的。

于 2013-05-14T05:11:04.690 回答
0

JSLint 警告通过添加 () 消失。说得通。

var totalheightInInches = (+selectedFeetToInches) + (+this.inchSelect.get("value"));`
于 2013-05-14T05:08:24.547 回答
0

喜欢

var totalheightInInches = parseInt(selectedFeetToInches,10) + parseInt(this.inchSelect.get("value"),10);

更新

如果您期望一个浮点值。正如Parthik Gosar所建议parseFloat的那样,而不是parseInt最合适的。

于 2013-05-14T04:52:34.793 回答
-1

使用Number()函数 ....

Number("100"); // returns 100

var totalheightInInches = Number(selectedFeetToInches) + Number(this.inchSelect.get("value"));

另一种将其转换,除以或乘以1的方法,,,

var totalheightInInches = selectedFeetToInches/1 + this.inchSelect.get("value")/1;
于 2013-05-14T04:52:50.983 回答