我对以下语句有问题
trace(Number("1/2")) //output NaN
但是
trace(Number("1.2")) //output 1.2
所以,我有点困惑为什么第一条语句不能给出正确的结果?
我对以下语句有问题
trace(Number("1/2")) //output NaN
trace(Number("1.2")) //output 1.2
它可能期望值已经是一个数字,而不是一个计算结果。尝试解析这个字符串:"1+2"
。它很可能也会得到NaN。
编辑:我已经运行了一个测试
Number("1.2") = 1.2
Number("1+2") = NaN
Number("1/2") = NaN
就像我说的那样,Number()
构造函数需要一个数字作为参数,而不是一个计算表达式。
trace(Number("1")/Number("2")); // Output 0.5
NaN是输出结果,因为您正在尝试将字符串数据转换为数字数据进行使用。
您必须这样跟踪,因为“/”运算符不是一个数字。您只能将数字相乘或相除,不能是字符串。因此,在尝试分割字符串数据时,我们在隐式强制值更改为数字数据。我们不能这样做。我们应该先显式地将字符串数据转换为数字数据,然后执行算术运算。
Number()
不是一个构造函数,而是一个顶级转换函数,http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/package.html#Number(),b) 使用 parseFloat()
或 parseInt()
将字符串转换为数值更安全和准确(解析字符串直到第一个非数字字符,并且如果字符串不能被转换,则始终返回 NaN,请查看 Number()
可能返回值的表格以了解我的意思)。 - weltraumpirat通过将值放在引号中,您使其成为显式字符串。这就像询问单词“this”的数字值是多少。
不确定这是否有帮助,但去掉引号它就有意义了。
trace(Number(1/2)); //output 0.5