2013-03-24 70 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