IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> JavaScript知识库 -> es6新增 -> 正文阅读

[JavaScript知识库]es6新增

??? es6是 JavaScript 语言的下一代标准,已经在 2015 年 6 月正式发布了。它的目标,是使得 JavaScript 语言可以用来编写复杂的大型应用程序,成为企业级开发语言。

1.let关键字定义变量

?var 关键字定义变量的时候,全局变量和局部变量

let 关键字定义变量的时候,全局的变量和局部变量,块级变量

var a = 10; let b = 20 // 全局变量
;(function (){
    var a = 20; let b = 30 //局部变量
}())

if (1<2) {
    let b = 30 // 块级作用域
    console.log(b); //30
}

console.log(a,b); //10 20

// 用法
for(var i = 0;i<5;i++){
    console.log(1,i); // 0 1 2 3 4
    setTimeout(function(){
        console.log(2,i); // 5 5 5 5 5
    },1000)
}
// 使用let解决
for(let i = 0;i<5;i++){
    console.log(1,i); // 0 1 2 3 4
    setTimeout(function(){
        console.log(2,i); // 0 1 2 3 4
    },1000)
}

// 使用闭包解决
function outer(x){
    return function(){
        console.log(4,x);
    }
}
for(var i = 0;i<5;i++){
    console.log(5,i);//0 1 2 3 4
    setTimeout(outer(i),1000)//0 1 2 3 4
}

var count = 3;var count = 3;//没问题
let c = 3;//let c = 3; //报错  c已经定义过了

// let 和 var
// let:不允许在相同的作用于下声明相同的变量,var可以
// let:除了全局变量和局部变量还可以定义块级变量

2.const 定义变量是一个常量,常量不允许修改的

// const 定义变量是一个常量,常量不允许修改的


const c = 3
c = 5
console.log(c); //修改直接报错

const b ;
console.log(b); //必须赋给初始值,不然直接报错

// const 适用的场合
// 一般使用在循环数组里面或者循环对象里面,只对数组或者对象里面的数据进行查询


// 对于引用类型使用const,只对数组进行增删改查不会出现报错,如果修改了引用类型的地址就会报错
const arr = [1,2,3]
arr.push(4)
console.log(arr);//[1,2,3,4]
arr = []
console.log(arr);//报错



const obj = {
    name:123
} 
obj["name"] = "456"
console.log(obj);// { name: '456' }
obj = {}
console.log(obj);//报错

3.模板字符串

es6模板字符串常用在html字符串拼接的地方

var year = 2021
var month = 11
var day = 24
console.log(year+"-"+month+"-"+day);  //2021-11-24 常规字符串拼接
console.log(`${year}-${month}-${day}`);2021-11-24 es6字符串拼接

4.箭头函数和普通函数的定义方式

// 传统函数定义方式

function f1(){
    console.log(this);
}
f1() // global  在浏览器是window

console.log(f2);//undefind 变量提升只提升了声明部分
console.log(f2());//报错 f2() 不是一个函数
var f2 = function (){} //函数表达式

// 立即执行函数
;(function(){
    console.log("66");
})

// 通过 new Function方式创建函数
var f3 = new Function("var a = 1;var b = 2;var c = a + b;console.log(c)")
f3() //3

// 箭头函数也是属于匿名函数的一种写法
var c = ()=>{}
console.log(this); // {} 在浏览器打印时是window

this.name = "张三"
console.log(this);//{ name: '张三' }

setTimeout(() => {
    console.log(this);// 指向上下文,结果为 { name: '张三' }
}, 100);
setTimeout(function(){
    console.log(this);//Timeout对象
},100)

var D = (count)=>{
    return ++count
}
var D = count=> ++count  //方法体只有一句话,有返回值时,可以把return和{} 去掉,如果参数只有一个,可以把参数的()去掉
console.log(D(10));//11

var obj = {
    name:"李四",
    eat(){
        console.log(this.name);
    },
    eat1:function(){
        console.log(this.name);
    },
    drink:()=>{
        console.log(this.name);// 保留与对象obj对象上下文的对象
    }
}
obj.eat() //李四
obj.eat1() //李四
obj.drink() // 张三

