ES5新增内容
一、数组API
实际开发中forEach和map会多一些
=>是es6语法中的arrow function
举例:
(x) => x + 6
相当于
function(x){
return x + 6;
}
undefined转成数字是NaN 判断:
arr.every():判断arr中每个元素是否都符合要求
只有每个元素都符合条件时,才返回true
只要有一个元素不符合条件,就返回false
类似&&
arr.some():判断 arr中是否包含符合要求的元素
只要有一个元素符合条件,就返回true
除非所有元素都不符合条件,才返回false
类似||
如何:
var bool = arr.every(function(val,i,arr){
val //自动获得当前元素值
i //自动获得当前元素的位置
arr //自动获得当前数组
return 条件;
})
ps:参数用不到的可以不写,
every 会用function,去每个元素执行一次,收集返回的true和false。
----------------------------------------------
例:判断数组是否全部偶数,只用一个参数
<script type="text/javascript">
var arr1 = [1,2,3,4,5];
var arr2 = [10,6,4,8,2];
var arr3 = [1,2,3,2,1];
function allEven(arr){
return arr.every(function(val){
return val%2==0;
})
//简写成:
return arr.every(val=>val%2==0); }
console.log(
allEven(arr1),//false
allEven(arr2),//true
allEven(arr3) //false
)
</script> 上述例子改成arr.some()结果为:true true true
----------------------------------------
例:判断是不是升序排序:三个参数都用到
var arr1 = [1,2,3,4,5];
var arr2 = [10,6,4,8,2];
var arr3 = [7,6,3,2,1];
function isASC(arr) {
return arr.every(function(val,i,arr){
//最后一个值和自己比较永远为true,4<4时就是最后一个值了,设true
return i<arr.length-1 ? val<=arr[i+1]:true;
})
//简写成:
return arr.every(
(val,i,arr) => i<arr.length-1?val<=arr[i+1]:true
); }
console.log(
isASC(arr1),//true
isASC(arr2),//false
isASC(arr3) //false
)
---------------------------------------------------------------------------------------------------------------- 二、遍历
arr.forEach():对原数组中每个元素执行相同的操作,不能新值返undefined
arr.map():取出原数组中的值,加工后,放入新数组,可以赋新值,返回新值
如何:arr.forEach(function(val,i,arr){
arr[i]=新值;
})
arr.map(function(val,i,arr){
return 新值;
})
例:数组arr1值乘以2,数组arr2除以2给新值
var arr1 = [1,2,3,4,5];
var arr2 = [10,6,4,8,2];
var arr3 = [7,6,3,2,1];
//每个值 *2返回
arr1.forEach(function(val,i,arr){
arr[i]*=2;
})
//简写成:
arr1.forEach((val,i,arr)=>arr[i]*=2)
console.log(String(arr1))//2,4,6,8,10 //每个值 /2返回新值,新变量接
var newArr = arr2.map(function(val,i,arr){
return val/2;
})
//简写成:
var newArr = arr2.map(val =>val/2)
console.log(String(arr2))//10,6,4,8,2
console.log(String(newArr))//5,3,2,4,1 三、过滤和汇总
过滤:选取原数组中符合条件的元素组成新数组
var subArr = arr.filter(function(val,i,arr){
return 条件;//所有返回true的元素,被复制到新数组
})
例:过滤arr1中所有偶数
var arr1 = [1,2,3,4,5];
var evens =arr1.filter(function(val){
return val%2==0;
})
//简写成:
var evens = arr1.filter(val=>val%2==0)
console.log(String(arr1))//1,2,3,4,5
console.log(String(evens))//2,4 汇总:对数据中每个元素的值最终统计出一个新结果
var result = arr.reduce(function(prev,val,i,arr){
prev //获得截止目前的统计结果
return prev+val; //当前值和现在的prev值
},start) //start是汇总后要加的值到总和中
例:汇总arr1与arr2总和
var arr1 = [1,2,3,4,5];
var arr2 = [10,6,4,8,2];
//求arr1总和
var result =arr1.reduce(function(prev,val){
return prev+val;
})
var result =arr2.reduce(function(prev,val){
return prev+val;
},result)
console.log(result)//45
//25
var result =arr1.reduce(function(prev,val){
return prev+val;
},10)
console.log(result)//25 效率:数组API,其实内部使用的还是for循环遍历的方式,并没有提高程序的执行效率。只是简化了代码量。 在鄙视面试中会提到不能用数组API,意思是舍去了for循环还考你什么 *****bind()
什么是:基于一个现有函数,创建一个新函数,并永久绑定this。
不但可永久绑定this,也可永久绑定参数
为什么:this总是发生变化。
何时:只要希望一个对象永久绑定一个函数的this上。
结果:函数中的this将永远无法被其他对象替换。
(相当于一本书写上的自己的名字) 例:定义一个计算器,没绑定bind的为公共计算器,call可以调用,绑定bind的为私人计算器,别人调用不了,
//ps:用bind绑定的call强制作借用不好用了,
function calc(base,bonus){
console.log(
this.ename+'的总工资是'+(base+bonus)
)
}
var lilei = {ename:'Li Lei'};
var hmm = {ename:"Han Meimei"};
//lilei临时借用calc计算器
calc.call(hmm,10000,4000)//Han Meimei的总工资是14000
calc.call(lilei,10000,1000)//Li Lei的总工资是11000
//lilei买了一个和 calc一样的计算器,新计算器永久属于lilei
var lilei_calc=calc.bind(lilei);
lilei_calc(10000,3000); //Li Lei的总工资是13000
lilei_calc(10000,5000); //Li Lei的总工资是15000
lilei_calc(10000,9000); //Li Lei的总工资是19000
//hmm借lilei的计算器,call没有bind强大,借来用不了,名还是Li Lei
lilei_calc.call(hmm,10000,2999);//Li Lei的总工资是12999, 鄙视题:call apply bind 区别
call和apply:临时借用一个函数,并替换this为指定对象,
-----立刻执行
bind:基于现有函数,创建一个新函数,并永久绑定this 为指定对象。
-----只创建函数,不执行(要执行在下边在调用)
何时:立刻执行函数-------call
不立刻执行 -------bind
二、Object.create()
情况1:
var o1 =Object.create({x:1,y:2}) //o1继承了属性x和y
console.log(o1.x) //1
情况2:
var o2 =Object.create(null)
console.log(o2)// 一般不这样做,没意义{}
情况3:
var o3 =Object.create(Object.prototype)
console.log(o3)// o3和{}和new Object()一样 真正意义所在第二个参数:
英意 :inherit 继承
ES5新增内容的更多相关文章
- js数组定义和方法 (包含ES5新增数组方法)
数组Array 1. 数组定义 一系列数据的集合成为数组.数组的元素可以为任何类型的数据(包括数组,函数等),每个元素之间用逗号隔开,数组格式:[1,2,3]. 2. 数组创建方式 (1) 字面量方法 ...
- AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码
AppleWatch开发教程之Watch应用对象新增内容介绍以及编写运行代码 添加Watch应用对象时新增内容介绍 Watch应用对象添加到创建的项目中后,会包含两个部分:Watch App 和 Wa ...
- 4日6日--ES5新增数组方法
forEach使用的函数调用,所以占内存比较大,不如定长for循环和迭代for循环 1.通过forEach将数组中的元素逐个表示出来(遍历方法,读取操作). 2.通过map将原数组中的元素进行算数运算 ...
- String方法,js中Array方法,ES5新增Array方法,以及jQuery中Array方法
相关阅读:https://blog.csdn.net/u013185654/article/details/78498393 相关阅读:https://www.cnblogs.com/huangyin ...
- 从零开始学 Web 之 HTML5(二)表单,多媒体新增内容,新增获取操作元素,自定义属性
大家好,这里是「 从零开始学 Web 系列教程 」,并在下列地址同步更新...... github:https://github.com/Daotin/Web 微信公众号:Web前端之巅 博客园:ht ...
- Delphi XE5中的新增内容
Delphi XE5中的新增内容 Delphi XE5是所有Delphi开发人员的必须备升级,并且是来自Embarcadero的获奖的.多设备应用开发解决方案的最新版本.使用Delphi XE5的新特 ...
- ES5新增数组方法测试和字符串常见API测试
首先是ES5新增数组方法测试: <!DOCTYPE html><html lang="en"><head> <meta charset=& ...
- ES5新增的数组方法
ES5新增:(IE9级以上支持)1.forEach():遍历数组,无返回值,不改变原数组.2.map():遍历数组,返回一个新数组,不改变原数组.3.filter():过滤掉数组中不满足条件的值,返回 ...
- ES6新增内容总结
ES6新增内容有:1,模块化思想.2,关于变量let和const.3,解构赋值.4,字符串的扩展.5,函数的扩展.6,箭头函数.7,继承apply的用法 以下就是详解: 1:模块化思想 非模块化有命名 ...
随机推荐
- Git中撤销提交
Git的几种状态 未修改 原始内容 已修改 ↓ 工 作 区 已暂存 ↓ git add 暂 存 区 已提交 ↓ git commit 本地仓库 已推送 ↓ git push 远程仓库 注意:下面所有命 ...
- 图像处理之gamma校正
1 gamma校正背景 在电视和图形监视器中,显像管发生的电子束及其生成的图像亮度并不是随显像管的输入电压线性变化,电子流与输入电压相比是按照指数曲线变化的,输入电压的指数要大于电子束的指数.这说明暗 ...
- GUI 设计
GUI(图形化界面编程) Graphical User Interface (java.Awt javax.Swing) CLI(命令行操作接口) Command line User ...
- /bin/bash^M:损坏的解释器: 没有那个文件或目录
由于在Windows下换行是\n\r,在Linux下打开多了\r,所以需要删除.删除命令 :sed -i 's/\r$//' filename -i插入 s替代模式 \r$表示任何以\r结束的字符 整 ...
- session/cookie/token
1.cookie是把登录信息存放在客户端 2.session是把登录信息存放在服务器 3.token是在登录的时候服务器提供一个令牌标识,可以存放在local storage,请求资源时带上token ...
- 转:mysql分页原理和高效率的mysql分页查询语句
(转自:http://www.jb51.net/article/46015.htm) 以前我在mysql中分页都是用的 limit 100000,20这样的方式,我相信你也是吧,但是要提高效率,让分页 ...
- nGrinder TestRunner http post json
s nGrinder学习笔记 — post请求 https://blog.csdn.net/meyoung01/article/details/50435881 import HTTPClient.H ...
- Linux记录-在线扩容8e
1.fdisk -l 2.增加分区 3.3:键入 p,主分区,并键入3(编号): 默认起始扇区和结束扇区即可(键入两次Enter) 键入t,修改分区类型为8e: 键入w,写分区表,然后重启: 卷扩容, ...
- redis的一些修改
redis修改的文件目录:redis.conf 1.bind:127.0.0.1 默认是本地访问,但是redis是支持集群的,改成0.0.0.0 可以使任意服务器访问 2.daemonize:yes ...
- 他山之石--机器学习 step by step
练习使用的数据 diabetes.csv 备用百度网盘地址 输入变量与输出变量均为连续变量的预测问题是回归问题: 输出变量为有限个离散变量的预测问题成为分类问题: 其实回归问题和分类问题的本质一样,都 ...