理解es6

阅读数:85 评论数:0

跳转到新版页面

分类

html/css/js

正文

一、使用let声明变量

1、与使用var声明变量的区别

(1)变量不能重复说明

(2)不存在变量提升(在执行function函数之前,所有变量都会被提升至函数作用域顶部)

(3)存在块级作用域(不允许外部使用内部的变量)

(4)存在暂时性死区(赋值之前不允许访问,即在预编译的时候不允许访问)

2、let和var在for中的区别

for(var I=0;i<10;i++){
}
//在for语句中用var 声明的 i 实际上是全局变量

for(let j=0;i<10;i++){
}
//用let声明的 j 在每一次循环的时候都会形成块级作用域,生成一个新的i,彼此之间互不干扰

二、const修改的也可变

声明之后不允许修改(实际上并不是不允许修改变量的值,而是不允许修改变量指向的内存地址)

三、函数bind的用法

函数.bind(this指向,[函数参数])

会返回一个新的函数,新函数的this指向bind的第一个参数。

function demo(name,age){
}
var fn1=demo.bind(obj,'ls',18)

四、export default和export的区别

1、export与export default均可用于导出常量、函数、文件、模块等。

2、你可以在其它文件或模块中通过import+(常量|函数|文件|模块)名的方式,将其导入,以便能够对其进行使用。

3、在一个文件或模块中,export、import可以有多个,export default仅有一个

4、通过export方式导出,在导入时要加{},export default则不需要。

五、末尾的逗号

JS一开始就允许给数组的末尾加逗号,ES5开始允许给对象末尾加逗号,ES2017允许给函数参数末尾加逗号,json末尾也可以加逗号。

六、Promise对象

这是ES6引入的封装异步操作的统一接口。Promise本身是一个构造函数,提供了resolve和reject两个方法,一旦异步操作成功结束,就调用resolve方法,一旦异步操作失败,就调用reject方法。

七、module

es6意义最大的语法变化,就是引入模块。

一个模块内部,使用export命令转出对外的接口。

// lib/math.js
export function sum(x, y) {
  return x + y;
}
export var pi = 3.141593;

上面的模块输出了sum和pi两个接口。

import命令用于引入该模块。

// app.js
import * as math from "lib/math";
alert("2π = " + math.sum(math.pi, math.pi));

八、箭头函数

任何使用function的地方,都可以使用箭头函数,其调用和普通函数一样。与function不同的是,在箭头函数这种的this是指向当前宿主对象。

//1. 标准情况下
var fn=(形参1,形参2)=>{ 函数体 }

//2.当只有一个变量时,可以省略()
var fn2=info=>{ 函数体 }

//3.函数体只有一个表达式的时候,省略{},此时函数隐藏return,但尽量不要隐藏{},可读性差
var fn3=()=>唯一函数体
var fn4=(age)=>age+1;

JavaScript 中引入箭头函数(Arrow Functions)主要是为了提供一种更简洁的函数写法,并解决一些传统函数表达式存在的问题。箭头函数在 ES6(ECMAScript 2015)中被添加到 JavaScript 语言规范中,它们具有几个主要优点:

1、更短的语法

箭头函数提供了一种更简洁的方式来写函数表达式。不需要使用 function 关键字,也可以避免使用花括号和 return 关键字(在单个表达式的情况下)。

// 传统函数表达式
const add = function(a, b) {
    return a + b;
};

// 箭头函数
const add = (a, b) => a + b;

2、this的词法绑定

在传统的函数表达式中,this 关键字的值取决于函数是如何被调用的,这可能会导致一些混乱。箭头函数没有自己的 this,它们会捕获其所在上下文的 this 值,使得 this 的行为更加可预测。

function Timer() {
    this.seconds = 0;
    setInterval(() => {
        this.seconds++; // `this` 指向 Timer 实例
    }, 1000);
}

3、没有自己的arguments对象

传统的函数有自己的 arguments 对象,而箭头函数没有。箭头函数可以访问外围函数的 arguments 对象,或者使用剩余参数语法(...args)来获取参数。

