美文网首页
函数与对象的语法糖and新版字符串

函数与对象的语法糖and新版字符串

作者: 我也不知道啊丶 | 来源:发表于2018-12-13 20:53 被阅读0次

    函数默认参数

    求两个参数的和

    因为只传入了一个参数,所以console.logb打印出来的是undefined,
    return出来的是NaN

    那么可以这样处理:

    等价于下图

    为了代码的严谨,应该给每个参数都这样处理一遍:

    但是 如果有多个参数呢?
    ES6给了一个方法:
    判断参数是否为undefined,如果是,则为默认值

    每次函数调用时都会创建一个新的参数对象


    console.log(push(2))的时候不会打印出[1,2]

    剩余参数

    假设有一个函数,返回值是所有传入参数的和


    因为不知道一共有多少个参数,所以可以改成下面这种写法
    使用循环的方法
    如果传入参数里面不全是数字呢?

    也可以换一种更‘甜’的写法

    ...xxx表示逗号后面所有参数的集合,这个集合的名字是xxx

    arguments是一个伪数组
    ...返回的是一个真数组,可以使用数组的方法

    reduce()是数组的方法
    补充一点,如何把一个伪数组变成一个真数组呢?
    在ES5里,只能用这种方法:
    let args = Array.prototye.slice.call(伪数组);
    很麻烦对吧,ES6里提供了一个简便的方法:
    let args = Array.from(伪数组);
    还有更简便的方法:
    let args = [...arguments]

    展开操作

    声明一个变量array2

    如果不想写a,b,c呢?别急,还有更骚的操作:



    解构赋值

    如果有a和b两个变量,如何交换他们的值?



    ES6之前的方法:


    声明一个变量储存a的值

    ES6提供的新方法:


    实际上借用了数组

    如果有一个对象:



    要取出obj的三个变量的值
    ES5的方法:



    ES6的方法:
    很方便有木有

    还可以使用默认值的方法


    如果只传入了一个参数:

    设置默认值:
    如果一个值都不传,那么console.log(a,b) 就是 6,7

    别急,还有糖吃


    如果想要 b = 3该怎么写呢?
    用,空出来
    对象也是一样,
    等于 let name = obj.name
    如果想重命名
    此时就没有声明name,只声明了xingming
    如果obj里还有一个对象,如

    通过这种方法取值

    同时也可以重命名
    此时只声明了xingming,没有name也没有child
    结合上面的默认值
    如果有name则打出‘xx’,如果没有则打出‘Tom’

    对象浅拷贝


    如果此时改变objB.name的值,objA.name的值会发生改变吗?


    可以看到,此时objA.name的值并未改变

    因为objA.name的值是一个字符串,所以完整的拷贝过来了,
    如果在objA.name是一个对象呢?



    可以看到,当改变objB.name.x的值以后,objA.name.x的值也发生了改变,
    原因是 浅拷贝共用了对象,拷贝的时候实际上只是拷贝了对象的地址。

    ES6 浅拷贝方法

    对象合并

    objB是objA和objC的合并

    以前的方法:


    如果有相同的变量,后面的会覆盖前面的

    ES6的写法:


    同样如果有相同的变量,后面的会覆盖前面的

    深拷贝方法

    JSON.parse(JSON.stringify(data));需满足以下条件:
    这个对象没有复杂的对象,如:
    a.日期对象;
    b.正则对象;
    c.函数;
    d.所有普通对象之外的对象...
    也就是说,这个方法不适用于复杂对象,
    如果要写一个适用于复杂对象的方法 -----递归

    MDN里有更多例子

    还有一些语法糖

    如果key和vul是一样的话,可以只写一个:


    一些简写:


    可以不写:function

    在一个对象里拷贝另外一个对象


    声明一个键和值是已经声明的过的对象,如



    以前只能这么写



    ES6写法

    新版字符串

    es6之前,声明一个多行字符串:



    中间如果要换行需要加 \ 转义,但是 \ 后面如果有空格会报错,且不容易发现,结果里面没有回车。
    第二种写法:


    ES6写法

    如果想在字符串中间插入变量,之前的写法:



    或者:


    ES6的写法

    一些应用场景:


    react 里的 styled-component库用的就是这个语法

    相关文章

      网友评论

          本文标题:函数与对象的语法糖and新版字符串

          本文链接:https://www.haomeiwen.com/subject/tbrbhqtx.html