javascript 中 +a 代表什么呢
高洛峰
高洛峰 2017-04-10 15:39:59
[JavaScript讨论组]

例如,对于这个例子,我们给定一个直角三角形的两条边的长度,需要求第三条边的长度

function calculateHypotenuse(a,b){
  if (!+a || !+b || typeof(a) != 'number' || typeof(b) != 'number' || a<0 || b<0) 
    throw 'error';
  return Math.sqrt(a*a + b*b).toFixed(3);
}

在这个例子中 +a 代表什么呢?
经过测试 a 对于 string 类型,0 都满足 !+a;

var a = 1;
console.log(+a);    //1
console.log(a); //1
console.log(++a);   //2
console.log(a++);   //2
console.log(a++)    //3

而在这里,+a 好像并没有改变 a 的值。。

高洛峰
高洛峰

拥有18年软件开发和IT教学经验。曾任多家上市公司技术总监、架构师、项目经理、高级软件工程师等职务。 网络人气名人讲师,...

全部回复(4)
ringa_lee
php+a是转为number类型,同parseInt(a)
var a = 1;
console.log(+a);    //parseInt(a)=1
console.log(a); //1
++a是先加1,然后返回a
a++是先返回a,然后加1
高洛峰

这里的+a,+b作用在于判断a,和b是否有参数传入,缺少参数之一,抛出异常。

此函数先判断是否a和b两个参数齐全,在判断两个参数是否是数字类型,然后判断是否都大于0,只有为a和b都为大于零的整数才参与最后的计算。

当a或b一个参数为定义的实收。!+a 或者 !+b 结果将为true,满足条件,抛出异常,这个作用和 typeof(a)=="undefined" 这样的语句是一样的。另外,当a或b传入的参数为 "15a" 这样的字符串的时候,表达式计算结果也为true,最终也将抛出异常。

//此时没定义a 
!+a //true
a='12c';
!+a //true
ringa_lee

可以这么认为:+a 就是 正a;-a 就是 负a,所以这里显然会被转成数值类型,感受"鸭子"的魅力吧,骚年。

PHPz

我觉得@socrates说的在一般情况下是对,但是不符合题意,如果为了转成number,后面的typeof就没必要存在了。我觉得@晴云孤魂 。说得比较合理

热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号