let const promise class symbol
// var let const
{
var a=12;
let b=15;
{
console.log(a,b)//12,15
}
}
console.log(a,b)//12 notdefined
//1、leak
for(let i=0;i<5;i++)
{}
console.log(i)//notdefined
//2、提升
function f(){
var a;//提升 类似于这样
console.log(a);//undefined
var a=12;
}
function f(){
console.log(a);//notdefined
let a=12;
}
{
let a;
var a;//Uncaught SyntaxError: Identifier 'a' has already been declared
}
//3、let代替立即执行匿名函数
let config;
{
config=[];
config.push(1)
config.push(2)
config.push(5)
}
var config =(function(){
var config=[];
config.push(1)
config.push(2)
config.push(5)
})();
//const 内存地址不能修改
const a=12;
a=15//x
const a={
name:'xue',
}
a.name='hahaha'
console.log(a.name)//hahaha
Object.freeze(a)//彻底冻结
a.name='xuxuxux'//严格模式抛出错误 不可更改
// class 类
//以前的写法 fulei
function User(name,age){
this.name=name;
this.age=age;
}
//静态方法
User.etclassname=function(){
return 'User';
}
//添加公共方法
User.prototype.changename=function(name){
this.name=name
}
//取值对线
Object.defineProperty(User.prototype,'info',{
get(){
return 'name'+this.name ;
}
})
//zilei
function Manement(name,age,password)
{
User.call(this,name,age)
this.password=password;
}
//继承静态方法
Manement.__proto__=User;
//继承prototype方法
Manement.prototype=User.prototype;
// 新方法
Manement.changepassword=function(password){
this.password=password;
}
var manement=new Manement('xue','14','123456');
manement.changename('xuexuexue');
console.log(manement.info)
//class
class User{
constructor(name,age){
this.name=name;
this.age=age;
}
static getclassname(){
return 'User';
}
changename(name){
this.name=name;
}
changeae(age){
this.age=age;
}
get info(){
return 'same as '
}
}
class Manement extends User{
constructor(name,age,password)
{
super(name,age)
this.password=password;
}
changepassword(password){
this.password=password;
}
}
//promise
function async(a,b){
return new Promise(function(resolve,reject)
{
//有结果调用resolve 并且把结果给resolve 错误的话有reject函数
setTimeout(function(){
resolve(a+b);
},200)
})
}
async(1,2)
.then(function(resulut)
{
if(resulut>2)
{
return async(resulut,2);
}
})
.then(function(resulut)
{
if(resulut>4)
{
console.log('ok')
}
})
//原生
function asyncc(a,b,cd)
{
setTimeout(function(){
cd(a+b);
},200)
}
asyncc(1,2,function(resuluts)
{
if(resuluts>2){
asyncc(resuluts,2,function(resuluts)
{
if(resuluts>4){
console.log('ok')
}
})
}
})
//例子
class User{
constructor (name){
this.name=name;
}
send(ch)
{
let name=this.name;
return new Promise(function(resolve,reject)
{
setTimeout(function(){
if(name=='xue'){
resolve('success');
}
else{
reject('error')
}
},200);
});
}
}
//如果有reject并且函数里面没有在抛出异常 外部的catch不会执行
const useer=new User('xuee');
useer.send()
.then(function(a){
console.log(a);
},function(err){console.log(err)}).catch(function (err){console.log(err)})
var promise=new promise(function(resolve,reject)
{
resolve('hello')
})
promise.then(function(result){
console.log(result)
})
var promise2=Promise.reject('err');
promise2.then(null,function(err){
console.log(err)
})
function ascynfun(a,b){
return new Promise(function(resolve,reject){
if(typeof a!='number'||typeof b!='number')
{
reject('no number')
}
setTimeout(function(){
resolve(a+b)
},200);
})
}
var resultlist=[];
ascynfun(1,2)
.then(function(result){
resultlist.push(result);
return ascynfun(2,3);
})
.then(function(result){
resultlist.push(result);
return ascynfun(3,4);
})
//共同点 一旦有错误抛出错误
var promise=Promise.all([ascynfun(1,2),ascynfun(2,3)])
//[3,5] 返回所有promise结果
var promise=Promise.race([ascynfun(1,2),ascynfun(2,3)])
//得到结果会排序 哪个结果先得到就会得到谁
//symbols 不重复
let name=Symbol('name');
let name2=Symbol('name');
name==name2 //false
let name=Symbol.for('name');
let name2=Symbol.for('name');
name==name2 //true
Symbol.keyFor(name)//name
//模拟私有属性
let getname=Symbol('name');
let obj={
[getname](){
return 'xue'
}
}
console.log(obj[getname]())
//属性遍历
let name=Symbol('name')
let obj={
age:22,
[name]:'xue'
}
console.log(Object.keys(obj));
//["age"] 打印不出来 symbol的那个
for (let i in obj){
console.log(i)
}
//age
Object.getOwnPropertyNames(obj)
//['age']
//解决方法
Object.getOwnPropertySymbols(obj)