(+ var)是什么意思

 脸皮乃身外之物 发布于 2023-02-09 14:09

我是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)是什么意思.

问候,

4 个回答
  • 转换为数字的方式:

    +n === Number(n)
    

    2023-02-09 14:11 回答
  • +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
    

    2023-02-09 14:12 回答
  • +变量前面的符号会将该变量强制转换为数字.例:

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

    2023-02-09 14:12 回答
  • 它是将变量转换为数字的最短形式

    2023-02-09 14:12 回答
撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有