ES5核心语法升级 -> 操作简化

138 阅读3分钟

ES5:提供了一些新的API

1、保护对象:保护对象的属性和方法

1、四大特性可以保护对象:

   1、对象的每一个属性都要4大特性,3个开关默认为true
	{
		value: 1001,//保存实际值的地方
		writable: true,//开关:控制属性是否可以被修改 
		enumerable: true,//开关:控制属性是否可以被for in循环遍历
		configurable: false//开关:控制属性是否可以被删除,总开关,一旦设置为false就不会允许修改其他特性,它本身一旦改为false不可逆
	}

	
   2、修改对象的某个属性的四大特性:
	Object.defineProperties(obj,{
		"属性名":{四大特性},
		...
	})

2、三个级别:

   1、防扩展:防添加
	Object.preventExtensions(obj);

   2、密封:防添加防删除
	Object.seal(obj)

   3、冻结:防添加防删除防修改
	Object.freeze(obj);

个人不推荐:

	1、如果以后你使用面向过程开发,保护个毛啊
	2、前辈们都没有保护,你保护个毛啊

2、*****数组的新的API:3组6个

1、判断: 判断数组中的元素是否满足我们的条件
	1、every:判断数组中的元素是否【都】满足我们的条件,类似于我们的&&,只要有一个为false则为false
	2、some:判断数组中的元素是否【包含】满足我们的条件,类似于我们的||,只要有一个为true则为true
	语法:arr.every/some(function(val,i,arr){
			//val:当前值
			//i:当前值的下标
			//arr:数组本身
			//虽然提供了3个形参,但是到底要用几个看我们自己
			//切忌:函数自带return undefined;
			return 判断条件;
	      })
2、遍历:把数组中的每个元素取出来执行相同 或 相似的操作

1、*****forEach:直接修改原数组

		arr.forEach(function(val,i,arr){
			直接写操作;
	        })

2、*map:不修改原数组,直接返回新数组

		var newArr=arr.map(function(val,i,arr){
			return 直接写操作;
	        })

3、汇总和过滤:

  • 3.1、过滤:筛选出符合条件的元素: - 不会修改原数组

    var subArr=arr.filter(function(val,i,arr){
            return 判断条件;
    })
    
  • 3.2、汇总:将所有的数组的元素进行+-*/

    var sum=arr.reduce(function(prev,val,i,arr){
        return prev+val;
    },base)
    

总结 : 以上6个API简化for循环

3、
var 子对象=Object.create(父对象,{
	"属性名":{四大特性},
	......
}) - 根据一个父对象创建一个子对象并且继承已经设置完毕,提前保护对象
4、*****call/apply/bind:替换了函数中的this

1、call/apply:临时替换了函数中的this - 借

差别:

  • call:要求传入的实参必须单独传入
  • apply:要求传入的实参必须整理为一个数组,只能传一个数组参数

强调: call/apply相当于立刻调用函数

用法:

  • 方法名.call(借用的对象,实参,...)
  • 方法名.apply(借用的对象,[实参,...]) - apply自动打散数组

固定套路:

  •  Object.prototype.toString.call/apply(数组)
    
  •  Math.max/min.apply(Math,arr);
                    
    

*关键点:

  •  将类数组转为普通数组
    
  •  lis=Array.prototype.slice.call(lis);
    

2、bind:永久替换了函数中的this - 买

3件事
   1、创建了一个函数功能和原函数完全一样
   2、将新函数的this永久绑定为了你指向的对象
   3、将新函数中的部分固定参数提前永久绑定	

用法:

  •  var 新方法名=方法名.bind(永久绑定的对象,永久绑定的实参,...);
    
  •  不会立刻执行,需要我们程序员手动调用
    

建议:

  • 如果你的这方法要经常反复使用,可以使用bind - 买
  • *如果你需要一个方法立刻就要执行,建议call/apply - 借
5、严格模式:

开启严格模式:"use strict"; - 可以出现在任何作用域的顶部

用处:
  1、禁止给未声明的变量进行赋值
  2、将静默失败升级为错误