##ECMAScript5补充

来源:互联网 发布:淘宝运营合作 编辑:程序博客网 时间:2024/05/21 18:45

ECMAScript5补充

  • 304 表示重定向到浏览器缓存中
  • 301,302,303 表示重定向到服务器
    1. 理解:
      • 除了正常运行模式(混杂模式),ES5添加了第二种运行模式:”严格模式”(strict mode)。
      • 顾名思义,这种模式使得Javascript在更严格的语法条件下运行
    2. 目的/作用
      • 消除Javascript语法的一些不合理、不严谨之处,减少一些怪异行为
      • 消除代码运行的一些不安全之处,为代码的安全运行保驾护航
      • 为未来新版本的Javascript做好铺垫
    3. 使用
      • 在全局或函数的第一条语句定义为: ‘use strict’;
      • 如果浏览器不支持, 只解析为一条简单的语句, 没有任何副作用
    4. 语法和行为改变
      • 必须使用var 声明变量
      • 禁止自定义的函数中的this指向window
      • 创建eval作用域
      • 对象不能有重名的属性

        eval('var username="xiaoming";alert(username)');
        页面中弹出框为xioaming

JSON转换情况

  • JSON.stringify(obj/arr)
    • 表示将js对象(数组)转换为json对象(数组)
  • JSON.parse(json)
    • 表示将对象(数组)转换为js对象(数组)

Objext扩展

ES5给object扩展了一些静态方法,常用以下两种:

Object.create(prototype,[descriptors])

作用:以指定的对象prototype为原型创建新的对象,创建的新的对象的原型里面是指定对象的属性
- 为新的对象那个指定新的属性,并对属性进行描述
- value :指定值
- writable:表示当前属性值是否是可修改的,默认为true。但是在设置时必须要添加这条语句writable:true,才可以修改属性。
- get:用来得到当前属性值的回调函数
- set:用来设置当前对象的属性

例如:var obj={username:"xiaoming",age:18};var obj2={};//创建的obj2中的原型是obj的属性,并添加了直接属性//obj后面的{},表示的是配置对象obj2=Object.create(obj,{    sex:{//添加新的属性的值,和新添加直接属性可以修改它的值    value:"male",    writable:true    }});obj2.sex="femal";console.log(obj2.sex)

Object.defineProperties(object,dexcriptors)

作用:为指定对象定义扩展多个属性
* 存储器属性:setter,getter一个用来存值,一个用来取值

例如://定义一个对象var obj={username:"xiangming"};//为指定的这个对象添加多个属性Object.defineProperties(obj,{//新扩展的属性名fullName:{    //get调用输出属性值是来调用这个(用来取值)    get:function(){        return this.firstName+" "+this.lastName;    },    //set用来监听属性值变化,当添加属性的时候会调用这个函数(用来存值)data是传来的属性值    set(data){    //split将字符串以“-”分割,分割成数组字符串    var names = data.split('-');   this.firstName = names[0];    this.lastName = names[1];    }}});//添加属性,调用set函数,将“小-明”这个属性值传入obj.fullName="小-明"//输出值,调用get函数将值返回console.log(obj.fullName);//小-明

对象本身的两个方法

  • get propertyName(){} 用来得到当前属性值的回调函数
  • set propertyName(){} 用来监听当前属性值变化的回调函数
例如:var obj={firsrName:"xiao",lastName:"ming",funllName:{    get(){    return this.firstName + ' ' + this.lastName    },    set(data){    var names = data.split(' ');    this.firstName = names[0];    this.lastName = names[1];    }}}//调用funllName的set函数方法obj.fullName="小 明";//调用fullName的get函数方法console.log(obj.fullName);

Array的扩展方法

  1. Array.prototype.indexOf(value) : 得到值在数组中的第一个下标
  2. Array.prototype.lastIndexOf(value) : 得到值在数组中的最后一个下标
  3. Array.prototype.forEach(function(item, index){}) : 只能遍历数组
  4. Array.prototype.map(function(item, index){}) : 遍历数组返回一个新的数组,返回加工之后的值
例如:var arr=[1,2,3,4,5];var arr2=arr.map(function(item,index){    return item+10;})console.log(arr2);//[11,12,13,14,15]
  1. Array.prototype.filter(function(item, index){}) : 遍历过滤出一个新的子数组, 返回条件为true的值
var arr=[2,5,2,3,4,6];var arr2=arr.filter(functon(item,index){    return item>2})console.log(arr2);//[5,3,4,6]

函数的扩展

Function.prototype.bind(obj)
作用:将函数内容this绑定为obj,并将函数返回

例如:fun.bind(obj,12)();//fun调用bind函数,它的this指定的是obj。之后在调用它返回的函数

区别:bind(),call(),apply()

  • 都能指定函数中的this
  • call()/apply(),中的this指向的是第一个对象,call()直接传递参数,apply()将参数封装到数组中传递。他们都是立即调用函数,直接就调用了。
  • bind(),不是立即调用函数,他是调用过它之后,会返回指定过this的这个函数,然后再手动调用他。