2013-03-24 79 views
0

试图解决一些我正在查看的JavaScript代码。我看到这样的事情:将数字乘以一个数字

var myVariable = "X"; 
var result = myVariable * 6; 

来自C#背景,这对我来说是新的。有人能够快速介绍一下这里发生了什么吗?我猜结果将等于字母表中的字母乘以6的位置,我会是正确的吗?

+4

试一下,看看结果是什么! – Bergi 2013-03-24 22:14:55

+2

按F12键入“x”* 6,查看结果NaN。开发人员控制台是最终方便的工具。 – 2013-03-24 22:15:51

+0

@fastreload或节点。 ;) – beakr 2013-03-24 22:16:12

回答

2

我猜测,结果是等于该字母位置字母乘以6,我是否正确?

编号JS是弱类型的,并且隐式地指定值以匹配运算符(此处为multiplicative one)。在这种情况下,字符串"X"将为converted to a number - 因为它不是有效的数字文字,因此导致NaNresult然后也将是NaN

要获得字母表中的位置,你会使用parseInt function与非十进制基数(parseInt("X", 36)-10)或charCodeAt string method"X".charCodeAt(0)-65)。

+0

'“a”.charCodeAt(0)-65 // 32'我不认为有第32个字母表... – 2013-03-24 22:31:01

+0

@Derek:这是ASCII码。对于小写字母,你需要减去97. – Bergi 2013-03-24 22:48:54

2

结果将是NaN,因为“X”不是数字;将一个字符串乘以一个数字总是会返回NaN

的更多信息:http://es5.github.com/

*运算符执行乘法,产生它的操作数的乘积。乘法是可交换的。由于精度有限,ECMAScript中的乘法并不总是关联的。

浮点乘法的结果是由IEEE 754二进制双精度算术的规则进行:

  • 如果操作数是NaN,则结果是NaN。

如果你想信在英文字母的位置,尽量this

myVariable.toUpperCase().charCodeAt(0) - 65; 
+0

'NaN'对于那些不知道的人来说不是一个数字。 – 2013-03-24 22:16:25

+0

'Array(16).join(6 *'X')+'蝙蝠侠!'是那些不知道的蝙蝠侠歌曲。 – 2013-03-24 23:31:50

+0

@Tomás - 不错的一个! – 2013-03-24 23:33:51

1

我认为最简单的解决方案有一个字符串s重复n时间是:

Array(n+1).join(s) 

重读你的问题:通过n繁衍s的第一个字母中charCode:

s.charCodeAt(0) * n 

要获得对应于该乘以charcode的字符:

String.fromCharCode(s.charCodeAt(0) * n) 
+2

是的,它会的,但这与问题完全无关? – Bergi 2013-03-24 22:21:02

+0

@Bergi更新,你认为我现在更好地回答OP的问题吗? – kay 2013-03-24 22:25:00

+0

是的,这是更好的(虽然“charcode”不完全等同于“在字母表中的位置”) – Bergi 2013-03-24 22:27:00