Core14 保护对象、对象的深浅拷贝、Error对象、柯里化函数

55 阅读3分钟

保护对象

1.每个属性都有四大特性:
{
    value: '很多', //实际保存值的地方
    writable: true, //开关,控制着这个属性是否可以被修改 - 默认值为true
    enumerable: true, //开关,控制着这个属性是否可以被for in循环遍历到 - 默认值为true
    configurable: true //开关,控制着这个属性是否可以被删除 - 默认值为true
}
修改四大特性:
	1Object.defineProperty(对象名,"属性名",{
			四大特性
		})

		调用一次方法只能保护一个属性的四大特性

	2Object.defineProperties(对象名,{
			"属性名":{四大特性},
			...
		})
                至少方法只调用了一次,但是四大特性写着始终麻烦,甚至不能防止添加



23个级别
    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);//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); - Node.js就是这句话,Node.js也是“js”,历史上第一次一门语言可以通吃前后端
    前端脱衣服(字符串转对象):var jSONObj=JSON.parse(JSONtxt);
    此方法也能实现深拷贝

Error对象:错误

1、以后工作/学习的目的:
    1、快速找到错误
    2、记住要防用户
2、浏览器自带4种错误类型:可以快速找到自己的错误
    	1、语法错误:SyntaxError - 一定是你的符号/语法写错
    	2、引用错误:ReferenceError - 没有创建就去使用了
    	3、类型错误:TypeError - 不是你的方法,你却去使用了
    	4、范围错误:RangeError - 只有一个API会碰到:num.toFixed(d);//d取值范围:0~100之间

3、只要发生错误,就会报错,会导致后续代码终止(闪退),我们不希望
    	错误处理:就算发生错误,我们也不希望报错,而是给出一个错误提示,让后续代码依然可以继续执行!
    	语法:
    		try{
    			只放入你可能出错的代码
    		}catch(err){
    			发生错误后才会执行的代码
    			err形参就保存着错误的消息,只不过是英文的,中国人不一定看得懂,所以建议你添加上中文的错误提示
    		}
    	try...catch...的性能非常的差,几乎事所有代码里性能最差的,放在try中的代码效率都会被降到最低
    	可以用一个技术代替他:分支技术!
    	开发经验的累计:记住一切的客户端输入/用户输入都是坏人 - 但是你不担心,只要你做还要防护就不会出错(!isNaN、正则)

4、抛出自定义错误:只要是错误,后续代码都不会执行
    	throw new Error("自定义错误消息")

5ES5:严格模式
    	开启:"use strict" - 写在任何一个作用域的顶部都可以
    	作用:
    		1、禁止了全局污染,使用变量之前必须先创建变量
    		2、将静默失败升级为报错
    	铺垫:以后我们用了gulp技术打包项目后,有的js会自动加上严格模式,我劝你把他删掉

柯里化函数

function add(a){
	return function(b){
		return function(c){
                    console.log(a+b+c)
		}
	}
 }
add(3)(5)(7);
//  a  b  c