还有symbol和set,map, bind,call,apply

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);
})

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

  1. ES6新增的一些特性

    1.let关键字,用来代替 var的关键字,特点: 1.变量不允许被重复定义 2.不会进行变量声明提升 3.保留块级作用域中i的 2.const定义常量,特点:1.常量值不允许被改变 2.不会进行变量 ...

  2. ES6新增常见特性

    一:声明属性let const var let const 区别 1.var声明变量会发生变量提升,let.const不会发生变量提升 2.var允许重复声明变量,let不可以 3.const声明变量 ...

  3. ES6新增特性

    ES6:  ECMA 第六次改版   块级作用域:   凡是被{ }包裹住的代码都是块级作用域,除了对象       特点:会造成一个暂时性死区    新增声明变量的两种方式: let:     a. ...

  4. ES6的一些常用特性

    由于公司的前端业务全部基于ES6开发,于是给自己开个小灶补补ES6的一些常用特性.原来打算花两天学习ES6的,结果花了3天才勉强过了一遍阮老师的ES6标准入门(水好深,ES6没学好ES7又来了...) ...

  5. 浅谈ES6新增数据类型:Symbol

    面试中喜闻乐见的问题就是问我们的ES6新增了哪些个新特性 这篇文章一起学习一下新增的数据类型:Symbol JS的原始数据类型:6种Boolean,String,Undefined,NULL,Numb ...

  6. ES6十大常用特性

    .   Default Parameters(默认参数) in ES6 2.    Arrow Functions (箭头函数)in ES6 3.    Block-Scoped Constructs ...

  7. ES6新增的 Set 和 WeakSet 是什么玩意?在此揭晓

    现在的章节内容会更加的紧密,如果大家看不懂可以先去看以前的文章,当然看了的忘了,也可以去看一下,这样学习后面的内容才会更加容易. 什么是Set结构 Set是ES6给开发者带来的一种新的数据结构,你可以 ...

  8. 面向对象编程-终结篇 es6新增语法

    各位,各位,终于把js完成了一个段落了,这次的章节一过我还没确定下面要学的内容可能是vue也可能是前后端交互,但无论是哪个都挺兴奋的,因为面临着终于可以做点看得过去的大点的案例项目了,先憋住激动地情绪 ...

  9. es6新增

    首先要说let,他是只在代码块中执行的变量,例如: {    let a = 10;    var b = 1;}console.log(a);//definedconsole.log(b);//1 ...

  10. ECMAScript简介以及es6新增语法

    ECMAScript简介 ECMAScript与JavaScript的关系 ECMAScript是JavaScript语言的国际化标准,JavaScript是ECMAScript的实现.(前者是后者的 ...

随机推荐

  1. 【再学WPF】自定义样式

    1.添加"资源字典": 工程名称:WpfApp1 新建Styles文件夹:创建"Dictionary1.xaml"的文件: 2.编辑样式: <SolidC ...

  2. (6) JavaScript - Math对象与日期对象

    1 认识对象 概念:对象就是一种类型,一种引用类型,而对象则是引用类型的实例.在ECMAScript中,引用类型是一种数据结构,用于将数据和功能组织在一起,通常它也被称作类. 面向过程思想:只考虑过程 ...

  3. CGAL5.0.2 CMake过程记录

    Zlib的INCLUDE_DIR 找到了,但是release_LIBRARY没有找到.不过没有影响generate. 打开build文件夹的CGAL.sln 文件,ALL_BUILD 生成,成功. 最 ...

  4. liunx 目录详解

    /etc/sysconfig/network-scripts/ifcfg-eth0  第一块网卡的配置文件 /etc/sysconfig/network    主机名配置文件 /etc/profile ...

  5. Python之常用数据类型详解

    tuple 元组 1 # 定义 2 temp = (2, ) # 规范定义,单个元素的元组 3 tem = 2, # 可行,但不规范定义 4 tep = () # 空元组 5 6 tp = (1, ' ...

  6. vue3 vue-i18n 入口文件配置报警

    报警: You are running the esm-bundler build of vue-i18n. It is recommended to conf 解决: 在vue.config.js文 ...

  7. 使用*打印出2*n-1行的菱形

    /** * @Author * @Description //TODO 2*n+1菱形 * @Date * @Param int * @return **/ public static void pr ...

  8. Promise和await、同步和异步

    1.同步和异步是什么: ​ ①同步:同步是指如果一个进程在执行某个请求的时候,如果该请求需要等待一段时间,那么该进程会一直等待下去,直到收到返回信息才继续执行下去 ​ ②异步: 指一个请求在执行某个请 ...

  9. IDEA快键键设置为Eclipse快捷键

    一.基础修改,参考这个就可以了 https://jingyan.baidu.com/article/6dad5075a5f7b4e122e36e4b.html 二.其他需要手动配置的快捷键修改(主要是 ...

  10. gitlab-ce安装

    # vim /etc/yum.repos.d/gitlab-ce.repo [gitlab-ce] name=Gitlab CE Repository baseurl=https://mirrors. ...