最近刷题发现自己的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)){
}
}
网友评论