ES5
1.ES5严格模式
在全局或者函数的第一行使用字符串 ‘use strict’ 来表明使用严格模式
严格模式下的规范:
- 必须使用var来声明遍历
- 禁止自定义函数中的this指向window
- 创建eval作用域(不会污染全局的变量)
- 对象不能有重名的属性
2.JSON对象扩展
将对象与JSON对象互相转换
- JSON.stringfy(obj):转换成JSON对象
- JSON.parse(obj):解析成JS对象
3.Object扩展
ES5给Object扩展了一些静态方法
常用两个
- Object.create(prototype,[descriptors]):以指定对象的原型创建新的对象
- value:指定值
- writable:标识当前属性值是否可修改,默认为false
- configurable:标识当前属性是否可以被删除,默认为false
- enumerable:标识当前属性是否可以用for in枚举,默认为false
- Object.defineProperties(object,decriptors):为指定对象定义扩展多个属性
// create()方法
var obj = {username:'vincent', age: 30};
var obj1 = {};
obj1 = Object.create(obj, {
sex: {//添加sex属性
value: '男',
writable: true, //标识可修改
configurable: true, //标识属性可以删除
enumerable: true //标识属性可以用for in 枚举
}
});
console.log(obj1);
//defineProperties()方法
var obj2 = {firstName: 'kobe', lastName: 'bryant'};
Object.defineProperties(obj2,{
fullName:{
get: function(){ //获取扩展属性的值
return this.firstName+ ' ' + this.lastName;
},
set: function(data){ //设置扩展属性的时候会自动调用
var names = data.split(' ');
this.firstName = names[0];
this.lastName = names[1];
}
}
});
4.数组的扩展
- Array.prototype.indexOf(value):得到值在数组中的第一个下标
- Array.prototype.lastIndexOf(value):最后一个下标
- Array.prototype.foreach(function(item, index){}):遍历数组
- Array.prototype.map(function(item, index){}):遍历数组返回一个新的数组,返回加工后的值
- Array.prototype.filter(function(item, index){}):遍历过滤出一个新的子数组,返回条件为true的值
5.call apply bind用法
call
从第二个参数开始传入,用逗号依次隔开
var obj {username: 'kobe'};
function foo(data){
console.log(this, data);
}
foo.call(obj, 33);
apply
第二个参数必须是数组,传入参数放在数组中
var obj {username: 'kobe'};
function foo(data){
console.log(this, data);
}
foo.apple(obj, [33]);
bind
绑定函数,并不会立即调用,而是将函数返回