一、保护对象
1.每个属性都有六大特性:可以操作
Object.defineProperties(obj,{
"属性名":{
value: 实际存储值的位置,
writable: true/false,开关,控制着是否可以被修改
enumerable: true/false,开关,控制着是否可以被for in遍历到
configurable: true/false,开关,控制着是否可以被删除,还是一个总开关,一旦改为false,其他特性不可以在修改,一旦改为false,而且不可逆
get:()=>{只要获取数据的时候就会触发,拦截到数据},
set:()=>{只要设置数据的时候就会触发,拦截到数据,可以做出动态数据},
}
})
2.三个级别:
1、防扩展:Object.preventExtensions(obj);
2、密封:Object.seal(obj);
3、冻结:Object.freeze(obj);
二、对象的深浅拷贝
1、浅拷贝:利用按值传递
var obj1={};
var obj2=obj1;
2、深拷贝:两者长得一样,但是互不影响
var obj1={};
var obj2={...obj1}
var obj3=JSON.parse(JSON.stringify(obj1));
三、Error对象
1、浏览器自带4种错误类型:
1、语法错误:SyntaxError
2、引用错误:ReferenceError
3、类型错误:TypeError
4、范围错误:RangeError - 只有一个API会遇到num.toFixed(0\~100)
2、错误处理:因为报错后导致后续代码中断,我们不希望这个事情发生
try{
可能出错的代码
}catch(err){
err - 错误消息,但是可能是英文的
}
try...catch性能低下,我们用分支去代替它
3、抛出自定义错误:
throw new Error("自定义错误消息");
4、ES5 - 严格模式
"use strict";
作用:
1、禁止了全局污染
2、将静默失败升级为报错
补:
-
柯里化函数:方法名()()()(); 说明函数里面在不断的return出函数我们才能不断的调用
-
回调函数:没有名字的函数:
(1)自调:只能执行一次,好处:代替掉全局写法,函数中【没用的变量】会自动释放 (function(){ 操作 })();
(2)回调:匿名函数不是自调,就是回调,往往都是前辈们创建好了,我们学习如何使用,一切的回调都可以简化为箭头函数(一定要学会考虑this)
3.设计模式:编程思想
(1)单例模式:一个类只能创建一个对象
(2)观察者(订阅-发布)模式:一个发布,所有的订阅者都可以看到
4.事件轮询:因为JS默认是单线程应用,代码只能从上向下慢慢执行
(1)宏任务(异步代码):可以让后续代码先做,我们复杂的代码慢慢来,但是多个宏任务同时出现,无法确定先后顺序
1、定时器
2、ajax
(2)微任务:Promise对象
new Promise(ajax1).then(ajax2).then(ajax3);
注意:
1、Promise中的回调函数一定要放行,下一个才会执行
2、想要连续的.then出去前一个返回的是一个Promise对象