本篇全是重点,捡常用的怼,数值的扩展比较少,所以和函数放一起:

一,数值

1,Number.EPSILON:用来检测浮点数的计算,如果误差小于这个,就无误

2,Math.trunc():取整,去除小数部分,如果是-0.123,去除之后会留下-0,这个要注意

其他感觉用的都不多,就这两个。

二,函数:

1,es6引入了rest参数:...变量名,它跟arguments的区别,它是真正的数组

2,箭头函数:

函数体内的this对象就是定义时所在的对象,不是使用时所在的对象;

不可以当做构造函数,即不可以使用new

不可以使用arguments对象,在函数体内不存在,如果要用,可以用rest参数

不可以使用yield命令,不能用作Generator函数。

3,尾调用

指某个函数的最后一步调用另一个函数,注意,这里是只return一个函数,而不是什么表达式之类的

function f(x) {return g(x);
}  

尾调用优化:

函数在调用的时候会形成一个“调用帧”,在内存中形成一个“调用记录”,保存调用位置和内部变量,如果此时在函数A中再调一个函数B,那么在A的调用帧的上方就会形成一个B的调用帧,只有当B函数执行结束返回到A的时候,B的调用帧才会消失,也就是说当B在执行的时候,只要B函数的下方还有程序要执行,A的调用帧就一直占用着,因为要等B执行完成后继续执行,同样,如果此时B里面还有一个函数C,那么执行函数C的时候,B的调用帧也要被占着,A的也是,那这样内存就会有很大的损耗,形成了一个“调用栈”。

如果函数B是函数A的最后一步调用呢,那么执行函数B的时候,A的调用帧就会自动消失,因为B就是它的最后一步,函数A不需要再记录它的调用位置和内部变量了,所以只留下了B函数的调用帧,同样,如果C函数也是B函数的最后一步,那么调用C函数的时候,B函数的调用帧也会消失,原因同上,所以这极大地减少了内存的占用。

综上:“尾调用优化”本质就是只保留内层函数的调用帧,每次执行函数的时候调用帧只有一个,大大节省内存。

比如递归的时候,非常消耗内存,因为需要同时保存着N多个调用帧,所以很容易发生“栈溢出”的错误。但如果改成“尾递归”,调用帧只有一个,所以不会发生“栈溢出”的问题。

function factorial(n) {if (n===1) return 1;return n * fatorial(n-1);
}// n如果过大就容易栈溢出,现在改成尾递归function factorial(n, total) {if (n===1) return total;return factorial(n-1, n*total);
}// 调用帧永远只有一个,极大减少内存占用

三,数组

1,扩展运算符:三个点(...),就是rest参数的逆运算,将一个数组转为用逗号分隔的参数序列。

2,Array.from():用于将两类对象转换成数组,类数组对象(比如NodeList和arguments)和可遍历对象(Iterator Object),它还可以接受第二个参数,作用类似于map,对数组的每一项进行操作,然后将结果返回到数组。

3,Array.of():用于将一组值转换成数组,括号里面传的参数组成的数组,哪怕只有一个数,也是一个元素的数组,在es5里面,Array方法如果只传一个数字,默认就是数组的长度,但是Array.of()不一样,传一个数字就表示一个数字的数组。

4,find():找出第一个符合条件的数组成员,参数是回调函数,这里非常容易写成元素,要注意写条件,没有则返回undefined,用法如下:

[1, 4, -5, 10].find((n) => n<0)// -5[1, 5, 10, 15].find(function(value, index, arr) {return value > 9
})// 10

  

5,findIndex():找出第一个符合条件的数组成员的位置,参数也是回调函数,没有则返回-1,用法同上

(所以如果要使用数组查找某个元素是否存在,还是用es7的includes()比较好,但是要注意使用babel的transform-runtime这个plugin)

6,数组实例的entries(),keys(),values():

返回的都是一个Iterator Object,也就是说可以用iterator object.next().value来依次访问,

entries是对键值对的遍历,keys是对键的遍历,values是对值的遍历,

注意,不要和Object的三个同名方法搞混了,那个是es7的!

7,数组实例的includes(),(这里我写错地方了,这个是es7的)

数组是否包含某个元素,有就返回true,没有就false,可以传NaN来检测NaN。es5的indexOf无法检测NaN

8,数组的空位

es5对数组的空位处理:

forEach,filter,every,some都会跳过空位,

map会跳过空位,但是会保留这个值,

join和toString会将空位设为undefined,而undefined和null会被处理成字符串

es6则是明确将空位转为undefined,所以尽量不要留空位

 

转载于:https://www.cnblogs.com/yanchenyu/p/7884284.html

