保护对象
- 保护对象的属性和方法
- 保护对象不重要
- 如果你不用面向对象开发,那你也没有对象可保护
- 前辈们都没保护
- 别人一般来说不可能知道你取的对象名字叫什么
四大特性
- value: 1001, //实际保存值的地方
- writable: true, //开关:控制着是否可以被修改 - 默认值:都为true
- enumerable: true, //开关:控制着是否可以被for in循环遍历到 - 默认值:都为true
- configurable: true //开关:控制着是否可以被删除 - 默认值:都为true,总开关:一旦设置为false,其他特性不可以再修改,而且它本身也是一旦设置为false,不可逆
修改四大特性
Object.defineProperty(对象名,"属性名",{
修改四大特性
})
Object.defineProperties(对象名,{
"属性名":{修改四大特性},
...
})
四大特性,其实应该叫六大特性 - 可以帮助我们做出动态数据
Object.defineProperty(obj,"name",{
get:()=>{
console.log("获取数据会进行拦截");
},
set:v=>{
console.log("设置数据会进行拦截");
v;
d1.innerHTML=v;
}
})
三个级别
防扩展
- 防止添加
Object.preventExtensions(obj);
密封
冻结
- 防止添加和删除和修改
Object.freeze(obj);
对象的深浅拷贝
浅拷贝
var obj1={"name":"obj1"};
var obj2=obj1;
深拷贝
var obj1={"name":"obj1"};
var obj2={...obj1}
- 如何脱掉后端传来的数据
- 后端穿衣服:
var jsonText=JSON.stringify(obj1);
- 前端脱衣服:
var jsonObj=JSON.parse(jsonText);
- 此方法也能实现深拷贝
Error对象
浏览器自带4种错误类型
- 语法错误:
SyntaxError - 一定是你的符号写错了
- 引用错误:
ReferenceError - 没有创建就去使用了
- 类型错误:
TypeError - 不是你的方法,你却去使用了
- 范围错误:
RangeError - 只有一个API会碰到:num.toFixed(d);//d取值范围:0~100之间
错误处理
- 就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码可以继续执行
try{
只放入你可能出错的代码
}catch(err){
发生错误后才会执行的代码
alert(err);
alert("中文的错误提示,来提示用户");
}
- try...catch...的性能非常差,几乎是所有代码里最差的,放在try中的代码效率会被降到最低
- 可以用一个技术代替他:分支结构
- 只要你做好该做的防护就不会出错(!isNaN、正则)
抛出自定义错误
- 只要是错误,后续代码都不会执行
throw new Error("自定义错误消息");
ES5:严格模式
- 开启:
"use strict"; - 写在任何一个作用域的顶部都可以
- 作用
- 禁止了全局污染,使用变量之前必须先创建变量
- 将静默失败升级为了错误
柯里化函数
function add(a){
return function(b){
return function(c){
console.log(a+b+c);
}
}
}
add(3)(5)(7)