ES6

作者: fb941c99409d | 来源:发表于2019-03-13 00:35 被阅读0次

let 和const

//var 声明的变量会预解析
console.log(a);//undefined
var a =123;
//1.let和const声明的变量不会预解析 */ 
console.log(let_var);//报错
let let_var = 456;
//2.let和const在同一个作用域下不能重复声明 */
let let_var = 789;//报错
//3.const 是常量  必须初始化不能只声明不赋值 不能重复赋值*/
const const_;//报错
const const_ = 12211;
const_=5454;//报错
//4.let和const 只能在当前块级作用域内访问 块级作用域指 除了对象的{}  if for switch try catch或直接的{}内 */
{
    let block_ = 1231;
}
console.log(block);//报错

解构赋值

//用数组的解构形式赋值变量
let [a,b,c] = [1,2,3];
console.log(a,b,c);//1,2,3
let [,,c] = [1,2,3]
console.log(c)//3
let [aaa,bbb,ccc] = [,222,];
console.log(aaa,bbb,ccc);//undefined ,222,undefined
let [aaaa=1111,bbbb,cccc] = [,2222,];
console.log(aaaa,bbbb,cccc);//1111 2222 undefined

/* 用对象的解构形式赋值变量 */
let {d,e,f} = {d:1,e:2,f:3}
console.log(d,e,f);//1,2,3
//换位置也没事 属性名对应就行
let {dd,ee,ff} = {ee:22,dd:11,ff:33}
console.log(dd,ee,ff);//11,22,33

// 对象属性别名 as   d3代表的就是ddd
let {ddd:d3,eee,fff} = {ddd:111,eee:222,fff:333}
console.log(d3,eee,fff);//11,22,33

//字符串的解构赋值
let [a1,b1,c1] = "hello";
console.log(a1,b1,c1);//h,e,l
// 对象的形式获取字符串长度
let {length} = "hello";
console.log(length);//5

字符串模板

let obj = {
    username :"swk",
    age      :1000,
}
let fun = function (a,b){
    return a+b;
}
let  tpl =`
    <div>
        <span>${obj.username}</span>
        <span>${obj.age}</span>
        <span>${fun(1,99)}</span>
    </div>

`;

字符串扩展函数

// includes('字符串',从哪个下标开始) 判断字符是否存在
console.log("hello world".includes("world",6));//true
let url = "admin/index.php";
// startsWith 判断是否以字符串开始
console.log(url.startsWith("admin1"));//false
// endsWith   判断是否以字符串结束
console.log(url.endsWith("php"));//true
//repeat(count) : 重复指定次数a
console.log('a'.repeat(5));
//补全字符串长度 padStart padEnd
let str = 'i';
str.padStart(5,'mooc') // imooc
str.padEnd(6,'mooc') // imoocm

对象的简化写法

//简化的对象写法
//* 省略同名的属性值
//* 省略方法的function
let x = 3,y = 5;
let obj = {
        x, //x:x
        y, //y:y
        getPoint(){//getPonit:function......
            return this.x
        }
};

箭头函数

//1.没有形参,并且函数体只有一条语句
let fun1 = () => console.log('fun1()');
//2.一个形参,并且函数体只有一条语句
let fun2 = x => x;
console.log(fun2(5));//5
//3.形参是一个以上
let fun3 = (x, y) => x + y;
console.log(fun3(25, 39));//64
//4.//函数体有多条语句
let fun4 = (x, y) => {
        console.log(x, y);
        return x + y;
};
console.log(fun4(34, 48));//82

箭头函数的this

//1、箭头函数没有自己的this,箭头函数的this不是调用的时候决定的,而是在定义的时候处在的对象就是它的this
//2、扩展理解: 箭头函数的this看外层的是否有函数,
        //如果有,外层函数的this就是内部箭头函数的this,
        //如果没有,则this是window。
//3 箭头函数没有 arguments
let obj = {
        name : 'kobe',
        age : 39,
        getName : () => {
            btn2.onclick = () => {
                console.log(this);//window
            };
        }
 };
obj.getName();

let person = {
        name : 'kobe',
        age : 39,
        getName :function () {
            btn2.onclick = () => {
                console.log(this);//preson
            };
        }
 };
person.getName();

function Person() {
     this.obj = {
         showThis : () => {
             console.log(this);//Person对象
         }
     }
 }
let fun5 = new Person();
fun5.obj.showThis();

三点运算符

//函数中的运用 
function(a,...val){// 3点运算符 只能写在最后,得到是没有定义形参的实参列表
  //arguments是伪数组不能使用数组的方法,而通过三点运算符得到的实参列表是真数组,可以使用数组方法
  val.forEach(item,index){
    console.log(item);
  }
}
//数组的运用
let arr1=[2,3,4,5];
let newArr = [1,...arr1,6];
console.log(newArr);//[1,2,3,4,5,6]
console.log(...newArr);//1,2,3,4,5,6

数值扩展

//1. 二进制与八进制数值表示法: 二进制用0b, 八进制用0o
console.log(0b1010);//10
console.log(0o56);//46
//2. Number.isFinite(i) : 判断是否是有限大的数
console.log(Number.isFinite(NaN));//false
console.log(Number.isFinite(5));//true
//3. Number.isNaN(i) : 判断是否是NaN
console.log(Number.isNaN(NaN));//true
console.log(Number.isNaN(5));//falsse
//4. Number.isInteger(i) : 判断是否是整数
console.log(Number.isInteger(5.23));//false
console.log(Number.isInteger(5.0));//true
console.log(Number.isInteger(5));//true
//5. Number.parseInt(str) : 将字符串转换为对应的数值
console.log(Number.parseInt('123abc'));//123
console.log(Number.parseInt('a123abc'));//NaN
//6. Math.trunc(i) : 直接去除小数部分
console.log(Math.trunc(13.123));//13
//7.Number.isSafeInteger 判断是否在 最大值和最小值之间的整数

数组的扩展

//1. Array.from(v) : 将伪数组对象或可遍历对象转换为真数组
let btns = document.getElementsByTagName('button');
//包装完就是真数组就可以数组的方法
Array.from(btns).forEach(function (item, index) {
        console.log(item, index);
});
//2. Array.of(v1, v2, v3) : 将一系列值转换成数组
let arr = Array.of(1, 'abc', true);
console.log(arr);[1, 'abc', true]
//3. find(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素
let arr1 = [1,3,5,2,6,7,3];
let result = arr1.find(function (item, index) {return item >3}); // 5
//4. findIndex(function(value, index, arr){return true}) : 找出第一个满足条件返回true的元素下标
let arr1 = [1,3,5,2,6,7,3];
let result = arr1.findIndex(function (item, index) {return item >3}); // 2

对象的扩展

//1. Object.is(v1, v2) 判断2个数据是否完全相等 ,底层其实是转换为字符串去比较
  console.log(0 == -0);//true
  console.log(Object.is(0, -0));//false
//2. Object.assign(target, source1, source2..)* 将源对象的属性复制到目标对象上

//3. ES6 对象可以直接操作隐式原型 __proto__ 属性
   let obj1 = {name : 'anverson', age : 41};
   let obj2 = {};
   obj2.__proto__ = obj1;

相关文章

网友评论

      本文标题:ES6

      本文链接:https://www.haomeiwen.com/subject/lmmnpqtx.html