ES6新语法(二)

1.解构

        在ES6中,可以使用解构从数组和对象提取值并赋值给独特的变量,即将数组或对象中的值,拆成一个一个变量。

        解构:自动解析数组或对象中的值,并赋值给指定的变量。、

1.1数组解构

var arr = [3,4,5];
    var [a, b, c] = arr;
    console.log(a, b, c);

    //还可以忽略值 需要使用,占位
    var arr = [3,4,5];
    var [a,, c] = arr;
    console.log(a, c);

    //函数返回值为数组,进行解构
    function f5(){
        return [1,2,3];
    }
    var [a, b, c] = f5();
    console.log(a, b, c);

1.2对象解构

        将对象中的成员值,取出并赋值给多个变量(变量名与对象成员名一致)

var person = {
    "nickname": "老三",
    "age": 30,
    "sex": "男"
};
//解构时 {}中的变量名,不能加引号
var {nickname, age, sex} = person;
console.log(nickname, age, sex);
//可以忽略值  直接忽略 不需要占位
var {nickname, sex} = person;
console.log(nickname, sex);

1.3函数参数与解构

        函数参数使用解构数组或解构对象形式

//1.函数形参,使用解构数组形式,调用函数时需要传递数组实参
function f1([x,y,z]){
      console.log(x,y,z);
}
var arr = [1,2,3];
f1(arr);

//相当于
/*
function f1(a){
      var [x,y,z] = a;
      console.log(x,y,z);
}
var arr = [1,2,3];
f1(arr);
*/

//2.函数形参,使用解构对象形式,调用函数时需要传递对象实参
function f2({nickname,age,sex}){
      //变量名与对象成员名一致
      console.log(nickname,age,sex);
}
var obj = {"nickname":"zhangsan", "age":40, "sex":"男"};
f2(obj);

//相当于
/*
function f1(a){
      var {nickname, age, sex} = a;
      console.log(nickname,age,sex);
}
var obj = {"nickname":"zhangsan", "age":40, "sex":"男"};
f2(obj);
*/

1.4默认值与解构数组

         函数参数使用解构数组 并设置默认值

<script>
//1.函数参数使用解构数组,调用函数不传参数会报错
function fn([x, y, z]){
      console.log(x, y, z);
}
fn(); //会报错
</script>

<script>
//2.函数参数使用解构数组,对整个数组设置默认值为空数组
function f1([x, y, z] = []){
      console.log(x, y, z);
}
f1(); //不报错  x y z 都是 undefined

//3.函数参数使用解构数组,对整个数组设置默认值,数组中每个变量对应一个默认值
function f2([x, y, z] = [1,2,3]){
      console.log(x, y, z);
}
f2(); //不报错  x=1 y=2 z=3
f2([4,5,6]); // x=4 y=5 z=6

//4.函数参数使用解构数组,对整个数组设置默认值为空数组, 在解构数组中对每个变量设置一个默认值
function f3([x=1, y=2, z=3]=[]){
      console.log(x, y, z);
}
f3(); //不报错  x=1 y=2 z=3
f3([4,5,6]); // x=4 y=5 z=6
</script>

1.5默认值与解构对象

         函数参数使用解构对象 并设置默认值

<script>
//1.函数参数使用解构对象,调用函数不传参数会报错
function fn({x, y, z}){
      console.log(x, y, z);
}
fn(); //会报错
</script>

<script>
//2.函数参数使用解构对象,对整个对象设置默认值为空对象
function f1({x, y, z} = {}){
      console.log(x, y, z);
}
f1(); //不报错  x y z 都是 undefined

//3.函数参数使用解构对象,对整个对象设置默认值,对象中每个变量对应一个默认值
function f2({x, y, z} = {"x":1,"y":2,"z":3}){
      console.log(x, y, z);
}
f2(); //不报错  x=1 y=2 z=3
f2({"x":4,"y":5,"z":6}); // x=4 y=5 z=6

//4.函数参数使用解构对象,对整个对象设置默认值为空对象, 在解构对象中对每个变量设置一个默认值
function f3({x=1, y=2, z=3}={}){
      console.log(x, y, z);
}
f3(); //不报错  x=1 y=2 z=3
f3({"x":4,"y":5,"z":6}); // x=4 y=5 z=6
</script>