const joinArgs = (...args) => args.join(', ');

4、不可以作为构造函数

箭头函数不能用作构造函数,它们没有 prototype 属性,也不能使用 new 关键字调用。

5、没有new.taqrget

在箭头函数内部,new.targetundefined,因为箭头函数不能通过 new 关键字调用。

九、字符串的拼接

一般情况下,我们使用的字符串拼接方式都是‘+’,但当有大段代码且包含html标签,就是用模版拼接(反引号``)

str1='星期六';
str2='吃火锅';
var str='当下是${str1},适合去${str2};'

在字符串模板中还可以使用函数

function fn(){
return '天气好,适合吃火锅';
}
var str='${fn()}'

十、解构函数

//1. 将数组的元素,赋值给相应的变量.变量和元素之间是位置对应关系。
var books=['A','B','C','D'];
let[b1,b2,b3,b4]=books;

//2. 将对象的元素,赋值给相应的变量.变量必须是对象中的属性名或者是方法名
var {name,age}={name:11,age:22}

十一、...的用法(扩展运算符)

//在数组前面时,将数组展开
var str=[1,3,5,6]
console.log(...str); //输出1,3,5,6

//将形参合并为数组
fn1('zs','li',18)
function fn1(...arr){
    console.log(arr); // 输出["zs","li",18]
}

//在对象中可以展开属性
var obj={
    name:'ls',
    age:18,
}
var obj1={...obj,money:1000}
console.log(obj1)    //{name:'ls',age:18,money:1000}

1、扩展运算符的深浅拷贝

(1)如果数组或对象中的元素只是简单类型,一层对象或者数组,就是深拷贝

let staff1 = {name: 'xiaohong',age: 27};
let staff2 = {...staff};
staff2.name = 'xiaoming'
staff1 : {name: 'xiaohong',age: 27}
staff2:{name: "xiaoming", age: 27}

(2)如果数组或对象中的元素是复杂类型,就是浅拷贝

let aa = {
age: 18,
name: 'aaa',
    address: {
        city: "hangzhou"
    }
}
 
let bb = {...aa}
bb.address.city = 'shanghai'
 
 
aa: {
        age: 18,
        name: 'aaa',
        address: {
            city: 'shanghai'
        }
    }
 
bb: {
        age: 18,
        name: 'aaa',
        address: {
            city: 'shanghai'
        }
    }



相关推荐

一、基本用法 Object.assign方法用于对象的合并,将源对象的所有可枚举属性复制目标对象。 <

一、script标签属性 async 表示立即下载该脚本,但不妨碍页面中的其他操作,只对外部文件有效。 charset 与src属性一起使用,告诉浏览器用来编码这个javascript程序的

ECMAscript 5添加了第二种运行模式:严格模式(strict mode)。 //针对单个脚本 <script>   "use strict";   console.log("这是严格模式

因为map的key可以为任何类型, 包括对象. 但是JSON语法, key只能为string. 所以不能直接对JSON.stringify(Map). 1.但是可以先把map转换为

Javascript中, !表示运算符"非", 如果变量不是布尔类型, 会将变量自动转化为布尔类型

一、forEach 如果不做特殊处理,一般情况下,不会break的。如果需要中途跳出循环,建议直接用for语句。 <pre class="language-javasc

一、window对象 在javascript中,一个浏览器窗口就是一个window对象,window对象以及这些子对象,由于都是用于操作浏览器窗口,所以我们又称为BOM(Browser Object

Math.random()方法会返回介于0(包含)~1(不包含)之间的一个随机数。 舍掉小数点后的数值的方法有很多,如parseInt(),Math.ceil(),Math.flo

一、async 将不是Promise对象的返回值封装,如果有返回值返回为resolved的Promise,如果没有返回值,则返回rejected的Promise。 1、异步函数的返回值 (1)如果是普

一、概述 所有语言中的代理,其本实现的是对原对象的操作的拦截和一些自定义行为。 二、语法  const p = new Proxy(target, handler) 1、target 可以是任何类型的