ES6 新增的一些特性

1. let关键字

(1)基本用法:let关键字用来声明变量,它的用法类似于var,都是用来声明变量。

(2)块级作用域:let声明的变量,只在let关键字所在的代码块内有效。

{
  var a = 10;
  let b = 10;
}
console.log(a);  //10
console.log(b);  //error: b is not defined

var c = 10;
{
  var c = 20;
}
console.log(c);  //20

var d = 10;
{
  let d = 20;
}
console.log(d);  //10

var i=0;
for(var i=0; i<10; i++) {
}
console.log(i);  //10

var j=0;
for(let j=0; j<10; j++) {
}
console.log(j);  //0

(3)不存在变量提升:let声明的变量一定要在声明后使用,否则会报错

console.log(a);  //undefined
console.log(b);  //error: b is not defined

var a = 10;
let b = 10;

2. const关键字

(1)基本用法:声明一个只读的常量。一旦声明,常量的值就不能改变。

console.log(a);  //undefined
console.log(b);  //error: b is not defined
var a = 10;
let b = 10;

(2)其他特性与var关键字一致

 3. 字符串拼接方法

(1)基本用法:用反引号进行拼接

/*ES5中字符串处理方法*/
var name = "Jack";
var str1 = ‘my name is ‘ + name;
console.log(str1);  //my name is Jack

/*ES6中字符串处理方法*/
var str2 = `my name is ${name}`;
console.log(str2);  //my name is Jack

4. function函数

(1)基本用法:默认参数

/*ES5中函数默认参数处理方法*/
function fn1(height) {
    var height = height || 100;
    console.log(height);
}
fn1();  //100

/*ES6中直接在形参赋值进行设置默认参数*/
function fn2(height = 100) {
    console.log(height);
}
fn2();  //100

(2)箭头函数

/*ES5中定义一个函数变量*/
var fn1 = function(height) {
    console.log(height);
}
fn1(100);  //100

/*ES6中用箭头函数定义函数变量*/
var fn2 = (height) => {
    console.log(height);
}
fn2(100);  //100

/*箭头函数特性:箭头函数的this指针保持和外层指针一致*/
var ele = document.getElementById(‘ele‘);  //获取某个元素,绑定点击事件
ele.onclick = function() {
    setTimeout(function() {
        console.log(this);   //点击后,打印出window对象
    }, 10)
}
ele.onclick = function() {
    setTimeout(() ()=> {
        console.log(this);   //点击后,打印出ele元素对象
    }, 10)
}

/*箭头函数特性:箭头函数的argumets对象和外层一致*/
function fn1(height) {
    setTimeout(function() {
        console.log(arguments);
    }, 10)
}
function fn2(height) {
    setTimeout(() => {
        console.log(arguments);
    }, 10)
}
fn1(100);  //[]
fn2(100);  //[100]

5. 变量的结构赋值

(1)基本用法

/*ES5初始化变量*/
var a = 10;
var b = 20;

/*ES6解构赋初值*/
var [a, b] = [10, 20];

/*ES5获取对象的key值*/
var obj1 = {
    username1: ‘jack‘,
    password1: 123
}
var username1 = obj1.username1;
var password1 = obj1.password1;
console.log(username1, password1);

/*ES6通过解构拆包获取对象的key值*/
var obj2 = {
    username2: ‘jack‘,
    password2: 123
}
var {username2, password2} = obj2;
console.log(username2, password2);

/*字符串的解构赋值*/
var [a, b, c, d, e] = ‘hello‘;
console.log(a, b, c, d, e);  //h e l l o
/*数组的解构赋值*/
var [a, b, c] = [‘hello‘, ‘world‘];
console.log(a, b, c);  //hello world

6. …拓展操作符

(1)基本用法

//合并数组
var arry = [‘a‘, ‘b‘];
var arry1 = arry.concat([‘c‘]);  //ES5数组拼接
var arry2 = [...arry, ‘c‘];  //ES6...操作符拼接数组
console.log(arry1); //[‘a‘, ‘b‘, ‘c‘]
console.log(arry2);  //[‘a‘, ‘b‘, ‘c‘]

//合并对象
var obj = {a: 1, b: 2};
var obj1 = {...obj, c: 3};
var obj2 = {...obj, a: 3};
console.log(obj1) ; // {a: 1, b: 2, c: 3}
console.log(obj2) ; // {a: 99, b: 2}

/*拆分字符串*/
console.log([...‘hello‘]); // [ "h", "e", "l", "l", "o" ]