2.Symbol数据类型

            ES5数据类型:6种: string number boolean null undefined object

            ES6新增了一种数据类型:Symbol,表示独一无二的值,Symbol最大的用途是用来定义对象的唯一属性名

var symbol1 = Symbol();

var symbol2 = Symbol("Alice");

console.log(symbol1, symbol2) // 输出:Symbol() Symbol(Alice)

 Symbol类型的值是一个独一无二的值,Symbol函数的参数只是表示对当前Symbol值的描述,因此相同参数的Symbol函数的返回值是不相等的。

var attr_name = Symbol();
var obj = {
    [attr_name]: "Alice"
};
console.log(obj[attr_name]);

var obj = {
      [Symbol()]:"Alice"
};
console.log(obj);

 注:Symbol值作为对象属性名时,不能用点运算符。由于点运算符后面总是字符串,所以不会读取attr_name作为标识名所指代的那个值。

           使用[]方括号,里面的attr_name不带引号,表示attr_name是一个变量.

3.箭头函数

ES6可以使用“箭头”(=>)定义函数,注意是普通函数,不要使用这种方式定义类(构造器)。

3.1语法

           具有一个参数并直接返回的函数

var f1 = a=>a;
//相当于  var f1 = function(a){ return a;};
console.log(f1(‘hello‘));//‘hello‘

 没有参数的需要用在箭头前加上小括号

var f2 = () => ‘来了老弟‘;
console.log(f2());

多个参数需要用到小括号,参数间逗号间隔

var f3 = (a, b) => a+b;
console.log(f3(3,4));//7

 函数体多条语句需要用到大括号

var f4 = (a, b) => {
      console.log(‘来了老弟‘);
      return a+b;
}
console.log(f4(5,6));//11

返回对象时需要用小括号包起来,因为大括号被占用解释为代码块

var f5 = () => {
      return ({"name":"老弟", "age":40});
}

//var f5 = () => ({"name":"老弟", "age":40});
console.log(f5());

直接作为事件处理函数

<input type="button" value="点击" id="btn">
<script>
    document.getElementById(‘btn‘).onclick = evt=>{
          console.log(evt);//evt 事件对象
    }
</script>

赋值为对象的方法

var obj = {};
obj.say = ()=>{return "hello,我是obj的say方法";}
console.log(obj.say());

作为回调函数

var f6 = (f)=>{
    console.log(f(100));
};
// f6(a=>a);
var f7 = a=>a;
f6(f7);

1.2注意点

             typeof 判断箭头函数 结果为function

var f1 = a=>a;
console.log(typeof f1);//‘function‘

instanceof判断是否Function的实例,结果为true

var f1 = a=>a;
console.log(f1 instanceof Function);//true

箭头函数不绑定this, 内外this指向固定不变

var obj = {
      say:function(){
          //非箭头函数
          var _this = this;
          var f1 = function(){
              console.log(_this);//obj
            console.log(this);//window
        };
          f1();
          //箭头函数
        var f2 = ()=>{
            console.log(this);
        };
          f2();
      }
};
obj.say();

 箭头函数不能做构造函数,不能用new实例化,也没有prototype属性

var Person = ()=>{};
console.log(Person.prototype);//undefined
var p = new Person();//报错

不能使用arguments

var f1 = ()=>{
    console.log(arguments);
};
f1(); //报错

箭头函数也支持默认参数、剩余参数、解构 

var f1 = (x=1,y)=>{
      console.log(x, y); //3 4
};
f1(3,4);
var f2 = (...x)=>{
      console.log(x); //[3,4]
};
f2(3,4);
var f3 = ([x,y]=[])=>{
      console.log(x, y); //3 4
};
f3([3,4]);

原文地址:https://www.cnblogs.com/shineguang/p/11253290.html

时间: 2024-08-27 09:38:34

ES6新语法(二)的相关文章

总结常见的ES6新语法特性

总结常见的ES6新语法特性 ES6给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一些es6新特性的例子,如果想要

