switch语句 - 字符串vs int

时间:2014-02-01 10:48:05

标签: javascript jquery

我在事件处理程序中有这行javascript:

var value =  event.currentTarget.value; //example: 9

然后我在switch语句中使用。

switch (value) {

    case 9:
        return 12;
    case 12:
        return 9;
}

问题在于"价值"是一个字符串而不是一个int。

我应该把它转换为int吗?

或者有没有办法将值作为int获取,就像用jQuery()说的那样?

或者我应该在switch语句中使用字符串吗?

3 个答案:

答案 0 :(得分:8)

简单使用+value,在变量前面注意+,将变量转换为数字

switch (+value) {
    case 9:
        return 12;
    case 12:
        return 9;
}

答案 1 :(得分:8)

  

或者有没有办法将值作为int获取,就像用jQuery()说的那样?

当然,这几乎总是语言或环境中提供的功能。在JavaScript中,有四种方式:

  1. parseInt会将字符串解析为整数。 value = parseInt(value, 10)会将其解析为十进制(例如,基数为10,我们大多数人使用的数字系统)。请注意,parseInt将解析它在字符串开头找到的数字,忽略后面的任何内容。因此parseInt("1blah", 10)1

  2. 如果字符串包含小数点,则
  3. parseFloat将字符串解析为可能小数(如1.2)。它总是在10号基地工作。

  4. Number函数:value = Number(value)。这需要整个字符串是一个数字,并通过查看字符串来确定它的基数:默认为十进制,但如果它以0x开头,则将其解析为十六进制(基数为16),如果以0开头,则在松散模式的某些引擎上,它被解析为八进制(基数为8)。没有办法强迫它使用特定的数字基础。

  5. 强制引擎通过对其应用数学运算符来隐式转换它;通常的是+。所以:value = +value。这与value = Number(value)做同样的事情。奇怪的是,它在某些引擎上往往比Number慢,但不够重要。

  6. 示例:Live Copy

    parseInt("15", 10):  15
    parseFloat("15"):    15
    Number("15"):        15
    +"15":               15
    
    parseInt("1.4", 10): 1
    parseFloat("1.4"):   1.4
    Number("1.4"):       1.4
    +"1.4":              1.4
    
    parseInt("10 nifty things", 10): 10
    parseFloat("10 nifty things"):   10
    Number("10 nifty things"):       NaN
    +"10 nifty things":              NaN
    

答案 2 :(得分:1)

试试这个。 parseInt()函数会解析字符串并返回一个整数。

var value =  parseInt(event.currentTarget.value, 10);