0%
这是一片思考的空间 -- arthinking
Spring 重构&代码整洁之道 软件设计 JVM 并发编程 数据结构与算法 分布式 存储 网络 微服务 设计模式
Java技术栈 - 涉及Java技术体系

Javascript中加号运算符的二义性注意事项

用Javascript写了一些动态效果,在编写如下代码时遇到了问题:

var rightBorder = 0;
//charge if has reach the end of the div
var currentLeft = $("#album_div_center_wrap_list").css("left");
currentLeft = currentLeft.substr(0, strLength(currentLeft)-2);
if(currentLeft < rightBorder){
//move each div
$("#album_div_center_wrap_list").stop().animate({left:(currentLeft + width)}, "slow");
}

最后一行的作用是让选择的元素向右移动,表面上看起来没什么特别的,但是运行的结果就是不按照预想的结果进行。于是在chrome的开发人员工具中查看属性。Oh,my god! 发现加过之后的left值为一万多,难怪不会再屏幕上显示。

分析到这里,也就找到了原因,还是Javascript的语言特性问题。Javascript中的加号操作符的二义性。

Javascript中加号操作的作用:

字符串拼接:var str = "left" + "right" 数值取正值:var m = -10; var n = - m; 数值求和:var a = 1; var b = 2; var c = a + b;

如果在表达式中包含字符串和数值则会进行字符串拼接。获取到的css属性,如left的值是10px,这里明显知道不是数值,即使截取字符串把px去掉之后(上面的:currentLeft = currentLeft.substr(0, strLength(currentLeft)-2);),没有显示的转换,仍然被当做字符串,所以相加当然是字符串的拼接了,解决方法就是在相加之前强制转换:

$("#album_div_center_wrap_list").stop().animate({left:(parseInt(currentLeft) + parseInt(width))}, "slow");

微博上看到一句话:“不应以苦劳来论成就, BUG 百出的代码,看似忙碌,实则是一种破坏。”没错,我们应该更多是思考如何挺高自己的自身能力进行高效率的编程。总结一下,想要用的出神入化还是得基础扎实,属性基本的规则,才能做到高效率编码。

欢迎关注我的其它发布渠道

订阅IT宅
内功修炼
Java技术栈
Java架构杂谈是IT宅精品文章公众号,欢迎订阅:
📄 网络基础知识:两万字长文50+张趣图带你领悟网络编程的内功心法 📄 HTTP发展史:三万长文50+趣图带你领悟web编程的内功心法 📄 HTTP/1.1:可扩展,可靠性,请求应答,无状态,明文传输 📄 HTTP/1.1报文详解:Method,URI,URL,消息头,消息体,状态行 📄 HTTP常用请求头大揭秘 📄 HTTPS:网络安全攻坚战 📄 HTTP/2:网络安全传输的快车道 📄 HTTP/3:让传输效率再一次起飞 📄 高性能网络编程:图解Socket核心内幕以及五大IO模型 📄 高性能网络编程:三分钟短文快速了解信号驱动式IO 📄 高性能网络编程:彻底弄懂IO复用 - IO处理杀手锏,带您深入了解select,poll,epoll 📄 高性能网络编程:异步IO:新时代的IO处理利器 📄 高性能网络编程:网络编程范式 - 高性能服务器就这么回事 📄 高性能网络编程:性能追击 - 万字长文30+图揭秘8大主流服务器程序线程模型
📄 Java内存模型:如果有人给你撕逼Java内存模型,就把这些问题甩给他 📄 一文带你彻底理解同步和锁的本质(干货) 📄 AQS与并发包中锁的通用实现 📄 ReentrantLock介绍与使用 📄 ReentrantReadWriteLock介绍与使用 📄 ReentrantLock的Condition原理解析 📄 如何优雅的中断线程 📄 如何优雅的挂起线程 📄 图解几个好玩的并发辅助工具类 📄 图解BlockingQueue阻塞队列
📄 消息队列那么多,为什么建议深入了解下RabbitMQ? 📄 高并发异步解耦利器:RocketMQ究竟强在哪里? 📄 Kafka必知必会18问:30+图带您看透Kafka
📄 洞悉MySQL底层架构:游走在缓冲与磁盘之间 📄 SQL运行内幕:从执行原理看调优的本质 📄 洞悉Redis技术内幕:缓存,数据结构,并发,集群与算法