保护对象
属性的六大特性
-
value:实际保存值的地方
-
writable:控制属性是否可以被修改
-
enumerable:控制属性是否可以被forEach遍历到
-
configurable:控制属性是否可以被删除
注: 也是总开关,若设置为false,则以上三个特性不可以再修改
-
get:获取数据时会进行拦截操作
-
set:设置数据时会进行拦截操作
修改四大特性
//方式一:修改单个属性
Object.defineProperty(对象名,"属性名",{
value:"",
writable:false,
...
})
//方式二:修改多个属性
Object.defineProperties(对象名,{
"属性名":{四大特性},
...
})
对象的三个级别
防扩展:防添加
Object.preventExtension(obj)
密封:防添加、删除
Object.seal(obj)
冻结:防添加、删除、修改
Object.freeze(obj)
对象的深浅拷贝
浅拷贝:利用按值传递
var obj1={"name":"obj1"};
var obj2=obj1;
深拷贝:两者互不影响
var obj1={"name":"obj1"};
var obj2={...obj1};
前后端数据相互转换
后端将对象转为字符存储
var JSONtxt=JSON.stringify(obj)
前端将后端数据转为对象
var jsonObj=JSON.parse(JSONtxt);
注: 以上两步也可完成对象的深拷贝
Error对象
浏览器自带4种错误类型
- SyntaxError(语法错误):符号/语法错误
- ReferenceError(引用错误) : 未创建使用
- TypeError(类型错误): 调用了不是自己的方法
- RangeError(范围错误): 只有一个API会碰到:num.toFixed(d) d的取值是0-100
错误处理
try{
可能出错的代码
}catch(err){
发生错误后才会执行的代码
err形参保存着错误的消息
}
【注】try...catch...的性能非常的差,可以用分支技术代替
抛出自定义错误
throw new Error("自定义错误消息")
ES5:严格模式
开启:"use strict" - 写在任何一个作用域的顶部都可以 作用: 1、禁止了全局污染,使用变量之前必须先创建变量 2、将静默失败升级为报错
柯里化函数:
函数多次多次调用:函数名()()()
function add(a){
return function(b){
return function(c){
console.log(a+b+c)
}
}
}
add(3)(5)(7);