ES6常用语法

Posted zcy9838

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6常用语法相关的知识,希望对你有一定的参考价值。

1.变量声明let与const(注意与var的区别)

/**
 * 声明变量let和const
 */

//let声明的变量不存在预解析
//报错 flag is not defined
 console.log(flag);
 let flag = 123;
//let声明的变量不允许重复(在同一个作用域内)
 //报错Identifier ‘flag‘ has already been declared
let flag = 123;
let flag = 456;
console.log(flag);
//ES6引入了块级作用域,而之前在浏览器中的JS是不存在块级作用域的
if (true) 
    //var flag = 123;   //用var声明的flag变量在for循环外也可以正常打印出来
    let flag = 123;     //用let声明的flag变量在for循坏外面打印报错:flag is not defined

console.log(flag);
//const用来声明常量
//const声明的常量不允许重新赋值
//报错:Assignment to constant variable.
const n = 1;
n = 2;

//const声明的常量必须初始化
//报错:Missing initializer in const declaration
const a;

 2.变量的解构赋值

/**
 * 变量的解构赋值
 */
/* 
var a = 1;
var b = 2;
var c = 3;
 */    //或者var a = 1, b = 2, c = 3;

//ES6中数组的解构赋值
//var [a,b,c] = [1,2,3];      //打印结果:1 2 3
//let [a,b,c] = [,123,];      //打印结果:undefined 123 undefined
let [a = 111,b,c] = [,123,];  //打印结果:111 123 undefined
console.log(a,b,c);
//对象的解构赋值
//对象的赋值与顺序没有关系,是通过对象的名称进行赋值
//let foo,bar = foo:‘hello‘,bar:‘hi‘;
let foo,bar = bar:‘hi‘,foo:‘hello‘;
console.log(foo,bar);

//对象的属性别名(如果有了别名,那原来的名字就无效了)
let foo:abc,bar = bar:‘hi‘,foo:‘hello‘;  //打印结果:hello hi
//let foo:abc,bar = bar:‘hi‘,abc:‘hello‘;   //打印结果:undefined ‘hi‘
console.log(abc,bar);   //正常打印
//console.log(foo,bar);     //报错:foo is not defined

内置对象Math(Math是对象,不是函数)

let cos,sin,random = Math;
//字符串的解构赋值
//[]里面声明的叫变量,这种方法不能获取字符串的长度
let[a,b,c,d,e] = "hello";
console.log(a,b,c,d,e);   //打印结果:h e l l o

let[a,b,c,d] = "hello";
console.log(a,b,c,d);      //打印结果:h e l l

//里面声明的是对象,即对象的解构赋值
let length = "hello";
console.log(length);    //打印结果:5

//对象的解构赋值指定默认值
let foo:abc = ‘hello‘,bar = bar:‘hi‘;
console.log(abc,bar);

 3.字符串扩展

/**
 * 字符串相关扩展
 * 几个常用的API:
 * includes():判断字符串中是否包含指定的子串,有的话返回true,否则返回false
 *              参数一:匹配的字符串;参数二:从第几个开始匹配
 * startsWith():判断字符串是否以特定的字符串开始
 * endsWith():判断字符串是否以特定的字符串结束
 * 
 * 模板字符串
 */

/* console.log(‘hello world‘.includes(‘world‘));  //true
console.log(‘hello world‘.includes(‘world1‘));  //false
console.log(‘hello world‘.includes(‘world‘,6));  //true
console.log(‘hello world‘.includes(‘world‘,7));  //false */

/* let url = ‘admin/index.php‘;
console.log(url.startsWith(‘admin‘));
console.log(url.endsWith(‘php‘)); */

let obj = 
    username:‘xiaoming‘,
    age:‘24‘,
    gender:‘male‘


let tag = ‘<div><span>‘+obj.username+‘</span><span>‘+obj.age+
            ‘</span><span>‘+obj.gender+‘</span></div>‘;
console.log(tag);

//模板字符串:注意:用的是反引号(键盘上数字1左边的)
//反引号表示模板,模板中的内容可以有格式,通过$方式填充数据
//支持一些简单的表达式运算,也支持函数调用
let fn = function(info)
    return info;

let tpl = `
    <div>
        <span>$obj.username</span>
        <span>$obj.age</span>
        <span>$obj.gender</span>
        <span>$1+1</span>        
        <span>$fn(‘hello‘)</span>   
    </div>
`;
console.log(tpl);

