ES5

Es5的新增内容

严格模式

概述:我们平常书写的js代码没有特别多的规范,甚至有时候可以随意发挥,这种情况被称为怪异模式,相对而言有一种更加规范的模式被称为严格模式.

严格模式的声明

使用 use strict进行声明,他的声明必须是在第一行

严格模式的特性

声明一个变量必须要有关键词

函数里面的this无法指向window

函数里面arguments的实参和形参并不同步

进制八进制方法

函数声明必须在对应的位置进行声明

//怪异模式

// var a = 10

// b = 20

// console.log(a);

// console.log(b);

//严格模式

"use strict"; //声明必须在第一行

//声明一个变量必须要有关键词

c = 30

console.log(c);//c没有被定义

//严格模式中函数内的this不能指向window

function fn(){

console.log(this);

}

fn()// this 是 undefined

//在严格模式中不能使用八进制相关的方法

//严格模式中argument的形参和实参不同步

//严格模式中函数只能在对应的声明函数地方进行声明

数组新增的高阶函数

高阶函数概述:

以函数作为参数的函数叫做高阶函数

新增的高阶函数

遍历的函数

forEach(没有返回值)

//高阶函数

var arr = ['a','b','c']

//forEach

//传入的函数里面的三个参数分别是 第一个值 第二个下标 第三个遍历的数组

//forEach没有返回值 js函数里面参数如果不需要可以不传

arr.forEach(function(v,i,arr){

// console.log(v); //里面值

// console.log(i); //下标

console.log(arr); //遍历的数组

})

//省略对应参数

arr.forEach(function(v){

console.log(v);

})

map (有返回值,返回值是个数组)

//map

//map跟forEach使用是一样的 但map有返回值 返回一个数组

var mapArr = arr.map(function(v,i,arr){

console.log(v);

})

console.log(mapArr);//[undefined,undefined,undefined]

var mapArr = arr.map(function(v,i,arr){

console.log(v);

return v+i+'你好'

})

console.log(mapArr);

过滤和计算的

fliter (返回一个数组)

var arr = ['abc','a','bc']

//filter 过滤 传入对应的函数 通过函数来返回条件进行过滤 返回的值为数组

//第一个为值 第二位下标 第三为当前遍历的数组

var filterArr = arr.filter(function(v,i,arr){

//里面包含a返回true 里面没有a返回false

//如果返回值是false 就不会加入到对应的数组 如果返回值为true就会加到对应的数组

return /a/.test(v)

})

console.log(filterArr);//包含a的一个数组 ['abc','a']

var arr = [10,9,8,23,15]

//返回所有大于10的

var filterArr = arr.filter(function(v){

return v>10

})

console.log(filterArr);//[23,15]

var arr = [10,9,8,23,15]

reduce (从前到后 返回一个值)

reduceRight (从后往前 返回一个值)

//reduce 计算的 计算所有的和

//prev表示前面的总和 第一次prev值为10 第二次为19 current默认从第二个开始

var sum = arr.reduce(function(prev,current,i,arr){

console.log(prev);

console.log(current);

console.log(i);//1

return prev+current

})

console.log(sum);

//调整到第1个开始 current的下标为0

arr.reduce(function(prev,current,i,arr){

console.log(i);//0

console.log(prev);//0

},0)

//求乘积

var v = arr.reduce(function(prev,current){

return prev * current

})

console.log(v);

//reduceRight 从右边开始 从后到前 prev值就是倒数第一个 i从倒数第二个开始

arr.reduceRight(function(prev,current,i,arr){

console.log(i);

})

判断是否存在

some(只要有一个就返回true)

// 查询的相关 条件在于传入的函数的返回的值

var arr = [0,1,2,3]

//根据里面返回的内容来进行判断的 里面只要有true返回 他就是true

var is = arr.some(function(v,i,arr){

return v>2

})

console.log(is)

every(所有条件满足就返回true,不然返回false)

//every 每一个都要满足条件

var is = arr.every(function(v,i,arr){

return v>=0

})

console.log(is);

注意事项

forEach和map的区别(forEach没有返回值 map有返回值)

reduce是用于计算的 reduce传入的函数有四个参数(前面的和(默认为第一个) 当前的值(默认

是第二个开始) 当前的下标(默认从1开始) 当前遍历的数组)如果需要调整在后面进行传参。

some和every的区别 (some只要有一个满足条件就返回true every要每个都满足条件才返回

true)

改变this指向新增方法

this指向

this在函数内的this指向当前函数的调用的者(全局调用的函数this指向window)

this在对应的对象内的函数指向当前的对象的

this在事件对应的函数内指向当前事件的目标元素

如果需要更改this指向那么我们可以给对应的函数调用对应的方法

相关方法

bind (手动调用)

apply (自动调用 传递一个数组)(* 如果传递的是数组)

call (自动调用 一个个的数据传递)(* 一般常用)

function fn(arg,arg1){

console.log(this);

console.log(arg,arg1);

}

fn() //打印window

var obj = {name:'jack'}

//调用bind方法来更改this指向

//将对应的函数绑定给obj这个对象 bind不会执行函数

//函数调用的bind方法返回的是一个函数 这个函数不会自动调用 需要你手动调用

var v = fn.bind(obj)

//执行函数

v()

//bind方法运用 需要手动调用需要()来调用 传参传入到对应的()里面

fn.bind(obj)('你好','世界')

//apply 自动调用 第一个参数是绑定的对象 第二个参数是传递的参数(以数组进行传递)

fn.apply(obj,['hello','world'])

//call 自动调用 第一个参数是绑定的对象 第二个参数是传递的参数 (以一个个的元素进行传递)

fn.call(obj,'吃饭了吗','睡觉了吗')

apply方法和call方法的区别

apply方法传递的参数以数组形式

call方法传递的参数以元素形式

共同点

apply方法和call方法都会自动调用对应的函数

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 编程语言和我们平时使用软件一样,也会随着使用的人群增多,添加一些新的功能。 js语言也有很多版本。我们平常所使用的...
    新生勿扰阅读 632评论 0 0
  • ECMAScript理解 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 而我们学的...
    咻咻咻滴赵大妞阅读 4,582评论 0 3
  • ES5 严格模式 1. 理解: * 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:"严格模式"(str...
    BJ000阅读 787评论 0 1
  • ES5 1、严格模式 *理解 1、除了正常运行的模式(混杂模式),es5添...
    Shy啊阅读 2,451评论 0 1
  • ECMAScript理解 它是一种由ECMA组织(前身为欧洲计算机制造商协会)制定和发布的脚本语言规范 而我们学的...
    我本无常阅读 451评论 0 0