Javascript switch语句-字符串vs int

Javascript switch语句-字符串vs int,javascript,jquery,Javascript,Jquery,我在事件处理程序中有这行javascript: var value = event.currentTarget.value; //example: 9 然后我在switch语句中使用它 switch (value) { case 9: return 12; case 12: return 9; } 问题是“value”是字符串而不是int 我应该把它转换成int吗 或者有没有一种方法可以像jQuery()那样获取int值 还是应该在swit

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

var value =  event.currentTarget.value; //example: 9
然后我在switch语句中使用它

switch (value) {

    case 9:
        return 12;
    case 12:
        return 9;
}
问题是“value”是字符串而不是int

我应该把它转换成int吗

或者有没有一种方法可以像jQuery()那样获取int值


还是应该在switch语句中使用字符串?

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

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

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

var value =  parseInt(event.currentTarget.value, 10); 
或者有没有一种方法可以像jQuery()那样获取int值

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

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

  • 如果字符串包含小数点,
    parseFloat
    将字符串解析为可能的小数(如
    1.2
    )。它总是在10进制下工作

  • Number
    函数:
    value=Number(value)
    。这要求整个字符串是一个数字,并通过查看字符串来确定它的基数:默认值为十进制,但如果它以
    0x
    开头,则解析为十六进制(以16为基数),如果它以
    0
    开头,则解析为八进制(以8为基数)。没有办法强迫它使用特定的基数

  • 通过对引擎应用数学运算符,强制引擎隐式转换它;通常是
    +
    。所以:
    value=+value
    。这与
    value=Number(value)
    的作用相同。奇怪的是,在某些发动机上,它往往比
    Number
    慢,但还不够重要

  • 示例:

    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
    
    实时复制:

    console.log(parseInt(“15”,10));//15
    console.log(parseFloat(“15”);//15
    console.log(编号(“15”);//15
    console.log(+“15”);//15
    console.log(parseInt(“1.4”,10));//1.
    console.log(parseFloat(“1.4”);//1.4
    console.log(编号(“1.4”);//1.4
    console.log(+“1.4”);//1.4
    log(parseInt(“10件漂亮的东西”,10));//10
    log(parseFloat(“10件漂亮的东西”);//10
    console.log(数字(“10件漂亮的东西”);//楠
    console.log(+“10件漂亮的东西”);//NaN
    。作为控制台包装器{
    最大高度:100%!重要;
    
    }
    Good point:
    9==“9”
    //falseForm值始终返回字符串。
    value=0 | value
    如果不是按数字,则速度可能更快,至少是按
    +
    的速度。我错了吗?@GrijeshChauhan:我怀疑它会更快(这可能无关紧要)。它也只适用于整数,因为按位运算符通过整数转换获取数字。编辑:我很好奇,找到了与+测试的数字,所以我添加了你的:通常情况下,一些测试速度较慢,其他测试速度较快(这让我很惊讶)。@GrijeshChauhan:如果是最终用户输入,使用带基数的
    parseInt
    通常是最好的方法。你的意思是因为
    +
    不会在错误输入时引发异常,但parseInt会引发异常,我只是读了@GrijeshChauhan:
    parseInt
    不会引发异常。不,我的意思是因为用户做的事情像输入
    010
    之类,他们的意思是10,而不是8,但有些引擎将
    010
    视为八进制。因此给出了基数。