5.默认参数

function add(a,b){
    console.log(a+b);
}
add() //NaN
add(3)//NaN
add(1,2)//3

// 带默认值函数定义的时候,建议把默认值参数写在最后一个参数上面
// 如果调用的时候传递参数,默认值参数就是传递的值
function add2(a,b=4){
    console.log(a+b);
}
add2(1)//5
add2(1,7)//8

function add3(){
    var sum = 0
    for(var i = 0;i<arguments.length;i++){
        sum += arguments[i]
        // arguments.callee() 自调用
    }
    console.log(sum);
}
add3(1,2,3,4) //10
// es6获取参数列表的方式
function add4(...array){
    console.log(array);
}
add4(3,4)//[ 3, 4 ]

6.对象和数组的遍历

var arr = [1,2,3]
var obj ={
    name:123,
    age:456
}
// es6提供专门遍历数组的for...of
for (const index of arr) {
    console.log(index); //1 2 3
}
// es6提供专门遍历对象的for...in
for (const key in obj) {
    if (obj.hasOwnProperty(key)) {
        const element = obj[key];
        console.log(element);//123  456
        
    }
}

// for...of.. 遍历对象
for(const iterator of Object.entries(obj)){
    console.log(iterator);//[ 'name', 123 ]    [ 'age', 456 ]
}
for(const iterator of Object.values(obj)){
    console.log(iterator);//123  456
}
for(const iterator of Object.keys(obj)){
    console.log(iterator);//  name  age
}

// for..in..遍历数组
for (const key in arr) {
    console.log(key);// 0 1 2
}

7.对象字面量创建

// 创建对象的方式
var date = new Date()
// 字面量创建对象
var obj = {
    name:"111"
}

var name = "张三"
var age = 10
// es6之前写对象属性的时候,对象的属性添加双引号
var zhangsan = {
    "name":name,
    "age":age,
    "sex":"男"
}
// es6对对象的属性在声明时候进行优化,把双引号去掉了
zhangsan = {
    name:name,
    age:age,
    sex:"男"
}
console.log(zhangsan);//{ name: '张三', age: 10, sex: '男' }

// es6添加对象属性的时候,如果对象属性和字段一样,可以简写
zhangsan ={
    name,
    age,
    sex:"男"
}

var sex = '男'
zhangsan = {name,age,sex}
console.log(zhangsan);//{ name: '张三', age: 10, sex: '男' }
zhangsan = [name,age,sex]
console.log(zhangsan);//[ '张三', 10, '男' ]

8.class类的使用

// es6之前创建类的方式,构造函数
function People(name){
    this.name=name
}
// 添加一些方法
People.prototype.work = function(){
    console.log("我只想挣钱养家,你却想要我命");
}

// 实现构造函数继承:属性继承,原型上的继承
function Student(name,id){
    People.call(this,name)//属性继承
    this.id = id
}
// 原型上的继承
Student.prototype = Object.create(People.prototype)
Student.prototype.constructor = Student
var s1 = new Student("zz",10)
console.log(s1.name,s1.id); //zz  10
s1.work() //我只想挣钱养家,你却想要我命


class Father{
    // 构造函数
    constructor(name){
        this.name = name
    }
    eat(){
        console.log(this.name + "ssss");
    }
}
class Son extends Father{
    constructor(name,id){
        super(name)
        this.id = id
    }
}
var s1 = new Son("你好",10)
console.log(s1.name,s1.id); // 你好 10
s1.eat()  // 你好ssss

9.Symbol

symbol 是es6新增的一个基本数据类型,表示数据和数据类型是一个唯一的值,最大的用法使用在对象的属性或者值上面,还可以用定义常量上面。

?基本数据类型 ?string number boolean NaN undefined null symbol,存储在栈空间里面,存的是值本身

引用数据类型 function ?object array 等引用类型,存储在堆空间,存储的是对象的引用的地址

