JavaScript中 '+' 号能改变类型?

Karon_
  • 1.1k

下午做了道题,题是这样的:
Complete the function circleArea so that it will return the area of a circle with the given radius. Round the returned number to two decimal places (except for Haskell). If the radius is not positive or not a number, return false.
Example:

circleArea(-1485.86);    //returns false
circleArea(0);           //returns false
circleArea(43.2673);     //returns 5881.25
circleArea(68);          //returns 14526.72
circleArea("number");    //returns false

最后结果如下:

var circleArea = function(radius) {
  return radius > 0 ? +(radius*radius*Math.PI).toFixed(2) : false;
};

这些都不是重点,重点是里面的+(radius*radius*Math.PI).toFixed(2)这句前面的+号,这里是为了把String转为number型?为何这样可以?
然后我自己试了下:
图片描述

一个+号为何如此神奇,底下的原理是什么?
类似的还有~~也可以把一个字符串转为数字类型?
这是为何呢?


问题解决(2015.09.17 22:12更新):
对于非数值应用一元操作符,该类型会像Number()转型函数一样对这个值执行转换。《JavaScript高级程序设计P38》

回复
阅读 2.8k
3 个回答

这是 一元 运算符

xuexiphpa
  • 1.5k

这是操作符
+-不用说,上过小学都知道,隐形的把一个字符串转为number类型。
"~"是位运算符,取反。

相似的还有:
& 按位“与”(AND);
| 按位“或”(OR);
^ 按位“异或”(XOR);
>> 数据右移;
<< 数据左移;

var a = 'abc' + 'xyz'; //a的值为:abcxyz,字符串与字符串是连接
var a = 10 + 5; //a的值为:15,数字是加
var a = 'abc' + 10; //a的值为:abc10,字符串与数字,自动将10转换成字符串了
var a = 'abc' + 10 + 20 + 'cd'; //a的值为:abc1020cd
var a = 10 + 20 + 'abc' + 'cd'; //a的值为:30abccd,可以数字加的先数字加,然后再连接

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
宣传栏