es6重点笔记:数值,函数和数组相关推荐

  1. ES6学习笔记(六)数组的扩展

    1.扩展运算符 1.1含义 扩展运算符(spread)是三个点(...).它好比 rest 参数的逆运算,将一个数组转为用逗号分隔的参数序列. console.log(...[1, 2, 3]) // ...

  2. ES6重点--笔记(转)

    最常用的ES6特性 let, const, class, extends, super, arrow functions, template string, destructuring, defaul ...

  3. 【ES6】对象、函数、数组的扩展

    对象的扩展 ES6允许直接写入变量和函数,作为对象的属性和方法.这时,属性名为变量名, 属性值为变量的值. let name = 'tom'; let age = 12; let obj = {nam ...

  4. Lua笔记3 函数和数组

    函数 这里主要介绍可变参数函数,使用...表示可变参数函数. function add( ... )local s = 0for i, v in ipairs{...} do -- {...}表示可变 ...

  5. ES6学习笔记二arrow functions 箭头函数、template string、destructuring

    接着上一篇的说. arrow functions 箭头函数 => 更便捷的函数声明 document.getElementById("click_1").onclick = ...

  6. Go 学习笔记(10)— 数组定义、数组声明、数组初始化、访问数组、数组相等、向函数传递数组

    1. 数组定义 数组是具有相同唯一类型的一组已编号且长度固定的数据项序列,这种类型可以是任意的原始类型例如整形.字符串或者自定义类型. 2. 声明数组 Go 语言数组声明需要指定元素类型及元素个数,语 ...

  7. C语言笔记含源码(变量、输入输出、分支、循环、函数、数组、指针、字符串、结构体)小总结

    文章目录 一.变量与输入输出 二.分支语句 三.循环 四.函数 五.数组 六.指针 七.字符串 八.结构体 一.变量与输入输出 定义变量需要:类型.变量名.变量值(可有可无) #include < ...

  8. PHP数组函数 sort (对数值索引的数组升序排序)

    在PHP中,数组函数 sort () 用来对数值索引的数组按照升序排序.     函数语法: sort ( array &$array [, int $sort_flags = SORT_RE ...

  9. 细说PHP笔记03(第7章)--数组与数据结构,数组定义,数组遍历,数组内部指针遍历,键值操作函数,统计数组函数,回调函数处理数组元素,数组排序,拆分、合并、分解、结合数组,数组实现堆栈,随机选取元素

    1.数组 索引数组:索引值是整数 关联数组:索引值是字符串 2.数组的定义 1.以直接赋值的方式声明 $数组名[下标]=资料内容 或 $数组名[关联字符串(键值)]=资料内容 <?php $va ...

最新文章

  1. common lisp里的几个操作符
  2. 在线作图|2分钟绘制一张豆荚图
  3. Coursera课程Python for everyone:chapter5
  4. MySQL查询不到中文的问题
  5. extend 对象继承
  6. Linux删除安卓温控,RK平台关闭温度控制降频功能
  7. 【扫盲系列】网络术语
  8. 网吧web电影服务器系统,网吧WEB、游戏、影视服务器应用需求分析
  9. 二. 再熟悉 Markdown 标准语法
  10. 解决mysql每天12点的dos弹框
  11. WPS---EXCEL(十一)---将插入数据转化成柱状图
  12. VC++实现的软键盘功能(附源码)
  13. python中的矩阵分块
  14. 100万补贴!东湖高新区知识产权运营服务体系建设项目申报时间、条件流程大全
  15. 关于一个二维数组问题
  16. 个人投资课 张潇雨_张潇雨《个人投资课》之五大原则
  17. 分布式管理控制系统Git与项目托管平台Github相关概念、工作流程与操作方法
  18. Mybatis 主键插入回显
  19. (附源码)ssm养老院信息管理系统 毕业设计 211141
  20. calico分配网络使k8s节点指定固定网段

热门文章

  1. ajax为什么有时候不行,为什么不能用ajax调用
  2. 汇编语言-010(循环移位ROL,ROR 、进位循环进位RCL,RCR 、有符号数溢出 、双精度移位SHLD,SHRD、SHL和ADD计算 、位运算应用)
  3. matlab中将数据保存为txt文件_matlab中将数据输出保存为txt格式文件的方法 (1)
  4. c++怎么将文件中的数据读出并赋值给字符串_web前端开发过程中如何写JavaScript程序?...
  5. HDU 5950——Recursive sequence
  6. 41. 缺失的第一个正数 golang
  7. mysql 学习笔记07日期相关函数01
  8. linux 进程通信 pipe
  9. linux服务器无法识别xml文件,linux上重启服务器提示找不到smartbi-config.xml文件
  10. 1007. 素数对猜想