1. ES5严格模式
1.1 严格模式的引入
严格模式是从 ES5 进入标准的,主要目的有以下几个:
明确禁止一些不合理、不严谨的语法,减少 JavaScript 语言的一些怪异行为;
增加更多报错的场合,消除代码运行的一些不安全之处,保证代码运行的安全;
提高编译器效率,增加运行速度。 为未来新版本的 JavaScript 语法做好铺垫。
总之,严格模式体现了 JavaScript 更合理、更安全、更严谨的发展方向。
进入严格模式的标志,是一行字符串use strict。
“use strict”;
严格模式的好处:规避了js语法当中的一些不合理,不严谨之处,提高了js引擎的编译效率,为后续版本做铺垫
注:严格模式可以用于整个脚本,也可以只用于单个函数。
1.2 严格模式
1. 变量声明 (必须要使用var)
正常模式中,如果一个变量没有声明就赋值,默认是全局变量。严格模式禁止这种用法,严格模式下,变量都必须先声明,然后再使用。
2.禁止使用with
3.设立eval作用域
eval()会把参数当成js代码解析
4.函数中的this指向问题
正常模式下,函数内部的this可能会指向全局对象(window),严格模式禁止这种用法,避免无意间创造全局变量。
(在普通模式下,this谁调用指向谁)
5.删除变量
正常模式下,删除一个对象的属性 delete ;在严格模式下,不能通过delete来删除var定义的变量。
6.函数参数不能重名
7.八进制字面量表示法
禁止八进制的前缀0表示法:正常模式下,整数的第一位如果是0,表示这是八进制数,比如0100等于十进制的64。严格模式禁止这种表示法,整数第一位为0,将报错。
.8.arguments不追踪参数变化
2. ES5新增数组方法
1. indexOf
indexOf方法返回给定元素在数组中第一次出现的位置,如果没有出现则返回-1。
2. forEach
forEach方法与map方法很相似,也是对数组的所有成员依次执行参数函数。但是,forEach方法不返回值,只用来操作数据。这就是说,如果数组遍历的目的是为了得到返回值,那么使用map方法,否则使用forEach方法。 forEach的用法与map方法一致,参数是一个函数,该函数同样接受三个参数:当前值、当前位置、整个数组。
注意,forEach方法无法中断执行,总是会将所有成员遍历完。如果希望符合某种条件时,就中断遍历,要使用for循环。
3. map
将数组的所有成员依次传入参数函数,然后把每一次的执行结果组成一个新数组返回。
map方法接受一个函数作为参数。该函数调用时,map方法向它传入三个参数:当前成员、当前位置和数组本身。
4. filter
filter方法用于过滤数组成员,满足条件的成员组成一个新数组返回。 它的参数是一个函数,所有数组成员依次执行该函数,返回结果为true的成员组成一个新数组返回。该方法不会改变原数组。
filter方法的参数函数可以接受三个参数:当前成员,当前位置和整个数组。
5. some
6. every
some(),every() 这两个方法返回一个布尔值,表示判断数组成员是否符合某种条件。 它们接受一个函数作为参数,所有数组成员依次执行该函数。该函数接受三个参数:当前成员、当前位置和整个数组,然后返回一个布尔值。
some方法是只要一个成员的返回值是true,则整个some方法的返回值就是true,否则返回false。
every方法是所有成员的返回值都是true,整个every方法才返回true,否则返回false。
7. reduce(对数组中的所有元素调用指定的回调函数。该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供。)
3. String
3.1 字符串的创建方式
var s1 = 'abc';
var s2 = new String('abc');
typeof s1 // "string" typeof s2 // "object"
上面代码中,变量s1是字符串,s2是对象。
3.2 字符串的常见方法
1. charAt
charAt方法返回指定位置的字符,参数是从0开始编号的位置。
2. indexOf
indexOf方法用于确定一个字符串在另一个字符串中第一次出现的位置,返回结果是匹配开始的位置。如果返回-1,就表示不匹配。
3. substring
substring方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice方法很相像。
它的第一个参数表示子字符串的开始位置,第二个位置表示结束位置(返回结果不含该位置)。
'JavaScript'.substring(0, 4) // "Java"
如果省略第二个参数,则表示子字符串一直到原字符串的结束。
'JavaScript'.substring(4) // "Script"
如果第二个参数大于第一个参数,substring方法会自动更换两个参数的位置。
4. slice
slice方法用于从原字符串取出子字符串并返回,不改变原字符串。
它的第一个参数是子字符串的开始位置,第二个参数是子字符串的结束位置(不含该位置)。
'JavaScript'.slice(0, 4) // "Java"
如果省略第二个参数,则表示子字符串一直到原字符串结束。
'JavaScript'.slice(4) // "Script"
如果参数是负值,表示从结尾开始倒数计算的位置,即该负值加上字符串长度。
'JavaScript'.slice(-6) // "Script"
'JavaScript'.slice(0, -6) // "Java"
'JavaScript'.slice(-2, -1) // "p"
如果第一个参数大于第二个参数,slice方法返回一个空字符串。
5. substr
substr方法用于从原字符串取出子字符串并返回,不改变原字符串,跟slice和substring方法的作用相同。
substr方法的第一个参数是子字符串的开始位置(从0开始计算),第二个参数是子字符串的长度。
'JavaScript'.substr(4, 6) // "Script"
如果省略第二个参数,则表示子字符串一直到原字符串的结束。
'JavaScript'.substr(4) // "Script"
如果第一个参数是负数,表示倒数计算的字符位置。如果第二个参数是负数,将被自动转为0,因此会返回空字符串
6. split
split方法按照给定规则分割字符串,返回一个由分割出来的子字符串组成的数组。
7. replace
replace方法用于替换匹配的子字符串,一般情况下只替换第一个匹配(除非使用带有g修饰符的正则表达式)。