发表于: 2020-08-14 23:33:21
0 2171
今日完成:
对一个数组 filter、some、map、foreach的操作分别有什么作用?
使用JavaScript数组常常需要对数组进行遍历、迭代操作。而我们常用的就是for语句对数组进行迭代。
然而在ECMAscript5(ES 5)已经为数组定义了5个迭代的方法,分别是:filter、some、map、forEach、every
具体作用:
filter() :检测数值元素,并返回符合条件所有元素的数组。
具体用法如:返回数组 ages 中所有元素都大于 18 的元素
var ages = [32, 33, 16, 40];
function checkAdult(age) {
return age >= 18;
}
function myFunction() {
document.getElementById("demo").innerHTML = ages.filter(checkAdult);
}
some():方法用于检测数组中的元素是否满足指定条件(函数提供)
具体用法如:检测数组中是否有元素大于 18,有返回ture没有返回false(类似判断的或,有一个满足即返回ture)
every(): 方法用于检测数组所有元素是否都符合指定条件(通过函数提供)。
every() 方法使用指定函数检测数组中的所有元素:
如果数组中检测到有一个元素不满足,则整个表达式返回 false ,且剩余的元素不会再进行检测。
如果所有元素都满足条件,则返回 true。(类似判断 且)
map(): 方法返回一个新数组,数组中的元素为原始数组元素调用函数处理后的值
具体用法如:返回一个数组,数组中元素为原始数组的平方根
注意:
1.filter() ,some(),map(),every()不会对空数组进行检测。
2.filter(),some(),map(),every() 不会改变原始数组
forEach(): 方法用于调用数组的每个元素,并将元素传递给回调函数。
具体用法如:列出数组的每个元素/计算数组所有元素相加的总和
注意: forEach() 对于空数组是不会执行回调函数的。
总结:
用法:声明一格数组,声明函数,函数中是用到的条件,根据实际情况,选择方法,
即:条件怎样作用数组的每个元素上
扩展:迭代和遍历、循环、递归有什么区别?
循环(loop),指的是在满足条件的情况下,重复执行同一段代码。比如,while语句。
循环能对应集合,列表,数组等,也能对执行代码进行操作。
迭代(iterate),指的是按照某种顺序逐个访问列表中的每一项。比如,for语句。
迭代只能对应集合,列表,数组等。不能对执行代码进行迭代。
遍历(traversal),指的是按照一定的规则访问树形结构中的每个节点,而且每个节点都只访问一次。
遍历同迭代一样,也不能对执行代码进行遍历。
递归(recursion),指的是一个函数不断调用自身的行为。比如,以编程方式输出著名的斐波纳契数列。
参考:
简述js中的this指向
面向对象语言中 this 表示当前对象的一个引用。
但在 JavaScript 中 this 不是固定不变的,它会随着执行环境的改变而改变。
1.在方法中,this 表示该方法所属的对象。
2.如果单独使用,this 表示全局对象。
3.在函数中,this 表示全局对象。
4.在函数中,在严格模式下,this 是未定义的(undefined)。
即:严格模式下函数是没有绑定到 this 上,这时候 this 是 undefined。
5.在事件中,this 表示接收事件的元素。
即:在 HTML 事件句柄中,this 指向了接收事件的 HTML 元素
6.类似 call() 和 apply() 方法可以将 this 引用到任何对象。
即:apply 和 call 允许切换函数执行的上下文环境(context),即 this 绑定的对象,可以将 this 引用到任何对象
参考:
如何取消冒泡和默认事件?
防止冒泡和捕获:
w3c的方法是e.stopPropagation(),IE则是使用e.cancelBubble = true
1.
e.stopPropagation();
stopPropagation() 方法定义是:不再派发事件。所以直接调用的event 即可
stopPropagation也是事件对象(Event)的一个方法,作用是阻止目标元素的冒泡事件,但是会不阻止默认行为。
2.
window.event.cancelBubble = true;
这里的cancelBubble是 IE事件对象的属性定义:是否取消冒泡,设为true就可以了
扩展:什么是冒泡事件?
如在一个按钮是绑定一个”click”事件,那么”click”事件会依次在它的父级元素中被触发 。stopPropagation就是阻止目标元素的事件冒泡到父级元素
取消默认事件:
w3c的方法是e.preventDefault(),IE则是使用e.returnValue = false;·
参考:
var,let,const有什么区别?
ES6 中新增了块级作用域。块作用域由 { } 包括,if语句和 for语句里面的{ }也属于块作用域。
1. var定义的变量,没有块的概念,可以跨块访问, 不能跨函数访问。
2. let定义的变量,声明形成块级作用域,只能在块作用域里访问,不能跨块访问,也不能跨函数访问。
3. const用来定义常量,声明形成块级作用域,使用时必须初始化(即必须赋值),能使用null占位,只能在块作用域里访问,而且声明后不能修改。
如果声明的是复合类型数据,可以修改其属性
扩展:块级作用域的作用:
var声明的变量会挂载在window上,而let和const声明的变量不会
即:
使用 var 关键字声明的变量不具备块级作用域的特性,它在 {} 外依然能被访问到
let 声明的变量只在 let 命令所在的代码块 {} 内有效,在 {} 之外不能访问
使用 var 关键字重新声明变量可能会带来问题。
在块中重新声明变量也会重新声明块外的变量
扩展:什么是变量提升?
变量提升
JavaScript var 关键字定义的变量可以在使用后声明,也就是变量可以先使用再声明
注意:
1.dom类绑定,之后,默认同名类是数组,哪怕仅仅只有一个,调用也要加[0],标签同理
2.一串字母或数字,默认是一个单独的字符串,即当容器宽度小于字符串长度时,字符串不会换行,而是冲破容器
3.语句标识符是保留关键字不能作为变量名使用(如:break,for,return等)
4.一定要把需要运行的代码放到retuen返回值的上面,放下面就会失效
5.因为本地储存只能传递字符串,所以在传递数据之前
先用JSON.stringify() 方法处理数据,将其转换为字符串
之后在接收数据之后,用JSON.parse()方法处理数据,再将其转换为 Date 对象
评论