var s1 = Symbol() //定义一个symbol类型的数据
var s2 = Symbol()
console.log(s1,s2);//Symbol() Symbol()
console.log(s1===s2); //false
console.log(s1==s2); //false
console.log(s1=s2); //Symbol()

var s3 = Symbol("red")
var s4 = Symbol("green")
console.log(s3,s4);//Symbol(red) Symbol(green)
console.log(s3==s4);//false

let s5 = Symbol()
let s6 = Symbol()
var obj = {
    name:"小李子",
    [s5]:30
}
obj[s6] = "男"
console.log(obj);//{ name: '小李子', [Symbol()]: 30, [Symbol()]: '男' }
console.log(obj["name"]);//动态获取属性 小李子
console.log(obj.name);//静态获取属性 小李子
console.log(obj[s5]);//30
console.log(obj[s6]);//男
// 不能直接使用for..in..进行对对象属性为symbol类型进行遍历
for (const key in obj) {
    console.log(key); // name  symbol属性用for..in 遍历不出来
}
var arr = Object.getOwnPropertySymbols(obj) //获取symbol类型的字段
for (const iterator of arr) {
    console.log(iterator); //Symbol()  Symbol()
   
}
// symbol 使用常量上面
const COLOR_RED = Symbol("red")

// 使用单例方式创建symbol类型
var s9 = Symbol.for("red")
var s10 = Symbol.for("red")
console.log(s9==s10); //true
console.log(Symbol.keyFor(s9));//取值 red

10.关于对象和数组的解构

var arr = [1,2,3]
console.log(arr[1]); //2
// es6新增数组解构,把数组的每一个元素解构成一个变量
let [c1,c2,c3] = arr
console.log(c1,c2,c3);// 1 2 3
console.log(...arr); // 1 2 3

let [c4,c5,...c6] =arr
// 可以把所有的数组元素写在一个数组里面,必须使用展开的运算符...
console.log(c4,c5);//1, 2,[ 3 ]
 
// 数组的组合
 var arr2 = [4,5,6]
// arr2.forEach(function(v){
//     arr.push(v)
// })
// console.log(arr);//[ 1, 2, 3, 4, 5, 6 ]
arr = arr.concat(arr2)
console.log(arr);//[ 1, 2, 3, 4, 5, 6 ]


// 使用...进行数组赋值
// arr.push(...arr2)
// console.log(arr);//[ 1, 2, 3, 4, 5, 6 ]
arr = [...arr,...arr2,7,8,9]
console.log(arr); //[1, 2, 3, 4, 5, 6, 7, 8, 9]


var obj = {
    name:"zhangsan",
    age:10,
    sex:"男"
}
// 对象的解构,要求解构出来的变量名字和对象属性名字必须一致,这个就是按需加载
let {name,age} = obj
console.log(name,age);//zhangsan 10

var people = {
    width:200,
    height:200,
    ...obj
}
console.log(people);//{ width: 200, height: 200, name: 'zhangsan', age: 10, sex: '男' }
// assgin  keys  values  entries 都是属性es6的api
var newObj = Object.assign(people,obj)
console.log(newObj);//{ width: 200, height: 200, name: 'zhangsan', age: 10, sex: '男' }


var string = "ABC"
var [a,b,c] = string
console.log(a,b,c); // A B C
// 数组的解构 : let [c4,c5,...c6] =arr
// 对象的解构 : let {name,age} = obj
// 数组赋值  arr = [...arr,...arr2,7,8,9]

  JavaScript知识库 最新文章
ES6的相关知识点
react 函数式组件 & react其他一些总结
Vue基础超详细
前端JS也可以连点成线(Vue中运用 AntVG6)
Vue事件处理的基本使用
Vue后台项目的记录 (一)
前后端分离vue跨域,devServer配置proxy代理
TypeScript
初识vuex
vue项目安装包指令收集
上一篇文章      下一篇文章      查看所有文章
加:2021-11-25 08:01:50  更:2021-11-25 08:03:33 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年5日历 -2024/5/21 4:22:44-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码