技术图片

 4.函数扩展

/**
 * 函数扩展:
 * 1.参数默认值
 * 2.参数解构赋值
 * 3.rest参数
 * 4.扩展运算符:...
 */

 //参数默认值
 //以前的写法:
function foo(param)
    let p = param || ‘hello‘;   
    //let p = ‘hello‘ || param;   //注意,如果把‘hello‘赋值放在前面,则不管参数是什么都将打印hello 
    console.log(p);

//foo();   //打印结果:hello
foo(‘hi‘);   //打印结果:hi

//ES6的写法:在原来的基础上做了精简
function foo(param = ‘hello‘)
    console.log(param);

//foo();   //打印结果:hello
foo(‘hi‘);   //打印结果:hi

//参数的解构赋值(传入的参数就是一个对象了)
function foo(name=‘xiaoming‘,age=24 = )
    console.log(name,age);

foo();    //打印结果:xiaoming 24
foo(name:‘zhangsan‘,age:22);   //打印结果:zhangsan 22

//rest参数(剩余参数):将单个数据转化成数组
function foo(a,b,...param)
    console.log(a);
    console.log(b);
    console.log(param);   //剩余的参数用数组的形式打印出来

foo(1,2,3,4,5,6);
 

//扩展运算符 ... :将数组转化成单个数据
function foo(a,b,c,d,e)
    console.log(a+b+c+d+e);

foo(1,2,3,4,5);     //打印结果:15
let arr = [1,2,3,4,5];
foo.apply(null,arr);    //打印结果:15
foo(...arr);      //打印结果:15

//合并数组:rest参数的应用
let arr1 = [1,2,3];
let arr2 = [4,5,6];
let arr3 = [...arr1,...arr2];
console.log(arr3);         //打印结果:[ 1, 2, 3, 4, 5, 6 ]
/**
 * 箭头函数
 */
//普通函数:
function foo()
    console.log(‘hello‘);

//箭头函数:
let foo = () => console.log(‘hello‘);

//带一个参数的普通函数:
function foo(v)
    return v;

//带一个参数的箭头函数:
let foo = v => v;

//多个参数的箭头函数参数必须用()包住,函数体内有多行代码的必须用包住
let foo = (a,b) => let c=a+b; console.log(c);

/**
  * 箭头函数的注意事项
  */
 //1.箭头函数中的this取决于函数的定于,而不是调用
 function foo()
     //使用call调用foo时,这里的this其实就是call的第一个参数
     console.log(this);     //打印结果: num: 1 
     setTimeout(() => console.log(this.num),100);    //打印结果:1
 
 foo.call(num:1);

//2.箭头函数不可以new
 let foo = () => this.num = 123;
 new foo();  //报错:foo is not a constructor

//3.箭头函数不可以使用arguments获取参数列表,可以使用rest参数代替
let foo = (a,b) => 
    console.log(arguments);   //打印出来的对象


let foo = (...param) => 
    console.log(param);     //打印结果:[ 123, 456 ]

foo(123,456);

 5.类与继承

/**
 * 类与继承
 */
//以前创建构造函数和实例
function Animal(name)
    this.name = name;

Animal.prototype.showName = function()
    console.log(this.name);

var a = new Animal(‘Tom‘);
a.showName();
var b = new Animal(‘Jerry‘);
b.showName();
//===============================================
//ES6语法创建构造函数和实例
class Animal
    //静态方法
    static showInfo()
        console.log(‘hello‘);
    
    //构造函数
    constructor(name)
        this.name = name;
    
    showName()
        console.log(this.name);
    

let a = new Animal(‘spike‘);
a.showName();
Animal.showInfo();    //静态方法只能通过类名来调用
//============================================================
//类的继承extends
class Dog extends Animal
   constructor(name, color)
       super(name);    //调用父类的构造函数
       this.color = color;
    
   showColor()
       console.log(this.color);
   


let dog = new Dog(‘doudou‘,‘yellow‘);
dog.showName();
dog.showColor();
Dog.showInfo();     //继承静态方法也是用类名调用

 

以上是关于ES6常用语法的主要内容,如果未能解决你的问题,请参考以下文章

ES6常用语法

vue常用的ES6语法--内置对象扩展

2-6 ES6常用语法

ES6常用语法总结

ES6常用语法

ES6 常用语法