大家好呀!我是小笙,接下来我们来初步了解一部分大前端的内容。
ECMAScript 6.0(以下简称 ES6)是 JavaScript 语言的下一代标准, 2015 年 6 月发布
ECMAScript 和 JavaScript 的关系(类似接口和类的关系):
ECMAScript 是 JavaScript 的规范/规则,JavaScript 是 ECMAScript 的一种实现
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
head>
<script type="text/javascript">
let name = "罗念笙";
console.log("name",name); // 逗号:如果是对象,输出对象的完整信息(属性)
console.log("name"+name); // 加号:如果是对象,只输出Object类型
// 举例子
// let l = new Object;
// l.name = "罗念笙";
// console.log("name",l); // name {name: '罗念笙'}
// console.log("name"+l); // name[object Object]
// let注意细节
// 1. let 声明的变量有严格局部作用域
{
var gender = "男";
let age = 18;
console.log(gender); // 男
console.log(age); // /18
}
console.log(gender); // 男
console.log(age); // age is not defined
// 2. let 只能声明一次, var 可以声明多次
let name = "张洛融"; // Identifier 'name' has already been declared
// 3. let 不存在变量提升, var 存在变量提升
console.log(x);
var x;
console.log(y); // Cannot access 'y' before initialization
let y;
script>
<body>
body>
html>
解构赋值DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 1. 常量在定义时,需要赋值
// 2. 常量赋值后不能修改
const AGE; // Missing initializer in const declaration
const PI = 3.14;
PI = 5.6; // Assignment to constant variable
script>
head>
<body>
body>
html>
是一种针对数组或者对象进行模式匹配,然后对其中的变量进行赋值(解构赋值是对赋值运算符的扩展 )
主要有两种形式: 数组解构和对象解构
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
head>
<script type="text/javascript">
// 数组解构 [ ]
let arr = [1,2,3];
let [x,y,z] = arr;
console.log(x,y,z) // 1 2 3
let [num1,num2,num3] = [100,200,300];
console.log(num1,num2,num3); // 100 200 300
// 对象解构 { }
let obj = new Object;
obj.name = "罗念笙";
obj.age = 18;
let{name,age} = obj; // 名称必须和属性名相同,但是顺序无所谓
console.log(name,age); // 罗念笙 18
function f1({name, age}){ // 名称必须和属性名相同,但是顺序无所谓
console.log(name,age) // 罗念笙 18
}
f1(obj);
script>
<body>
body>
html>
模板字符串使用反引号 ` 将字符串包裹
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 模板字符串使用反引号 ` 将字符串包裹
// 1.可作为普通字符串
// 2.可用来定义多行字符串,即可以将换行字符串原生输出
let str1 = `for(int i=0;i<2;i++){
System.out.println(i);
}`
console.log(str1)
// 3.字符串插入变量和表达式, 使用 ${}
let name = "罗念笙";
let message = `姓名 : ${name}`
let num1 = 34;
let num2 = 66;
let sum = `${num1+num2}`;
console.log(message); // 姓名 : 罗念笙
console.log(sum); // 100
// 4.字符串中调用函数
function f1(){
return "f1被调用...";
}
let controlF1 = `${f1()}`;
console.log(controlF1); // f1被调用...
script>
head>
<body>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 声明对象简写
const age = 800;
const name = "孙悟空";
let monster = {name,age};
console.log(monster) // {name: '孙悟空', age: 800}
script>
head>
<body>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 对象方法简写
let monster2 = {
name: "红孩儿",
age: 100,
sayHi() { // 传统方式: sayHi:function()
console.log("name=", this.name, " age=", this.age); // name= 红孩儿 age= 100
},
}
monster2.sayHi();
script>
head>
<body>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 对象拓展运算符
let person = {
name:"罗念笙",
age:18,
eat(){
console.log("eating....")
}
}
// 浅拷贝
let person2 = person;
person2.name = "张洛融";
console.log(person.name); // 张洛融
// 深拷贝
let person3 = {...person};
person3.name = "XXX";
console.log(person3.name); // XXX
console.log(person.name); // 张洛融
// 合并对象(深拷贝)
let personMessage = {
gender:"女",
hobby:"跑步"
}
let wholeMessage = {...person,...personMessage};
console.log(wholeMessage); // {name: '张洛融', age: 18, gender: '女', hobby: '跑步', eat: ƒ}
person.name = "张洛";
console.log(wholeMessage); // {name: '张洛融', age: 18, gender: '女', hobby: '跑步', eat: ƒ}
script>
head>
<body>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 传统函数
let addSum = function(m,n){
return m + n;
}
console.log(addSum(6,4)); // 10
// 1.箭头函数基本使用
// 基本语法是:(参数列表) => { 函数体 }
let addSum2 = (m,n) =>{
return m + n;
}
console.log(addSum2(3,4)); // 7
// 箭头函数优化
// 函数体只有一行语句,并且需要返回结果时,可以省略 {} , 结果会自动返回
let addSum3 = (m,n) => m + n;
console.log(addSum2(3,90)); // 93
// 2.可以把箭头函数当作形参传入(类似Java匿名内部类)
function f(f4){
console.log(f4(100));
}
f(
(n) => {
return n * 12;
}
)
f(
(n) => {
return n - 12;
}
)
// 传统函数
var f1 = function (n, m) {
var res = 0
for (var i = n; i <= m; i++) {
res += i
}
return res
}
console.log(f1(1, 10)) // 55
// 3.箭头函数灵活使用
let f2 = (n, m) => {
var res = 0
for (var i = n; i <= m; i++) {
res += i
}
return res
};
console.log(f2(1, 10)); // 55
script>
head>
<body>
body>
html>
DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>title>
<script type="text/javascript">
// 要求:在方法形参取出 monster 对象的 skill 属性
const monster = {
name: "红孩儿",
age: 100,
skill: ['红缨枪', '三位真火']
}
// 传统方式
function f1(monster) {
console.log("skill=", monster.skill);
}
f1(monster);
//箭头函数
let f2 = ({skill}) => {
console.log("skill=", skill);
}
// 1.f2传入对象monster,含有属性skill
// 2.f2形参是{skill}, 根据ES6的对象解构特性, 会把monster对象的skill属性赋给skill
// 3.对象解构的前提就是{skill}的 skill 和 monster 的 skill 属性名必须是一致的
f2(monster);
// 箭头函数()=> + 解构{}
let f3 = ({age,name,skill}) => { // {age,name,skill} 顺序无要求
console.log("skill=", skill, " age=", age, " name=", name);
}
f3(monster);
script>
head>
<body>
body>
html>