(+ var)是什么意思

时间:2013-12-18 14:46:19

标签: javascript

我是javascript世界的新手,我还没有找到有关此符号的任何信息。 我在那个主题中找到了它(见答案):Convert HH:MM:SS string to seconds only in javascript

// minutes are worth 60 seconds. Hours are worth 60 minutes.
var seconds = (+a[0]) * 60 * 60 + (+a[1]) * 60 + (+a[2]); 

此外,我想使用该代码将'HH:MM:SS'字符串转换为秒。但是,对我来说似乎不安全。如果用户插入'XX:03:SS',则值为NaN,这是不正确的(至少对我而言)。所以我决定改进它:

function convertHHMMSSToSeconds(time) {

// initialize seconds
var seconds = 0;

//ensure time
if (!time) {
    return seconds;
}


try {
    var hmsTab = time.split(':'); // split it at the colons

    // ensure that the hmsTab contains 3 values (hh,mm,ss)
    if (!hmsTab || hmsTab.length !== 3) {
        return seconds;
    }

    // initialize hh, mm and ss
    var hh = hmsTab[0] > 0 && hmsTab[0] < 60? +hmsTab[0] : 0;
    var mm =  hmsTab[1] > 0 && hmsTab[1] < 60 ? +hmsTab[1] : 0;
    var ss =  hmsTab[2] > 0 && hmsTab[2] < 60 ? +hmsTab[2] : 0;

    // return 0 if one variable is not valid 
    if(+hmsTab[0] !== hh ||+hmsTab[1] !== mm || +hmsTab[2] !== ss) {
        return seconds;
    }

    // minutes are worth 60 seconds. Hours are worth 60 minutes.
    seconds = (hh * 60 * 60) + (mm * 60) + ss;
}catch (error)
{
    seconds = 0;
}
return seconds && seconds>0 ? seconds : 0;

}

所以我的问题仍然存在,(+ var)是什么意思。

此致

4 个答案:

答案 0 :(得分:29)

变量前面的+符号会将该变量强制转换为数字。例如:

var x = "3";
var y = x + 10; // 310
var z = +x + 10 // 13

答案 1 :(得分:11)

+var是将一元identity operator应用于var的值。身份运算符可以被认为是类似于一个返回其唯一参数的函数:

function identity(operand) {
    return operand;
}

但是,标识运算符仅对数值起作用。由于Javascript是弱类型语言,因此将数字函数应用于非数字值将导致非数字值被强制转换为等效的数值。在最常见的使用身份运算符强制转换的情况下,包含数字的字符串会被解析为数字。

虽然快速输入并且易于记忆,但使用身份运算符进行强制攻击并不是非常强大。以下是一些示例输出:

+'150'  // 150
+'150z' // NaN
+'z150' // NaN
+'015'  // 15 -- note that it doesn't interpret as octal*
+'015z' // NaN
+'z015' // NaN
+'0xf'  // 15 -- note that it interprets as hexadecimal
+'0xfz' // NaN
+'z0xf' // NaN
+'NaN'  // NaN
+'undefined' // NaN

将相同的输入与parseInt

进行比较
parseInt('150')   // 150
parseInt('150z')  // 150
parseInt('z150')  // NaN
parseInt('015')   // 15 -- note that it still doesn't interpret as octal*
parseInt('015z')  // 15
parseInt('z015')  // NaN
parseInt('0xf')   // 15 -- note that it still interprets as hexadecimal
parseInt('0xfz')  // 15
parseInt('z0xf')  // NaN
parseInt('NaN')   // NaN
parseInt('undefined') // NaN

parseInt还可以让您更好地控制结果:

parseInt('015', 8)   // 13
parseInt('z0xf', 36) // 1634163
parseInt('1010', 2)  // 10

*在EMCAScript 5.处理前导零时,以前的版本默认为八进制。

字符串不是唯一可以用身份运算符强制转换为数字的东西,尽管它们是最常见的,转换是最明智的。其他强制措施可能有意义,或者可能没有。例如:

+[]        // 0
+[150]     // 150
+['150']   // 150
+['150z']  // NaN
+[1, 2]    // NaN
+{}        // NaN
+null      // 0
+true      // 1
+false     // 0
+NaN       // NaN
+undefined // NaN
+function(){} // NaN

答案 2 :(得分:6)

转换为数字的方式:

+n === Number(n)

答案 3 :(得分:5)

将变量转换为数字

的最短格式