ES5新增内容

ES5的严格模式:

"use strict"

所谓严格模式,从字面上就很好理解,即更严格的模式 在这种模式下执行,浏览器会对JS的要求更苛刻,语法格式要求更细致,更符合逻辑。

怪异模式:就是我们之前一直使用的开发模式,就叫怪异模式。因为很多时候出来的结果是非常怪异的,所以才称之为怪异模式。

全局严格模式

"use strict";

n = 10;

console.log(n);

局部严格模式

function fn(){

"use strict";

n = 10

console.log(n);

}

设立严格模式的目的

1.消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为;

2.代码运行的一些不安全之处,保证代码运行的安全;

3.提高编译器效率,增加运行速度;

严格模式的特点:

1. 不可以省略var let const声明变量

不用关键字声明变量会报错

2. 禁止函数使用this关键字指向全局变量

严格模式下this指向undefined

3. 禁止使用八进制方法

8进制的数以0开头 ,使用会报错

4. 不允许在非函数的代码块内声明函数

大括号内不能再声明函数了 除非最外层的大括号也是一个函数

5. 严格模式下,arguments变量,形参是不会变(不同步)

怪异模式下可以直接修改形参 并且arguments数组是同步的

严格模式下能修改形参,但是arguments数组不会同步,不会报错,但是不会生效

delete变量报错

在严格模式下,如果对一个变量的直接引用、函数的参数或者函数名使用delete操作,将会抛出语法错误(SyntaxError)。因此,为避免严格模式下的语法错误,必须以delete object.property或delete object[‘property’]的形式使用delete运算符。

如果你试图删除的属性不存在,那么delete将不会起任何作用,但仍会返回true任何使用 var 声明的属性不能从全局作用域或函数的作用域中删除。

这样的话,delete操作不能删除任何在全局作用域中的函数(无论这个函数是来自于函数声明或函数表达式)

除了在全局作用域中的函数不能被删除,在对象(object)中的函数是能够用delete操作删除的。

任何用let或const声明的属性不能够从它被声明的作用域中删除。

不可设置的(Non-configurable)属性不能被移除。这意味着像Math, Array, Object内置对象的属性以及使用Object.defineProperty()方法设置为不可设置的属性不能被删除。

this的指向

1.在函数内部,this默认指向window

2.在严格模式下,函数内部的this指向undefined

3.在事件里,this默认指向当前事件的绑定对象

4.箭头函数内部的this,指向上下文对象(环境变量)

5.new操作符,改变this指向

6.定时器,延时器的函数里,this默认指向window

7.对象的方法中的this,默认指向该对象

8.bind函数,改变this的指向,但是bind不会立即执行,所以要加小括号

在定时器延时器的函数后面直接加.bind(obj)

给bind传的参数会直接传进被调用的函数且优先级更高

用call()和apply()调用函数也可以改变this的指向 会立即执行

ES5数组扩展

some()、every()、map()、forEach()、filter()、reduce()

some()

只要有一个元素满足条件就返回true,否则返回false

every()

所有元素都满足条件就返回true,否则返回false

forEach()

它只负责遍历, break和return 不能中断foreach的循环

想要中断可以强制抛出异常,结合try....catch

map()

能做遍历,还能返回结果,结果是一个新数组

需要在函数内部return结果

filter()

过滤出数组中你想要的元素, 不改变原数组

reduce()

参数:第一个为函数

        函数:4个形参

1.pre 初始值,也可以是上一次执行的结果

                如果有初始值 一开始pre是初始值

                如果函数没有返回结果 第二次循环pre是undefined;

                如果有返回值 第二次pre为上一次执行的结果

                如果没有初始值 一开始pre是数组的第一个元素

                cur为数组的第二个元素

2.cur 当前的元素

3.index 下标

4.arr 原来的数组

第二个为p初始值

forEach、map以及reduce的相同点:

都是用于处理数组

都不兼容IE8及以下

forEach、map以及reduce的不同点:

forEach 方法是将数组中的每一个值取出做一些程序员想让他们做的事情

map 方法是将数组中的每一个值放入一个方法中做一些程序员想让他们做的事情后可以返回一个新的数组

reduce()

方法 将数组中的每一个值与前面的值处理后得到的最终值

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值