js中的=+表达式是什么意思

如代码

function(dx, dy){
            rect.attr({x: orig_x+dx,y: orig_y+dy, fill:"orange"});
        },function(x,y){
            orig_x=+rect.attr("x");
            orig_y=+rect.attr("y");
            rect.attr({fill:"orange"});
        },function(){
            rect.attr({fill:"blue"});
        }
阅读 6.9k
5 个回答

其实这个并不是 =+, 只是+, 然后赋值。

+ 表示试图将后面的变量变成整数,比如

+'3' = 3
+'a' = NaN

一般作用就是用来把用户输入的字符串转换成整数

+= 是累加
= + 变量   // 将后面的String转化为数字
= - 变量   // 变为负数

为什么要这么写 也是很坑,为什么不用 parseInt parseFloat

这称之为正号(+)或是一元正号(unary plus),而不是加号(+),因为参与的运算子只会有一个,所以称为一元。

简单的来说,它是一种把其他类型的资料转为数字类型的语法,可以不限于字符串。建议只用在单纯的数字字符串上。

这种语法是从使用社群上发展出来的,教科书上很少会提及。这种语法有很多种,下面有张图里有6种是我从这篇问答找来的,它是用代码产生的,实际上并不只这6种:

图片描述

你看图中就大概知道,一元正号(+)的行为类似于parseFloat,而不是parseInt,相似于parseInt的是双波折号(~~)的语法。

一元正号(+)可以把像"123.456"的字符串,转换为数字类型的123.456。会使用一元正号(+),而不用parseFloat其实是有原因的,大致上简单说明一下:

1. 快。

这种语法会被使用的主要原因,是经过测试过在某些浏览器与情况下它的效率超快。

2. 语法简单。

打个正号(+)比打parseFloat或parseInt够简单了。

3. 某些特殊转置情况下使用。

例如以下几个,有些开发者会用这些转置的结果,但建议你除非很确定要什么结果再使用。

空字符串/null/false: +''得出0数字,但用parseFloat或parseInt会得出NaN。
科学记号: +'2e3'得2000,与parseFloat一致,parseInt会得出2。
16进位: +'0xf'得15,parseFloat得0,parseInt会得出15。

其他的语法还有很多,例如1*'123.456'-(-'123.456')之类的,这种就很少见也很少人在用了。

这是利用了js"隐性转换"的奇技淫巧啊,作用楼上都说了;而且用起来也方便

js中没有 =+ 运算符, 实际上是这样的:

orig_x = +rect.attr("x");

用来将字符串转换成数字,你可以理解为:

orig_x = parseInt(rect.attr("x"), 10);
撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题