ES5学习笔记

1. es5严格模式

目的/作用

  • 清除javascript语法的一些不合理、不严谨之处,减少一些怪异行为。
  • 消除代码运行的一些不安全之处,为代码的安全运行保驾护航。
  • 为未来新版本的javascript做好铺垫。

使用

  • 在全局或函数的第一条语句定义为’use strict’

语法和行为改变

  • 必须用var声明变量
  • 禁止自定义函数中的this指向window
  • 创建eval作用域(eval是一个函数,它可以被赋值给变量,eval被赋值时也会把当前eval所处的变量作用域也赋值过去)
  • 对象不能有重名的属性

2. json对象的扩展

JSON.stringify(obj/arr)

  • js对象(数组)转化为json对象(数组)

JSON.parse(json)

  • json对象(数组)转换为js对象(数组)

3. es5给Object扩展了一些静态方法,常用的2个

Object.create(prototype,[descriptors)

  • 作用:以指定对象为原型创建新对象,为新的对象制定新的属性,并对属性进行描述
  • value: 指定值
  • writable:标识当前属性值是否是可修改的,默认为false
  • configurable:标识当前属性是否可以被删除,默认为false
  • enumerable:标识当前属性是否能用for in 枚举 默认为false
<script>
var obj = {username:'damu',age:30};
var obj1 = {};
obj1 = Object.create(obj,{
    sex:{
        value:'男',
        writable:true,
        configurable:true,
        enumerable:true
    }
})
console.log(obj1.sex);
obj1.sex='女';
console.log(obj1.sex);
delete obj1.sex
console.log(obj1)
for(var i in obj1){
    console.log(i)
}
</script>

Object.definePropertise(object,descriptors)

  • 作用:为指定对象定义扩展多个属性
  • get:用来获取当前属性值的回调函数
  • set:修改当前属性值得触发的回调函数,并且实参即为修改后的值
  • 存取器属性:setter,getter一个用来存值,一个用来取值
var obj2 = {firstName:'kobe',lastName:'bryant'};
Object.defineProperties(obj2,{
    fullName:{
        get:function () {//获取扩展属性的值,获取扩展属性值的get方法自动调用
            return this.firstName + ' ' + this.lastName
        },
        set:function (data) {//监听扩展属性,当扩展属性发生变化的时候会自动回调,将变化的值作为实参注入到set函数
            console.log('set()',data);
            var names = data.split(' ');
            this.firstName = names[0];
            this.lastName = name[1]
        }
    }
})
console.log(obj2.fullName)
obj2.fullName = 'tim duncan'
console.log(obj2.fullName)

对象本身的两个方法

  • get propertyName(){}

  • set propertyName(){}

var obj = {
    firstName:'curry',
    lastName:'stephen',
    get fullName(){
        return this.firstName + ' ' + this.lastName
    },
    set fullName(data){
        var names = data.split(' ');
        this.firstName = names[0];
        this.lastName = name[1]
    }
}
console.log(obj);
obj.fullName = 'kobe bryant';
console.log(obj.fullName);

4. 数组的扩展

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

arr.forEach(function(item,index){
console.log(item,index)
})

Array.prototype.map(function(item,index){})//遍历数组返回一个新的数组,返回加工之后的值

var arr1 = arr.map(function(item,index){
    return item + 10
})

Array.prototype.filter(function(item,index){})//遍历过滤出一个新的子数组,返回条件为true的值

var arr2 = arr.filter(function(item,index){
    return item > 3
})

5. call,apply,bind用法

都能指定函数中的this,call()/apply()是立即执行函数,bind()是将函数返回

<script>
var obj = {username:'kobe'};
function foo(data) {
    console.log(this,data)
}
//传入参数的形式
将foo中的this指向obj
foo.call(obj,33)//直接从第二个参数开始,依次传入
foo.apply(obj,[33])//第二个参数必须是数组,传入放在数组里
foo.bind(obj,33)()//bind的特点:绑定完this不会立即调用当前的函数,而是将函数返回,通常用来指定回调函数的this
setTimeout(function(){
    console.log(this)
},bind(obj),1000)
</script>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值