您的位置:首页 > 其它

一个小错误引发思考最终得出数组转字符串的新方法

2015-08-28 23:29 525 查看
今天在项目中犯了一个算得上是低级错误的错误吧

我在构造函数里声明了一个angle变量,

this.angle;

然后在后面某函数中对此变量进行了+=操作,

this.angle+=90

最后在一系列逻辑后我发现this.angle报错 NaN,马上定位到构造函数,就发现了原来该变量声明了但并未初始化赋值

求不笑,偶尔也是会傻乎乎犯些这种低级错误的,而这一次暴露出来完全是因为我在后面使用了+=操作,如果后面是单纯的 = 赋值操作,这样构造函数里是可以不初始化的

这时,我突然想试试如果+=后面不是数字会怎样,于是

this.angle+="abc"

控制台输出 undefinedabc

原来一个未初始化的变量+=一个字符串会得到undefined和该字符串拼接起来的一个字符串啊!

this.angle+=true 或 this.angle+=false

控制台输出 NaN

原来一个未初始化的变量+=一个bool值就相当于+=1或者+=0啊,所以最后得出了和+=数字一样的NaN啊!

如果你认为我就只是发现了这么点东西你就太年轻了

this.angle+=[1,2,3,"a"]

控制台输出 undefined1,2,3,a

然后我发现数组变成字符串了

接下来我突然想起原来有一个简单的将数字转为字符串的方法

var num=1;

num+=""

得到num="1"

如果我们将一个数组+=""

[1,2,3,a]+=""

得到1,2,3,a

然后用replace干掉,后就成功的将数组转换为字符串了

于是,数组转字符串我又发现了一种方法,虽然可能早就有人发现了,或者这方法很蠢,但我总算是发现了第二个方法

var arr=[1,2,3,5];

arr=(arr+"").replace(/,/g,"");

最终得到1235

而最常用的数组转字符串的方法是

arr=arr.join("");

当然,这种最常用的怎么看好像也比上面的好,但这并不是重点

重点是我又发现了一种方法有木有!!

所以有的时候犯一些小错误时不要轻易一笔带过,静下心来想一想,多思考一下,也许你就会有新的收获哦

ps:

附上一个字符串转数组的高逼格方法,也是以前无意中发现的哟

常规的方法是

str.split("");

高逼格方法是

str=Array.prototype.slice.call(str); //call换成apply也可以
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: