美文网首页
函数与对象的语法糖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新版字符串

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

  • JS原型的面试考点

    class与普通构造函数的区别 class实际上是函数,是语法糖 class在语法上更贴近面向对象的写法。 cla...

  • Class

    ES6创建对象的方法,可以看作语法糖,它的本质是函数。让对象原型的写法更清晰,更加像面向对象的语法。 Class与...

  • 函数与对象的语法糖 笔记

    函数的默认参数 剩余参数 伪数组变为数组 array2 是array1 的第三项后的几项 展开操作 解构赋值 属性...

  • ES6之async的常用简单总结

    1.Async函数是什么 generator函数的语法糖。Async函数返回一个Promise对象,当函数执行的时...

  • 构造函数与类(class)

    类其实就是构造函数的语法糖 , 构造函数 构造函数有一个prototype属性指向自身的原型对象, 构造函数的实例...

  • 【C#与.net】3.0 类、对象、方法、垃圾回收机制、对象的数

    1.0 类、对象和方法 因为自己java出身,就不在这里讲什么类和对象、方法、函数、构造函数了。直接上语法糖。 ...

  • ES6---函数与对象的语法糖

    对未定义的参数的解决办法(默认参数值) 在调用时解析 在函数被调用时,参数默认值会被解析,所以不像Python中的...

  • ES6函数与对象的语法糖

    1.函数默认参数 与 Python 的区别 http://effbot.org/zone/default-valu...

  • ES6---新版字符串

    ES5的字符串形式 ES6语法糖的字符串形式 插入JS代码 函数接字符串 fn${name} 是一个 ${pers...

网友评论

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

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