保护对象
1.每个属性都有四大特性:
{
value: '很多',
writable: true,
enumerable: true,
configurable: true
}
修改四大特性:
1、
Object.defineProperty(对象名,"属性名",{
四大特性
})
调用一次方法只能保护一个属性的四大特性
2、
Object.defineProperties(对象名,{
"属性名":{四大特性},
...
})
至少方法只调用了一次,但是四大特性写着始终麻烦,甚至不能防止添加
2、3个级别
1、防扩展:防添加
Object.preventExtensions(obj);
2、密封:防添加防删除15:25 2023/5/299
Object.seal(obj);
3、冻结:防添加防删除防修改
Object.freeze(obj);
保护对象不重要:
1、如果你不用面向对象开发,那你也没有对象可以保护
2、前辈们都没有保护,我们也不用保护
3、别人一般来说都不可能知道你取得对象名字叫什么
四大特性,其实应该叫六大特性 - 可以帮助我们做出动态数据,以后不会手动使用,只是明白Vue底层就是用到了set拦截操作
Object.defineProperty(lhl,"name",{
get:()=>{
console.log("获取数据会进行拦截操作");
},
set:v=>{
console.log("设置数据会进行拦截操作"+v);
h1.innerHTML=v;
},
})
对象的深浅拷贝
1、浅拷贝:利用按值传递
var obj1={"name":"obj1"}
var obj2=obj1
2、深拷贝:两者互不影响
var obj1={"name":"obj1"}
var obj2={...obj1}
3、以后如何脱掉后传来的数据的衣服
后端穿衣服(对象转字符串):var JSONtxt=JSON.stringify(obj)
前端脱衣服(字符串转对象):var jSONObj=JSON.parse(JSONtxt)
此方法也能实现深拷贝
Error对象:错误
1、以后工作/学习的目的:
1、快速找到错误
2、记住要防用户
2、浏览器自带4种错误类型:可以快速找到自己的错误
1、语法错误:SyntaxError - 一定是你的符号/语法写错
2、引用错误:ReferenceError - 没有创建就去使用了
3、类型错误:TypeError - 不是你的方法,你却去使用了
4、范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);
3、只要发生错误,就会报错,会导致后续代码终止(闪退),我们不希望
错误处理:就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码依然可以继续执行!
语法:
try{
只放入你可能出错的代码
}catch(err){
发生错误后才会执行的代码
err形参就保存着错误的消息,只不过是英文的,中国人不一定看得懂,所以建议你添加上中文的错误提示
}
try...catch...的性能非常的差,几乎事所有代码里性能最差的,放在try中的代码效率都会被降到最低
可以用一个技术代替他:分支技术!
开发经验的累计:记住一切的客户端输入/用户输入都是坏人 - 但是你不担心,只要你做还要防护就不会出错(!isNaN、正则)
4、抛出自定义错误:只要是错误,后续代码都不会执行
throw new Error("自定义错误消息")
5、ES5:严格模式
开启:"use strict" - 写在任何一个作用域的顶部都可以
作用:
1、禁止了全局污染,使用变量之前必须先创建变量
2、将静默失败升级为报错
铺垫:以后我们用了gulp技术打包项目后,有的js会自动加上严格模式,我劝你把他删掉
柯里化函数
function add(a){
return function(b){
return function(c){
console.log(a+b+c)
}
}
}
add(3)(5)(7);