##ECMAScript5补充

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的这个函数,然后再手动调用他。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值