JS易犯错集合

摘要:JS开发过程中一些极易落入的陷阱,你中招了没?


1、字符串替换的古怪现象

先来看如下一段代码:  

 (function() {
       var srcStr = 'one OR zero is one',
           desStr = '';
           
       desStr = srcStr.replace('one', 'zero');
       console.log(srcStr);
       console.log(desStr);
   }());

如上,结果是什么?

one OR zero is one

zero OR zero is one

你会惊讶的发现:结果不是想象中的'zero OR zero is zero',这是因为String.prototype.replace方法默认只将第一次匹配到的字符串予以替换,而非完全替换所有的匹配结果。

那么怎样才能实现完全替换呢?正则表达式!

 desStr = srcStr.replace(/one/g, 'zero');

再看结果:zero OR zero is zero


继续,将源字串修改为句首字母大写形式:var srcStr = 'One OR zero is one',执行上面的代码,

结果:One OR zero is zero

已经完全替换所有匹配结果了,怎么还不行?

可能你已经知道原因了,区分大小写。

继续解决问题,通过/i忽略大小写的差异 desStr = srcStr.replace(/one/gi, 'zero');

再看结果:zero OR zero is zero


2、对象本身还是引用?

var src = [1,2,3];

      des = src;

      des = [];

此时,src也同样是[]了么?

答案是否定的,这就是著名的"对象传递时实际只是在传递引用",于是乎就有了des被重新赋值为空数组,而其从src处得来的引用指向的对象(数组[1,2,3]),仍然不变。

所以当想清空该数组对象时,需要使用length属性来截断,即操作引用对应对象本身的属性,进而影响该对象。

des.length = 0;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值