es6从头到尾梳理一遍(更新中)

const

之前用var声明变量,变量想怎么改就怎么改,这里const关键字也是声明变量的,不过声明的是常量,常量就是固定的一个值,不能改变 其他功能更let 差不多 不存在变量提升,但必须提前声明,和let一样

if(true){ alert(age); //报错 使用时 未声明 const age=20; }

不可重复声明同一个变量 var age=20; const age=20;//报错 因为变量age已经存在

声明后要赋值,没有赋值要报错 const age=20; const name;//报错。因为没有赋值;

这个时候,我们先引入一个概念:在赋值过程中,我们可以分为传值赋值和传址赋值。这里我们用到了传址赋值,什么叫传址赋值? 传址:在赋值过程中,变量实际上存储的是数据的地址(对数据的引用),而不是原始数据或者数据的拷贝

var student1 = {"name":"张三"};

    var student2 = student1;

    student2.name = "李四";

    console.log(student1);

    //结果:输出 {name: "李四"}

    console.log(student2);

    //结果:输出 {name: "李四"}
复制代码

为什么student2的name改成了“李四”,student1的那么也变成了“李四”呢?这就是传址赋值!

如果这样写的话就会报错:

 const Person = {"name":"张三"};
    Person.age = 20;
    Person = {}; 
复制代码
//错误,企图给常量Person赋新值(新地址)
复制代码

js 引用赋值和传值赋值

number,string类型都是基本类型,而基本类型存放在栈区,访问时按值访问,赋值是按照普通方式赋值;

对象和数组是通过引用来赋值的,所以改变a的同时b也会跟着改变。 如果你对栈和堆不太理解以下引用百度一张图可以非常清晰:

解构

如果是数组的话key要对应上

let [a1, a2] = [1, 2, 3]; //数组的key要对应上
console.log(a1,a2); // 1,2
复制代码

// =可以赋默认值 :用来更改名字的,obj可以不对应key,name对应上就可以l

let arr = [{name:'zfpx',age:9},'回龙观',[1,2,3]];
let [{age,address="东大街"},b] = arr;
console.log(b,age,address); // 回龙观 9 东大街
复制代码

##展开运算符 // 展开运算符 可以合并对象和数组 let school = {name:'zfpx',age:9}; let me = {name:'jw',address:'回龙观'}

let obj = {...school,...me}; console.log(obj);

类 Class

先说说 以前就是构造函数

function Parent(){
    this.name = '';
}

Parent.prototype.smoking = function(){
    console.log('吸烟')
}
function Child(){
}

Child.prototype = new Parent();
let child = new Child;
console.log(child.name);
复制代码

当我们创建一个函数,系统就会为这个函数自动分配一个prototype指针,指向它的原型对象。并且可以发现,这个原型对象包含两个部分(constructor 和 proto)其中constructor指向函数自身。 当然,当我们将该函数作为模版创建实例(new方法)的时候,我们发现创建出的实例是一个与构造函数同名的object,这个object是独立的,他只包含了一个__proto__指针(实例没有prototype,强行访问则会输出undefined),这个指针指向上面提到的构造函数的prototype原型对象。 方便理解特意画了一张图

所以当Child.prototype = new Parent();的时候,child继承parent 的公有和私有方法和属性,但是这样做有个问题,就是child的构造函数指向的是Parent。

转载于:https://juejin.im/post/5abda1885188255570061ed2

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值