/*合并成数组*/
function mergeArr(...Arrys) {
    console.log(arguments);
}
mergeArr(‘a‘, ‘b‘, ‘c‘);  //[‘a‘, ‘b‘, ‘c‘];

/*拆分数组*/
console.log(...[‘a‘, ‘b‘, ‘c‘]);  //a b c

function fn1() {
    var arry = Array.prototype.sort.call(arguments, function(a, b) {
        return a - b;
    })
    console.log(arry);
}
fn1(3,1,5,3,8,6);  //1 3 3 5 6 8

/*...操作符将类数组转换为数组*/
function fn2() {
    var arry = [...arguments].sort(function(a, b) {
        return a - b;
    })
    console.log(arry);
}
fn2(3,1,5,3,8,6);  //1 3 3 5 6 8

7. 对象的一些实用方法

(1)Object.is():判断两个值是否相等,ES5比较两个值是否相等,只有两个运算符:相等运算符(==)和严格相等运算符(===)。它们都有缺点,前者会自动转换数据类型,后者的NaN不等于自身,以及+0等于-0。

console.log(+0 === -0)  //true,错误结果
console.log(NaN === NaN)  //false,错误结果
console.log(Object.is(+0, -0)) // false,正确结果
console.log(Object.is(NaN, NaN)) // true,正确结果
/*普通值的比较*/
console.log(Object.is(‘foo‘, ‘foo‘)) //true
console.log(Object.is({}, {}))  //false

(1)Object.assign():合并对象的方法,将源对象(source)的所有可枚举属性,复制到目标对象(target)。

/*使用方法*/
var target = {a: 1, b: 1 };
var source = {c: 1};
console.log(Object.assign(target, source));  //{a: 1, b: 1, c: 1}
/*如果目标对象与源对象有同名属性,或多个源对象有同名属性,则后面的属性会覆盖前面的属性*/
var target = {a: 1, b: 1 };
var source = {a: 20, c: 1};
console.log(Object.assign(target, source));  //{a: 20, b: 1, c: 1}

/*运用:克隆对象*/
function clone(origin) {
  return Object.assign({}, origin);
}
var obj1 = {
    a: 2
}
var obj2 = clone(obj1);
console.log(obj2);  //{a: 2}

/*注意:Object.assign方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。*/
var obj1 = {a: {b: 1}, c: 1};
var obj2 = Object.assign({}, obj1);
obj2.a.b = 100;
obj2.c = 200;
console.log(obj1);  //{a: {b: 100}, c: 1}

/*运用:合并对象*/
var merge = (...sources) => Object.assign({}, ...sources);
console.log(merge({a: 1}, {b: 2}, {a: 3, c :3}));  //{a: 3, b: 2, c: 3}

8,Symbol:独一无二

作用:保护对象的属性和值

数据保护

Symbol是一个函数,

也是ES6新增的数据类型,基本数据类型变成6个

for in 是遍历不出来对象中Symbol的属性

一般情况下用来做对象的key值

9. promise对象

(1)定义:一种异步函数的解决方案,避免了异步函数层层嵌套,将原来异步函数转换 为便于理解和阅读的链式步骤关系

(2)三种状态:Pending(进行中)、Resoloved(已完成)、Rejected(已失败)。

(3)两种结果:Pending->Resoloved(成功); Pending->Rejected(失败)。

(4)then方法:第一个参数是成功时调用的函数,第二个参数是失败时调用的函数。

(5)通常形式。

var promise = new Promise((reslove, reject) => {
    if(条件成立) {
        /*Pending->Resoloved(成功*/
        reslove();
    }else {
        /*Pending->Rejected(失败)*/
        reject();
    }
})

/*运用:隔1s打印‘hello’,隔2s打印‘world’*/

/*ES5实现方法*/
setTimeout(function(){
    console.log(‘hello‘)
      setTimeout(function(){
        console.log(‘world‘)
      }, 1000)
}, 1000)  

/*Promise实现方法*/
var wait1000 = (str) => {
    return new Promise((resolve, reject) => {
        setTimeout(() => {
            resolve(str);
        }, 1000)
    })
}

wait1000(‘hello‘).then((data) => {
    console.log(data);
    return wait1000(‘world‘);
}, () => {
    console.log(‘err‘);
}).then((data) => {
    console.log(data);
})

原文地址:https://www.cnblogs.com/shun1015/p/12267126.html

时间: 2024-10-14 07:01:50

