SOURCE

console 命令行工具 X clear

                    
>
console
/**
	1.内层变量覆盖外层变量

//1.var
var name = 'Faker';
while(true){
  var name = 'zhuyong';
  console.log(name); //zhuyong
  break;
  
}

console.log(name);//zhuyong

//2.let
let names = 'Faker'
while(true){
  let names = 'zhuyong';
  console.log(names);//zhuyong
  break;
}

console.log(names);//Faker


/*
	2.循环变量泄露为全局变量


var a = [];
for(var i = 0; i < 10; i++){
  a[i]=functio(){
    console.log(i)
  }
}

a[6]();//10

var a = [];
for(let i = 0; i < 10; i++){
  a[i] = function(){
    console.log(i);
  }
}

a[6]();//6

//const 声明常量,一旦声明,常量值不得改变 一般使用在对象的引用和常量定义,引入第三方库

const PI = 3.141596285;

PI = 8;
console.log(PI);//Assignment to constant variable.

const moment = require('moment');



//set 和map 数据结构 与Array曾
//删、盖查对比

let map = new Map();
let set = new Set();
let array = [];

//add 
map.set('t',1);
set.add({t:1});
array.push({t:1});

console.info(map,set,array);
//map{'t'=>1} set{{t:1}} 
//array[{t:1}]

//select
let map_exist = map.has('t');
let set_exist = set.has({t:1});
let array_exist = array.find(item => item.t);

console.info(map_exist,set_exist,array_exist);
//true false {t:1}

//modify
map.set('t',2);
set.forEach(item => item.t ? item.t = 2 : '');
array.forEach(item => item.t ? item.t = 2 : '');

console.info(map,set,array);

//delete
map.delete('t');
set.forEach(item => item.t ? set.delete(item) : '');
let index = array.findIndex(item => item.t);
array.splice(index,1);
console.info(map,set,array);




//calss extends super

class Human {
  constructor(name) {
    this.name = name;
  } 
  sleep() {
    console.log(this.name + " is sleeping"); 
  } 
} 
let man = new Human("Davis"); 
man.sleep(); 

class Boy extends Human {
  constructor(name, age) {
    super()
    this.name = name; 
    this.age = age; } 
  info(){
    console.log(this.name + 'is ' + this.age + 'years old'); 
  } 
} 
let son = new Boy('Faker','8'); 
son.sleep();
son.info();

//constructor 构造函数  子类必须调用 super();super关键字,它指代父类的实例(即父类的this对象)。子类必须在constructor方法中调用super方法,否则新建实例时会报错。这是因为子类没有自己的this对象,而是继承父类的this对象,然后对其进行加工。如果不调用super方法,子类就得不到this对象。





//arrow function 箭头函数


//ES5
let arr = [1,3,5,7,9];
arr.forEach(function(val,key){
  return console.log(val,key);
});

//ES6
arr.forEach((val,key) => console.log(val,key));

class Human {
  constructor(name){
    this.name = name; 
  } 
  sleep() {
    setTimeout( () => { 
      console.log(this.name + "is sleeping");
    }, 1000) 
  } 
}

let man = new Human("mis Ma");
man.sleep();

//当我们使用箭头函数时,函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,它的this 是继承外面的,因此内部的this就是外层代码块的this。





// template string  模板字符串 :使用 '`'来创建的字符串,此种方法创建的字符串里面可有包含美元符号加花括号包裹的变量${val} ,可理解为java 中的格式化字符串中的占位字符串


let num = Math.random();
console.log(`num is ${num}`);

$("#main").html(` <h1>今天天气很好!</h1> <p>产生一个随机数${num}</p> `);
//模板字符串中所有的空格,新行缩进,都会原样输出在生成的字符串中。



//destructuring  解构:按一定模式,从数字和对象中提取值,对变量进行赋值。

//用途一:交换变量的值  不需要中间变量,

let a = 1;
let b = 2;
[a,b] = [b,a];
console.log(a,b);

//用途二,提取json 
let jsonData = {
  id : 1,
  name : 'zhuy',
  age : '26',
  data : [5,5]
  
};

let {id,name,age,data} = jsonData;

console.log(id,age,name,data);


//用途三,函数参数定义

//参数是一组有序的值
function f([x,y,z]){
  ...
}
  
f(1,2,3);

//参数是一组无序值
function f({x,y,z}){
  ...
}
  
f(z:3,y:2,z:1)



//default 默认参数

//传统指定默认参数
function say1(name){
  var name = name || 'Faker';
  console.log('Hello'+name);
}

//ES6 默认参数
function say2(name = 'Davis'){
  console.log(`hello `);
}



//rest 参数
//rest 参数只包括那些没有给出名称的参数
//rest 参数是Array的实力,可以直接应用sort,map,forEach,pop 等方法;
//rest 参数之后不能再有其它参数
//函数的length属性,不包括rest参数;

function fn(x,y,...rest){
  console.log(rest);
}
fn(1,2,'pake',6) //['pake',6]
console.log(fn.length); //2

*/

//Proxy 代理服务,可监听对象身上发生了什么事,并在这些事情之后执行一些相应的操
//定义被监听的目标对象
let man = {name:'helle',age:26};

//定义处理程序
let handle = {
  set(receiver,property,value){
    console.log(property,'is changed to',value);
    receiver[property] = value;
  }
};

//创建代理进行侦听
man = new Proxy(man,handle);

//触发代理
man.age = 22;
man.name = 'zhuyong';

//Promise 对象状态 分为三种:
//1.pending (执行中)
//2.Resolved(已完成)
//3.Rejected(已失败)


























<div id="main"><div>