一、关于this篇:
1.this实际上是在函数被调用时发生的绑定,它指向什么完全取决于函数在哪里被调用
2.this优先级:new>显示绑定>隐式绑定>默认绑定。
3.如果把null或undefined作为this的绑定对象传入call、apply或者bind,这些值在调用时会被忽略,实际应用的是默认绑定规则
eg:
function foo(){
console.log(this.a);
}
var a=2;
foo,bind(null); //2
4.将arguments(类数组)变为数组
(1)Array.prototype.slice.apply(arguments) 或 [].slice.apply(arguments) 或 new Array().slice.apply(arguments)
(2)es6扩展运算符...
function foo(...arg){
console.log(arg);
}
foo.apply(null,[155,2,3,4,56,7]); 或 foo(155,2,3,4,56,7)
二、对象篇
1.对象深拷贝与浅拷贝
(1)浅拷贝(还是引用obj对象)
obj={name:'min'}
obj2=Object.assign({},obj)
(2)深拷贝(完完全全复制)
obj={name:'min'}
obj2=Object.assign({},JSON.parse(JSON.stringify(obj)))
2.对象属性描述
var myObj={};
Object.defineProperty(myObj,"a",{
value:2,
writable:true,
configurable:true,
enumerable:true
});
不变:
(1)对象常量(不可修改、重定义、删除)
var myObj={};
Object.defineProperty(myObj,"a",{
value:2,
writable:false,
configurable:false
});
(2)禁止扩展
var myObj={a:2};
Object.preventExtensions(myObj);
myObj.a=3;
myObj.a; //undefined (严格模式下:TypeError)
(3)密封(禁止扩展基础上加:configurable:false(不可重配、不可删除)) Object.seal(myObj)
(4)冻结(密封基础上加:writerble:false)Object.freeze(myObj);
3.对象的set和get
4.检查对象中属性是否存在
eg:obj={a:2}
(1)"a" in obj;/*检查属性“a”是否在obj的对象或是原型链上*/
(2)obj.hasOwnProperty("a"); /*只检查"a"是否在obj对象上(不含原型链)*/
(3)obj.propertyIsEnumerable("a");/*检查“a”是否在obj对象上(不含原型链)且满足 enumerable=true*/
(4)Object.keys(obj);/*obj所有可枚举属性*/
(5)Object.getOwnPropertyNames(obj);/*所有属性含不可枚举的*/