JS基础技巧

最近刷题发现自己的JS基础并不是很牢固,所以把一些心得,技巧,易错点记录下来,方便复习。
1.创造出一个与原数组无关系,但值又完全一样的数组:
<blockquote>
数组是引用类型,通过newArr = arr造出来的数组与原数组完全一样,所以不行。
通过for循环固然可以创建一个新的数组,但更好的方式是用newArr = arr.slice(0)
同时,如果想在新数组上增删,用pop(),push(),shift(),unshift()自然不会错,更合适的是将复制数组与增删合并,活用arr.concat(),arr.slice()
</blockquote>

2.数组,字符串的删除方法
<blockquote>
arr.slice(start,end)
①不改变原数组;②返回值为新数组;③支持负号(即从后往前);④切下来的包括start不包括end。
arr.splice(index,removeCount,[appendItem1],...)
①改变原数组;②返回值为删掉的元素组成的数组;③不支持负号;


字符串实际上是先将str转化成new String(str),之后调用了方法,因此都不会改变原值。
str.slice(start,end)
和arr基本一样;
str.substr(start,removeCount)
和slice的区别在于第二个参数为删除的个数;
str.substring(start,end)
不支持负数,会将负数归零,并会自动将0前置。
</blockquote>

3.类数组=》数组:
在JS中有很多类数组,例如函数的arguments,DOM的node.children(),getElementsByXXX等等,所得的结果均是类数组,将其转换为数组才能使用数组的方法。
var arr = [].slice.call(类数组)

4.Object.hasOwnPropery / for(key in obj)
Object.hasOwnProperty(str):用于检查Object自身是否拥有以str为名的属性或方法;
for(let key in obj):尽可能枚举所有obj中的属性、方法名,包括原型链上的。
这两者的区别在于

  • 用法:一个是返回的boolean,用于检测是否存在;另一个用于枚举,循环返回字符串;
  • 作用范围:一个专注于自身对象,另一个拓展至对象所继承的原型链;

所以常常组合使用两者:

function Observer(data){
    this.data = data;
    this.get= function(){
   }
}
Obj.prototype.set = function(){
}

for(let key in obj){
    if(obj.hasOwnPropety(key)){
         
    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容