我是javascript世界的新手,我还没有找到任何关于这种表示法的信息.我在该主题中找到了它(请参阅答案):仅在javascript中将HH:MM:SS字符串转换为秒.
// 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)是什么意思.
问候,
转换为数字的方式:
+n === Number(n)
+var
是一元身份运算符的应用程序的值var
.可以认为identity运算符类似于返回其唯一参数的函数:
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
+
变量前面的符号会将该变量强制转换为数字.例:
var x = "3"; var y = x + 10; // 310 var z = +x + 10 // 13
它是将变量转换为数字的最短形式