严格模式:
严格模式的好处:规避了代码中的一些不严谨,不规范的用法,提高了编译器执行效率,为后续版本做铺垫
在当前环境的顶部(全局环境,局部环境)
加上两个单词 “use strict”
-
变量声明
/* a = 10; //报错 必须有声明的关键字 var let console.log(a); */
-
禁止使用with
/* var person = { name: "huangenpeng", age: 20, }; //console.log(person.name, person.age); with (person) { //报错 不让with console.log(name, age); } */
-
设立eval作用域
/* eval("var a = 10;console.log(a)"); console.log(a); //a 是访问不到 */
-
函数this问题
/* function foo() { console.log(this); //undefined } foo(); //确实不知道是谁调用foo window.foo(); // window */
-
删除变量
/* var a = 10; delete a; console.log(a); //不能使用delete删除一个变量 */ //b = 20; //报错 /* delete b; console.log(b); */
-
函数参数不能重名
//function foo(x, x) {}
-
八进制表示法
//var num = 017; //报错 0o17
-
arguments不追踪参数变化
function foo(x) { x = 1; console.log(arguments[0]); } foo(10);
### 普通模式下
this的基本指向 三个环境下this的用法
//普通函数里this的指向 this指向window
/* function foo() {
console.log(this); //window
}
foo(); //window.foo()
console.log(window); */
//在一个对象的方法里 this指向obj
/* var obj = {
name: "linbinkuan",
age: 20,
sayHello: function () {
console.log(this); //obj
console.log("大家好,我是" + obj.name);
console.log("大家好,我是" + this.name);
},
};
obj.sayHello(); */
//在事件的处理函数里 this指向事件名前面那个DOM对象
/* btn.onclick = function () {
console.log(this); //btn
}; */
//在普通模式下,谁调用这个函数或者方法,this就指向谁
es5新增的数组方法
indexOf 返回某个元素在数组中索引,没有该元素,返回-1
var arr = [10, 20, 20, 30, 40];
/* var index1 = arr.indexOf(20);//1
var index2 = arr.lastIndexOf(20);//2
console.log(index1, index2); */
forEach 遍历
/* var arr = [10, 20, 20, 30, 40];
var a = arr.forEach(function (item, index) {
return item * 1.3; //不接收
});
console.log(a); */
map 遍历
/* var a = arr.map(function (item, index) {
return item * 1.03; //接收返回值
});
console.log(a); */
filter 过滤出符合条件的元素
/* var a = arr.filter(function (item) {
return item > 20; //过滤出大于20的元素
});
console.log(a); */
some 只要有一个元素满足条件 返回true every 所有的元素满足条件 返回true
/* var a = arr.some(function (item) {
return item > 20;
});
console.log(a); */
/* var a = arr.every(function (item) {
return item > 20;
});
console.log(a); */
reduce 累计 通常会用前两个参数 第一个参数默认是数组中第一个元素,第二个参数默认是数组中第2个元素,这两个参数在函数内部运算之后,会将结果再给到第一个形参,此时第二个形参取的是数组中的第三个元素
/* var arr = [1, 2, 3, 4, 5];
var result = arr.reduce(function (a, b) {
return a + b;
});
console.log(result); */
var arr = [
[1, 2],
[3, 4],
[5, 6],
]; //数组的扁平化 [1,2,3,4,5,6]
var a = arr.reduce(function (a, b) {
return a.concat(b);
});
console.log(a);
字符串
//字符串:有成对的双引号或者单引号引起来的一段字符,可以为空
/* var str = "123";
var str1 = '123';
var str2 = new String("abc"); */
//基本操作
var str = "123abc";
//取值 默认只能取值,不能修改,如果要修改,需要借助字符串提供一些方法
console.log(str[3]); //"a"
console.log(str.length); //字符的个数
字符串里的常见方法
/var str = "abcd";
//以下方法对源字符串没有影响
//charAt() 取到指定索引位上的字符
//var s = str.charAt(1);
//console.log(s);
//indexOf()取到某个字符在字符串中的索引 没有 -1
//var index = str.indexOf("c");
//console.log(index);
//1.命名的方法 驼峰
//2.系统提供的名字,他怎么写,你就怎么记
//语法 最不应该纠结 规定
//截取 substring slice substr
//var s = str.substring(1, 2); //第一个参数起始位,第二个结束位(不包含)
//var s = str.substring(2, 1);
//var s1 = str.slice(1, 2);
//var s1 = str.slice(2, 1); //空
//var s2 = str.substr(1, 2); //第一个参数起始位,第二个截取的字符个数
//console.log(s, s1, s2);
//split 将字符串按照指定分隔符(参数)分割成数组
//var a = str.split("");
//var a = str.split("b");
//console.log(a);
//replace()替换
/* var str1 = "abctmdabc"; //不适合正常展示
var s = str1.replace("tmd", "***");
console.log(s); */
//var str1 = "abctmdabctmd"; //不适合正常展示
//可以通过循环
//var s = str1.replace("tmd", "***");
//var s = str1.replace(/tmd/g, "***");
//console.log(s);
//concat 合并
//var str = "abcd";
//var s = str.concat("e");
//console.log(s);
//trim 去掉首尾空格
/* var str = " abc ";
var s = str.trim();
console.log(str.length, s, s.length); */
//toUpperCase() toLowerCase()
var str = "aBc";
console.log(str.toUpperCase());
console.log(str.toLocaleLowerCase());
ASCII
//charCodeAt(i) 得到某个位置上字符的ASCII码值
//var str = "aAc12d";
//console.log(str.charCodeAt(1), str.charCodeAt(4));
//fromCharCode(码值)
//console.log(String.fromCharCode(65));