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