2013-12-18 77 views
14

我是新来的JavaScript世界,我还没有找到任何有关这种表示法的信息。 我在那个话题中找到了它(请参阅答案):Convert HH:MM:SS string to seconds only in javascript(+ var)是什么意思

// 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)的意思。

问候,

+0

它最短的格式转换为数字 – Satpal

回答

29

在变量前面的+符号,将变量转换为数值。例如:

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

我没想到答案这么快。谢谢。 – BironDavid

+4

但与parseInt(..)不同,它不会转换非真实数字的val,例如'10px' –

+0

@YuriyGalanter精度是赞赏。你说得对,它和“parseInt()”不一样。 – BironDavid

5

及其最短形式转换可变与数

6

皈依的方式编号:

+n === Number(n) 
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 
+0

+1表示这是一元身份运算符和示例。 – Kaya