ES6浅谈 -- 数值扩展,函数扩展
Posted harrywu96
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了ES6浅谈 -- 数值扩展,函数扩展相关的知识,希望对你有一定的参考价值。
数值扩展:
1.trunc(),去小数,非数字先用Number()转,转不了返回NaN。sign(),判断正负或0,正返回1,负返回-1,转换同上。cbrt(),计算立方根,转换同上。clz32(),计算参数的32位无符号整数前导0的个数。imul(),计算32位带符号整数相乘所得。Math.fround
方法返回一个数的32位单精度浮点数形式。Math.hypot
方法返回所有参数的平方和的平方根。BigInt数据类型,整数无位数限制,可以非常大。
函数扩展:
1.在看到参数默认值的时候,没有什么大的问题,因为之前也总结了,无非就是不能再声明,惰性求值(只有在需要的时候才获取),不能给参数赋未声明的变量值。这些都没什么问题,但是就突然想到了参数的传递方式。我们都知道在JS高程中说到的,参数是按值传递的,传基本类型的值这个结论非常清楚不需要解释,但是传对象的时候到底是传的什么呢?仔细思考,如果是按值传递,这个是如果是对象本身,那就相当于给给参数了一个新指针,然后堆里有一个新的内存空间,但这种情况显然不对。因为你堆里有新空间跟之前的对象没有联系的话,那么在函数中对形参添加一个属性,而实参作为函数的参数,调用这个实参对象的同名(形参同名)属性应该是没有意义的。所以这种情况排除。第二种情况,如果是直接给一个相同的引用(地址),那么为什么叫做按值传递,为什么不是变量赋值里的按引用传递?形参也是个局部变量啊对不对。所以,真正的传递模式是按共享传递。这里摘抄了一位大佬的结论:
"它与引用传递的不同是,引用并没有内存,例如c语言中的指针,只是一个指向;但是共享传递不是,它会将实参的所在的地址也拷贝进来,这个变量本身就可以看做一个内存,只是这个内存的一个值保存另一块内存的地址。所以我们可以运行上面的函数发现,obj2的值变了,但是person2没有任何影响,因为此时它们是两块不同的内存,而person1和obj1之所以可以变,是因为person1和obj1两块内存中的一个name所在的区域保存了指向一块内容为”张三”的内存的引用(内存地址),并且这块内存是惟一的,所以obj1表现的像是引用传递。"
原文链接:https://blog.csdn.net/babulongbo/article/details/82595119
2.参数默认值可以与解构赋值默认值一起使用。解构赋值默认值有一个问题是如果不传参,那么一定会报错,当然传参肯定也要传一个对象,对象里面用同名属性,然后解构。对解构赋值默认值(是一个对象的样子)这个形参赋一个默认值就可以解决这个报错问题。
3.默认值位置:通常情况定义在尾参数,如果是头参数或中间则如下代码所示,另外赋undefined则当做默认值,null就是null。
// 例一 function f(x = 1, y) { return [x, y]; } f() // [1, undefined] f(2) // [2, undefined]) f(, 1) // 报错 f(undefined, 1) // [1, 1] // 例二 function f(x, y = 5, z) { return [x, y, z]; } f() // [undefined, 5, undefined] f(1) // [1, 5, undefined] f(1, ,2) // 报错 f(1, undefined, 2) // [1, 5, 2]
先到这里吧
以上是关于ES6浅谈 -- 数值扩展,函数扩展的主要内容,如果未能解决你的问题,请参考以下文章