ES6 新增的一些特性的相关文章

ES6新增的一些特性

1.let关键字,用来代替 var的关键字,特点: 1.变量不允许被重复定义 2.不会进行变量声明提升 3.保留块级作用域中i的 2.const定义常量,特点:1.常量值不允许被改变 2.不会进行变量声明提升 3.箭头函数 与普通函数的区别:1.书写上用=>代替了function 2.普通函数的this指向window 而ES6箭头函数里面的this指向定义时的那个对象 而不是运行时的那个对象 //普通函数var test = function(x){ return x+2; } 使用箭头函数:

ES6新增的 Set 和 WeakSet

什么是Set结构 Set是ES6给开发者带来的一种新的数据结构,你可以理解为值的集合.我们平时见到的数组Array也是一种数据结构,但是Set跟其他数据结构不同的地方就在于:它的值不会有重复项. 基本用法 我们从最基本的学起,Set的用法: 1 var s = new Set(); 2 console.log(s); 3 //打印结果:Set {} Set本身是一个构造函数,你可以理解为一个类,使用的时候需要用new来创建一个实例.以上的案例就是这样创建出一个Set结构,我们打印出来看看,控制台

ES6 新增语法

为什么是 ES6 每一次标准的诞生都意味着语言的完善,功能的加强, JavaScript 语言本身也有一些令人不满意的地方 变量提升特性增加了程序运行时的不可预测性 语法过于松散,实现相同的功能,不同的人可能会写出不同的代码 ES6 新增语法 let ES6 中新增的用于声明变量的关键字 let 声明的变量只在所处的块级有效 防止循环变量变成全局变量 不存在变量提升 暂时性死区 和 let 所在的块级区域进行绑定 注意:使用 let 关键字声明的变量才具有块级作用域,使用 var 声明的变量不具

ES6新增—新增循环、箭头函数

5.新增循环: 以前for循环,for in循环 ES6新增循环: for of 循环:遍历(迭代,循环)整个对象,变现类似于for in 循环 两者的区别: for in循环:既可以循环数组,又可以循环json 循环数组:i代表数组的索引 var arr1=['apple','banana','appel','orange']; for(var i in arr1){ console.log(i); //0,1,2,3 } 循环json:name代表json的索引 var json=[a:'a

es6新增的数组方法和对象

es6新增的遍历数组的方法,后面都会用这个方法来遍历数组,或者对象,还有set,map let arr=[1,2,3,4,3,2,1,2]; 遍历数组最简洁直接的方法法 for (let value of arr) { console.log(value);//输出1,2,3,4,3,2,1,2 } 1. 数组.map() 返回一个新的数组,es5要复制一个新的数组我们一般用循环,现在直接用map let arr=[1,2,3,4,3,2,1,2]; let newArr=arr.map((va

ES6的一些常用特性

Default Parameters(默认参数) 还记得我们以前不得不通过下面方式来定义默认参数: var link = function (height, color, url) { var height = height || 50; var color = color || 'red'; var url = url || 'http://azat.co'; ... } 但在ES6,我们可以直接把默认值放在函数申明里: var link = function(height = 50, col

ES6新增的math,Number方法

ES6新增的math,Number方法,下面总结了一些我觉得有用的 Nunber.isInteger()判断是否为整数,需要注意的是1,和1.0都会被认为是整数 console.log(Number.isInteger(1.0))//true console.log(Number.isInteger(1))//true console.log(Number.isInteger("1"))//false console.log(Number.isInteger("1.1&quo

关于ES6的一些新特性的学习

一.关于变量 ES5 1.只有全局作用域变量和函数作用域变量 2."变量提升"(当程序进入一个新的函数时,会将该函数中所有的变量的声明放在函数开始的位置.仅仅会提升变量的声明,不会提升变量的赋值) ES6新增:块级作用域变量 1.let定义块级作用域变量 1.没有变量的提升,必须先声明后使用 2.let声明的变量,不能与前面的let,var,conset声明的变量重名 { { //console.log(a)//报错 必须先声明再使用 let a = 10;//只在当前大括号可以使用

ECMAScript简介以及es6新增语法

ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的规格,后者是前者的实现.但通常两者是可互换的.) ESMAScript的历史 1996年11月,Netscape公司将Js提交给国际化标准组织ECMA,当初该语言能够成为国际化标准. 1997年,ECMAScript 1.0版本推出.(在这年,ECMA发布262号标准文件(ECMA-262)的第一版