ES5..

一.ES5

在2009年推出的新的语法

1).严格模式

使用use strict,它又分为全局严格和局部严格

这句话必须放在代码的第一行

1).全局严格
  		// "use strict";//全局严格模式
        function fn1() {
    
            console.log(this); //undefined
        }
        fn1()

        function fn2() {
            console.log(this); //undefined
        }
        fn2()
2).局部严格
 		function fn1() {
            "use strict"; //局部严格模式
            console.log(this); //undefined
        }
        fn1()

        function fn2() {
            console.log(this); //window
        }
        fn2()

2.严格模式的注意事项

1). 使用变量必须使用 ‘关键字’ (var let const)

2). 禁止函数内的this指向全局对象 window

3). 禁止使用8进制, (不要写0开头的数字)

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

5). arguments与形参不同步 (不一致)

6). eval函数作用域

7). delete 删除window的属性报错

1). 声明变量使用关键字(var let const)
        "use strict";
        myname = "刘德华";  //ReferenceError: myname is not defined
        console.log(myname);

2).禁止函数内的this指向全局对象 window
  "use strict";   
   function fn() {
            console.log(this); //undefined
   }
  fn()
3).禁止使用8进制, (不要写0开头的数字)
"use strict";
 var a=099;
console.log(a);
//Uncaught SyntaxError: Decimals with leading zeros are not allowed in strict mode.
4).不允许在非函数的代码块内声明函数
  "use strict";
        if (true) {
            function fn() {
                alert(123);
            }
        }

  fn(); //Uncaught ReferenceError: fn is not defined
5.arguments与形参不同步 (不一致)
        "use strict";
        function fn(n) {
            console.log(n);//100
            n = 200;
            console.log(arguments); // 100  依然是100
            console.log(n);//200 
        }
6. eval函数作用域

eval()函数的作用,是把字符串解析成js代码

利用它实现 转json

		var n = 10;
        eval(' "use strict"; var n=20; console.log(n);');//20
        console.log(n);//10
7).delete 变量 报错
      "use strict";
        var a = 100;
        console.log(window.a);
        delete window.a; //Uncaught TypeError: Cannot delete property 'a' of #<Window>
        console.log(window.a); //没有被删除,还会报错

3.严格模式的好处

消除了代码一些不合理的地方

保证了代码的安全

提高了代码运行速度

二 ES5 bind 和call,apply

bind 是用于改变函数内部this的指向,它不会立即执行函数

call 是用于改变函数内部this的指向,它会立即执行当前函数,它有多个参数 (推荐使用,具体效率高于apply)

apply 是用于改变函数内部this的指向,它会立即执行当前函数,第2个参数是数组

1).bind 的语法

只改变函数内部this的指向,不会执行该函数

        function fn(a,b) {
            console.log(this);//window
            console.log(this.name);
            console.log(a,b);// 
        }
        fn.bind(person,"你好")("大家好");
2).call 的语法

有多个参数,会自动执行函数

    function fn(a,b) {
            console.log(this);//window
            console.log(this.name);
            console.log(a,b);// 
   }
  fn.call(person,"你好call","2222")
3).apply的语法

第2个参数是一个数组,会自动执行函数

    function fn(a,b) {
            console.log(this);//window
            console.log(this.name);
            console.log(a,b);// 
    }
   fn.apply(person,["你好apply","2222"])

4.与this相关的场景有哪些? (重点)

1.函数内部的this,默认是window

2.事件绑定函数,内部的this,默认是事件的绑定者

3.对象内部函数里头的this,指向当前的对象

4.定时器,延时器里的this,默认始终是window

5.bind,call,apply会改变this的 指向

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

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

8.new 会改变构造函数内部this的指向

三.ES5数组的高阶函数

  1. forEach 只能做遍历,不会被中断,可以异常结合try..catch..finally重点

  2. Map 能做遍历,返回的是一个数组

  3. some 只要有一个条件满足,就返回true,默认返回false

  4. every所有的提交满足,才返回true,否则返回false

  5. filter 返回条件满足的成员是 一个数组

  6. reduce 一个参数是一个函数,函数内部有 pre,cur,index,arr 根据函数内部的retrun返回指定结果

    ​ 二个参数,第2个参数是pre的初始值

四.ES6

ES6又称之为 EcmaScript 2015 ,因为是2015发布

1).let块级作用域

  • 相同的变量名称,只能被声明一次
let myname="刘德华";
let myname="周杰伦"; //相同的变量名称,只能被声明一次
// Uncaught SyntaxError: Identifier 'myname' has already been declared 
  • 如果在代码块内声明的变量,只能在代码块内使用
{
    let myname = "刘德华";
}
 console.log(myname);//Uncaught ReferenceError: myname is not defined
  • 防止变量的提升(预编译)
  function fn() {
      console.log(myname) //Cannot access 'myname' before initialization
      let myname = "蔡徐坤";
      console.log(myname);
 }
  fn();
  • 使用let解决下标问题
  var oBtns = document.querySelectorAll("button");// 5 
        for (let i = 0; i < oBtns.length; i++) {
            oBtns[i].onclick = function () {
                console.log(i); //下标解决了
            }
   }

2).const 常量,

  • 如果声明的变量的值是值类型,不可以被修改

  • 如果声明的变量的值是引用类,可以修改值,不能修改类型

