ES6 基础语法

let声明变量

{
    var a = 0; // var声明的变量是全局变量
    let b = 0; // let声明的变量是局部变量
}

console.log(a);
console.log(b); // b is not defined:b没有定义
// var可以声明多次
// let只能声明一次
var m = 1;
var m = 2;
let n = 3;
let n = 4; //SyntaxError: Identifier 'n' has already been declared(语法错误:n已经声明过了)

console.log(m);
console.log(n);
// var 声明的变量会全局存储
// let 声明的变量只能在执行后才存储

console.log( x ); // 没有报错,输出:undefined
var x = "苹果";

console.log(y);  // 报错:y is not defined(y没有定义)
let y = "香蕉";

const声明变量

const声明常量,为只读变量,有以下特征:

1.声明之后,其值不允许改变

2.声明必须初始化,否则报错SyntaxError: Missing initializer in const declaration (语法错误,声明常量丢失了初始化)

const PI = 3.14;
PI = 3.1415;  //Assignment to constant variable.(声明的是常量)

console.log( PI ); 

解构赋值

解构赋值是对赋值运算符的扩展

它针对数组或者对象进行模式匹配,然后对其中的变量进行赋值。

解构,顾名思义,就是将集合型数据进行分解,拆分,把里面的值逐一遍历获取。

在代码书写上简洁且易读,语义更加清晰明了;也方便了复杂对象中数据字段的获取。

数组解构

var arr = [1,2,3];

// 传统的js
let a = arr[0];
let b = arr[1];
let c = arr[2];
console.log(a,b,c);

// es6的解构
var [x,y,z] = arr;
console.log(x,y,z);

对象解构

var user = {
    username : "吕布",
    weapon:"方天画戟",
    horse:"赤兔马"
};

// 传统的js
let mingzi = user.username;
let wuqi = user.weapon;
let zuoji = user.horse;
console.log("姓名:"+mingzi+",武器:"+wuqi+",坐骑:"+zuoji);

// es6的解构
let {username,weapon,horse} = user;  // 注意:解构的变量名必须是对象中的属性
console.log("姓名:"+username+",武器:"+weapon+",坐骑:"+horse);

模板字符串

模板字符串相当于加强版的字符串

用反引号、,除了作为普通字符串,还可以用来定义多行字符串

还可以在字符串中加入变量和表达式。

定义多行字符串

let str = `第一行
第二行
第三行`;

console.log(str);

字符串插入变量和表达式

let name = `吕布`;
let age = 24;

// 传统的拼接字符串
var info1 = "我叫:"+ name +",我今年"+age+"岁!";
console.log(info1);

// es6的拼接字符串
var info2 = `我叫:${name},我明年${age+1}岁!`;
console.log(info2);

字符串中调用函数

function test(){
    return "吃喝玩乐";
}

let str = `悲催的人生,从${test()}开始`;
console.log( str );

声明对象简写

let name = `吕布`;
let age = 28;

//传统
let user1 = {
    name : name,
    age : age
};
console.log(user1);

//es6新语法中的简写
let user2 = {name,age};
console.log(user2);

定义方法简写

// 传统
let user1 = {
    say : function(){
        console.log("大家好!");
    }
};

user1.say();

// es6
let user2 = {
    say(){
        console.log("大家好啊!");
    }
};

user2.say();

对象拓展字符串

拓展运算符{..}将参数对象中所有可以遍历的属性拿出来,然后拷贝给新对象

拷贝对象

let user1 = {
    name:"项羽",
    age:34
};

let user2 = {...user1}; // 深拷贝(克隆)

console.log(user1);
console.log(user2);

合并对象

let user1 = {
    name:"项羽",
    age:34
};

let user2 = {head:"诸葛亮"};

let user = {...user1,...user2};

console.log( user );

函数的默认参数

function test(name , age = 18){
    console.log(`我叫${name},我今年${age}岁`);
}

test("吕布",33); //我叫吕布,我今年33岁
test("貂蝉"); //我叫貂蝉,我今年18岁
test("关羽",null); //我叫关羽,我今年null岁
test("马超",""); //我叫马超,我今年岁
test("张飞",undefined); //我叫张飞,我今年18岁

函数的不定参数

function test( ...arg ){
    console.log(`传入了${arg.length}个参数`);
    for(var i = 0 ;i<arg.length;i++){
        console.log(arg[i]);
    }
}

test(1);
test(1,2);
test(1,2,3,4,5,6);
test();
test("郭","嘉",37);

箭头函数

// 传统
var f1 = function(a){
    return a*10;
}

console.log( f1(10) );

// es6
var f2 = a=>a*10;
console.log( f2(20) );

// 当箭头函数一个参数时,()可以省略
// 当箭头函数没有参数或者有多个参数,要用()括起来
// 当箭头函数的函数体有多行语句,用{}括起来,表示代码块
// 当只有一条语句,并且需要返回时,可以省略{},结果会自动返回

var f3 = (a,b) => {
    let sum = a+b;
    return sum;
}
console.log( f3(3,7) );

// 可以将f3进行简化
var f4 = (a,b) => a + b;
console.log( f3(11,22) );

模块化

如果在a.js文件中定义了5个方法,现在b.js文件中想使用a中的5个方法,怎么办?

java语言的做法是import引入之后,就能使用了。es6的模块化,也是这个过程

将一个js文件声明成一个模块导出之后,另一个js文件才能引入这个模块

每一个模块只加载一次(是单例的), 若再去加载同目录下同文件,直接从内存中读取。

let name = "赵云";
let age = 66;
let fn = function(){
    return `我是${name}!我今年${age}岁了!`;
}

// 声明模块并导出
export
{
    name,
    age,
    fn
}
// 按需导入
import {name,age,fn} from "./user.js"

console.log(name);
console.log(age);
console.log(fn);
let name = "甘宁";
let age = 25;
let fn = function(){
    return `我是${name}!我今年${age}岁了!`;
}

// 声明模块并导出
export{
    name as a,
    age as b,
    fn as c
}
import {a,b,c} from "./user.js";

console.log(a);
console.log(b);
console.log(c());
import * as info from "./user.js";   // 通过*来批量接收,as来指定接收的名字

console.log(info.a);
console.log(into.b);
console.log( into.c() );
默认导出

可以将所有需要导出的变量放入一个对象中,然后通过default export进行导出
// 导出.js
export default{
    name:"公孙瓒",
    eat(){
        return "吃什么!";
    }
}

// 导入.js
import p from "./person.js";
console.log( p.name, p.eat() );
重命名 export 和 import

如果导入的多个文件中,变量名字相同,即会产生命名冲突的问题,

为了解决该问题,ES6提供了重命名的方法,当你在导入名称时可以这样做:
// student1.js
export let name = "我是来自student1.js";

// student2.js
export let name = "我是来自student2.js";

// test_student.js
import {name as name1} from './student1.js';
import {name as name2} from './student2.js';

console.log( name1 ); // 我是来自student1.js
console.log( name2 ); // 我是来自student2.js
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值