总结常见的ES6新语法特性。

前言 ES6是即将到来的新版本JavaScript语言的标准,他给我们带来了更"甜"的语法糖(一种语法,使得语言更容易理解和更具有可读性,也让我们编写代码更加简单快捷),如箭头函数(=>).class等等.用一句话来说就是: ES6给我们提供了许多的新语法和代码特性来提高javascript的体验 不过遗憾的是,现在还没有浏览器能够很好的支持es6语法,点这里查看浏览器支持情况,所以我们在开发中还需要用babel进行转换为CommonJS这种模块化标准的语法. 因为下面我会讲到一

ES6新语法之---对象字面量扩展、模板字符串(5)

这节课学习ES6中对象字面量扩展和新增模板字符串 第一部分:对象字面量扩展 1.简洁写法 ES6对于对象字面量属性提供了简写方式. 1.1:属性简写 //传统写法 var x = 2, y = 3, o = { x: x, y: y }; //ES6简洁写法 var x = 2, y = 3, o = { x, //属性名和赋值变量名相同时,可简写 y }; 1.2:方法简写 //传统写法 var o = { x: function() { //... }, y: function() { //

es6新语法

SegmentFault 头条 问答 专栏 讲堂 职位 活动 搜索 消息 注册 · 登录 home javascript php python java mysql ios android node.js html5 linux c++ css3 git golang ruby vim docker mongodb 文 es6语法快速上手 es6 javascript 奋进的小莫 2016年06月17日发布 推荐 2 推荐 收藏 44 收藏,6.5k 浏览 随着google和firfox以及no

ES6新语法概览

简介 ES6是JavaScript语言的新一代标准,加入了一些新的功能和语法,正式发布于2015年6月,亦称ES2015:该标准由ECMA(欧洲计算机制造联合会)的第39号技术专家委员会(TC39)制订,ES7正在制订中,据称会在2017年发布. 语法 箭头函数.this ES6中可以使用 => 作为函数表达形式,极简风格,参数+ => +函数体. var foo = function(){return 1;}; //等价于 let foo = () => 1; let nums = [

ES6新语法(一)

1.常量         ES5没有定义声明常量的方式,ES6标准中引入了新的关键字const来定义常量.         常量必须给初始值: 常量不能在同一作用域内重新定义或赋值:  <script> const PI = 3.14; console.log(PI); </script> 2.块级作用域          JS中作用域有:全局作用域.函数作用域          ES6中新增了块级作用域.          块作用域由 { } 包括,if语句和for语句里面的{

ES6新语法之---函数扩展(7)

这节学习ES6中对函数新增的方法和属性. 1.新增函数的参数默认值 参考S6系列第二篇:http://www.cnblogs.com/diweikang/p/8976854.html 2.新增了函数的rest参数 参考ES6系列第二篇:http://www.cnblogs.com/diweikang/p/8976854.html 3.length属性 作用:获取函数预期传入的参数个数. 指定默认值后,length属性将返回没有指定默认值参数的个数. (function (a) {}).lengt

解构赋值 —— ES6新语法学习心得

## 3.解构赋值 ## 作用:将数组.对象.函数的参数 解构,对变量进行赋值,可以直接调用该变量,大大提高效率 ## 例 1: ##  标准模式的解构赋值 var [a,b,c]=[1,2,3] console.log(a) //1 console.log(b) //2 console.log(c) //3 ## 例2 : ##  嵌套解构赋值,只要"模式匹配",就能解构赋值,如果没有对应的值,就是undefined let [foo, [[bar], baz]] = [1, [[2

【JavaScript】ES6 新语法

function* 声明 function* 声明(function关键字后跟一个星号)定义一个generator(生成器)函数,返回一个Generator对象. 生成器是一种可以从中退出并在之后重新进入的函数.生成器的环境(绑定的变量)会在每次执行后被保存,下次进入时可继续使用. 调用一个生成器函数并不马上执行它的主体,而是返回一个这个生成器函数的迭代器(iterator)对象.当这个迭代器的next()方法被调用时,生成器函数的主体会被执行直至第一个yield表达式,该表达式定义了迭代器返回