值类型

  const COOLMAN="老罗";
   COOLMAN="谭扬帆";
   console.log(COOLMAN);
   //Uncaught TypeError: Assignment to constant variable.

引用类型

   const COOLMAN = {
            name: "谭扬帆",
            sex: "男",
            age: 18
        }
   COOLMAN.name="老罗"
   console.log(COOLMAN);//老罗  类型没有被修改,对象的属性或者方法可以被修改

const 与let的相同点

可以避免变量的提升

也具备块级作用域

同一个变量只能声明一次

2.ES6-String新增方法

2.1 字符串的方法

  • includes():返回布尔值,表示是否找到了参数字符串。
        var str = "abc123";
        //indexOf
        console.log(str.indexOf("c") != -1);  //true
        console.log(str.includes("c"));       //true
  • startsWith():返回布尔值,表示参数字符串是否在源字符串的头部。
        var str = "abc123";
        console.log(str.startsWith("a"));//true
  • endsWith():返回布尔值,表示参数字符串是否在源字符串的尾部。
	    var str = "abc123";
 		console.log(str.endsWith("3"));
  • repeat(): 返回一个新字符串,表示将原字符串重复n次.
        var str = "我爱你!";
        console.log(str.repeat(100)); // 100次

2.2 字符串模板

       var chars="不"
       var str=`今天天气很${chars}好!`; 
       console.log(str);// 今天天气很不好!

3.ES6-Array新增

3.1 Array.from() 把伪数组,转换成真数组

第一个参数,伪数组

第二个参数,是一个回调函数,该回调函数内部写 逻辑并且返回内容

var arg = {
            0: 100,
            1: 200,
            2: 300,
            "a": 99,
            length: 3
 }
 var arr = Array.from(arg,function (item) {
          console.log(item);
        return item*100;
  });
console.log(arr);  // [10000,20000,30000]

3.2 Array.of()把一组值转换成数组

   var arr = Array.of(1, 3, 5, 7, 9);

     console.log(arr);

3.3 find 根据条件,返回值

var oList = [
            { id: 1, name: "刘德华", age: 20 },
            { id: 2, name: "周杰伦", age: 18 },
            { id: 3, name: "蔡徐坤", age: 29 },
            { id: 4, name: "吴彦祖", age: 33 },
        ]
        var strName = "杰"
        var person = oList.find(function (item) {
            return item.name.includes(strName)
        })
        console.log(person);

3.4 findIndex 根据条件,返回值的下标

        //删除 带 '杰' 那个人的信息
        // splice(index,1);
        var oList = [
            { id: 1, name: "刘德华", age: 20 },
            { id: 2, name: "周杰伦", age: 18 },
            { id: 3, name: "蔡徐坤", age: 29 },
            { id: 4, name: "吴彦祖", age: 33 },
        ]
        var strName = "杰"
        var index = oList.findIndex(function (item) {
            return item.name.includes(strName)
        })
        oList.splice(index, 1);
        console.log(oList);

4. ES6-Function新增

4.1 函数的默认参数

    function sayHello2(name='qianfeng'){
          document.write(`Hello ${name}`);  //注意引号
    }

4.2 箭头函数(重点)

箭头函数,又叫做 拉姆达表达式 Lambda,是函数的语法糖,箭头函数一定是一个匿名函数

1.1计算2个数的和 普通函数
  		function calc(a, b) {
            return a + b;
        }
        var res = calc(10, 20);
        console.log(res);
1.2计算2个数的和 箭头函数
  	  var calc = (a, b) => {
            return a + b;
        }
        var res = calc(10, 20);
        console.log(res);
2.1将一个数放大10被的普通函数
    	function show(n) {
            return n * 10
   		  }
2.2将一个数放大10被的箭头函数
     var show = n => n * 10;
3.1返回一个对象的普通函数
  function set(name) {
            var obj = {};
            obj.name = name;
            return obj
   }
3.2返回一个对象的普通的升级写法
    function set(name) {
            return { name };
    }
3.3返回一个对象的箭头函数
var set = name => ({ name });
 console.log(set("abc"));
4.箭头函数常见写法
 		var arr = [11, 22, 33, 44];
        //升序
        arr.sort((a, b) => a - b);
        //降序
        arr.sort((a, b) => b - a);
        // 每个数放大10被
        arr.map(item => item * 10);
        ...

5.箭头函数的this指向(重点)

箭头函数内部的this,默认是根据函数所在的运行函数(上下文对象 context ),在window下,this指向window.

在定时器和延时里,默认也是window,

在事件里,默认也是window

        var Person = {
            name: "刘德华",
            showA: function () {
                // console.log(this);//Person ,对象里的普通方法的this,指向当前对象
                var fn = () => {
                    console.log(this);//Person 箭头函数的this,指向上下文对象(环境对象)
                }
                fn()
            },
            showB: () => {
                // console.log(this);// window ,对象里的箭头函数的this,默认是window

                var fn = () => {
                    console.log(this);//window 箭头函数的this,指向上下文对象(环境对象)
                }
                fn()
            }
        }

        Person.showA();
        Person.showB()
        Person.showB.bind(Person)();// 箭头函数内部的this指向,不会被bind,call和apply改变

注意:

1.箭头函数内部的this指向,不会被bind,call和apply改变

2.箭头函数,不能被new实例化

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值