ES5扩展学习 个人总结

在说es6之前,先说说es5的一些东西,因为我的web是跟着尚硅谷学习的,这个博客完全就是记录我自己学的东西,所以想学web也可去看看尚硅谷的视频。

1.ES5

    (1)严格模式

        使用:如果要使用严格模式,首先要在js全局函数的第一行写上    "use strict";

        作用:首先是规范js的书写,减少代码的怪异行为,其次是为了未来js版本做铺垫。

        语法改变:所有变量必须要用var声明

                        禁止自定义的函数的this指向window

                        创建eval作用域

                        对象中不能有重名的属性

       

<script type="text/javascript">
  "use strict"
  var a = 5;//严格模式,必须用var声明变量

  function  fun() {
      console.log(this);
      console.log(this.a);
  }
  fun();//因为没有对象调用该方法,所以调用的对象为window,但是在严格模式会报错。因为普通函数的this为调用者。

  eval('var i = 233; alert(i)');//eval函数可以计算或者执行一段字符串中的js代码
  alert(i);         // ,但是这样其实是很危险的,所以严格模式下,eval有单独的作用域

  var obj = {
      a:"1",
      a:"2"
  }  //严格模式不可重名,虽然控制台不会报错
</script>

    (2)JSON对象

         json,是一种数据交换语言,比如我前台要用ajax向后台请求数据,后台给前台的就是一段json

         json对象,可以是字符串和数组,没有单纯的json字符串一说。

 '{"name":"12","age":12}'
 '[{"name":1},{"age":"1"}]'

         这两种都是json对象,好像最外边必须是单引号

        json方法:JSON.stringify() //将js对象转换为json对象(数组)

                          JSON.parse() //将json对象转换为(数组)

      (3)Object扩展方法

          es5给Object扩展的两个方法

           1.Object.create(目标方法,扩展)//此方法是用来以一个对象为原型,创建一个新的方法的。

var obj = {
      name:"小明",
      age:15
  }

  var obj2 = Object.create(obj,{
      aihao:{
          value:"打篮球",
          writable:true,
          configurable:true,
          enumerable:true,
      }
  })
  //Objcet.create()的两个参数分别是一个对象,一个描述,第二个参数是可选的。
  //这个方法的返回值将是一个以第一个对象为原型的新的对象,即 obj2.__proto__ == obj
  //而第二个参数则是可以给新对象一个描述,第二个参数其实也是 Object.defineproperties()的第二个参数
  /*{
     aihao:{                      //属性名
      value:"打篮球",              //属性值,即value的值
          writable:true,          //该属性是否可以被修改,默认为false
          configurable:true,      //该属性是否可以被删除,默认为false
          enumerable:true,         //该属性是否可以被枚举(for in),默认为false
      }
    }*/

            2.Object.defineProperties(对象,描述)//直接在一个对象上定义新的属性或修改现有属性,并返回该对象。

            

 var shen = 130
  Object.defineProperties(obj,{    //第二个参数
      shengao:{                    //首先是要扩展的属性名
          get:function () {        //这个get方法,该方法的返回值就是这个属性的值
                                   // ,该方法将在调用到该属性时自动调用
              return shen;
          },
          set:function (data) {     //这是set方法,在设置该属性值的时候,将调用,设置的值,将作为参数data传入该放方法
              shen = data           //再进行设置
          }
      },
  })
  //普通的对象也有这两个方法
  var obj3 =  {
      name:"xiaoming",
      age:15,
      get shengao(){
          return shen
      },
      set shengao(data){
          shen = data
      }
  }

    (4)数组的扩展方法

            数组的扩展方法比较简单

            Array.prototype.indexOf(value)//返回数组中value所在的第一个位置的下标

            Array.prototype.lastIndexOf(value)//返回数组中value所在的最后一个位置的下标

            Array.prototype.forEach(function(item,index){})//遍历数组    item:值         index:下标

            Array.prototype.map(function(item,index){})//加工数组中的每一项值,并且返回一个新数组

            Array.prototype.indexOf(function(item,index){})//遍历数组中的每一个数据,并且返回判断条件为true的值

var arr1 = [1,2,3,4,5,6,5,4,3,2,1];
  console.log(arr1.indexOf(2));
  console.log(arr1.lastIndexOf(2));
  arr1.forEach(function (item,index) {
      console.info(item,index);
  })
  
  var arr = arr1.map(function (item,index) {
     if(item<5){
         return item+"我小于5"
     }else{
         return item
     }
  })
  
  console.log(arr);
  arr = arr1.filter(function (item,index) {
      return item>5
  })
  console.log(arr);

                map与filter的区别在于map总是会返回数据,没有规定返回内容的话,返回的是undefined

    (5)call apply与bind的区别

                首先,call apply bind都是将函数的this绑定为这些方法中的参数 

                用处,bind主要用在回调函数中,因为回调函数不需要立即执行,而用call或者apply的话,就会立即执行,违背了回调函数的本质

                

var obj = {
      name:"a"
  }

  function fun(age) {
      this.age = age;
      console.log(this.name,this.age);
  }
  
  fun.call(obj,"1");//a 1 
  fun.apply(obj,["2"]);//a 2
  var f = fun.bind(obj,"3");
  f();//a 3

                call 与 apply的区别仅仅在于填写参数的方式不同,call(目标对象,方法参数1,方法参数2,,,),apply(目标对象,[方法参数1,方法参数2]),这两个方法绑定完this之后会立即执行调用他们的函数

                而bind绑定完this之后,会把函数返回,而不会执行。bind传入参数的方法和call一样


        


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值