ES5

ES5 发行时间
  • 2009年
严格模式
  • 运行模式: 正常(混杂)模式与严格模式
  • 应用严格模式:use strict
<script type="text/javascript">
	'use strict';
</script>
  • 作用:
    • 使得 Javascript 在更严格的条件下运行
    • 消除 Javascript 语法的一些不合理、不严谨之处,减少一些怪异行为
    • 消除代码运行的一些不安全之处,保证代码运行的安全
    • 需要记住的几个变化
      • 声明定义变量必须用 var
      • 禁止自定义的函数中的 this 关键字指向全局对象
      • 创建 eval 作用域, 更安全
JSON 对象
  • 作用:用于在 json 对象/数组与 js 对象/数组相互转换
  • JSON.stringify(obj/arr):js 对象(数组)转换为 json 对象(数组)
  • JSON.parse(json):json 对象(数组)转换为 js 对象(数组)
Object 扩展
  • Object.create(prototype, [descriptors]):以指定对象为原型创建新的对象,为新的对象指定新的属性, 并对属性进行描述
    • value:指定值
    • writable:标识当前属性值是否是可修改的, 默认为 true
    • configurable:标识当前属性是否可以被删除,默认为 false
    • enumerable:标识当前属性是否能用 for in 枚举,默认为 false
<script type="text/javascript">
	var obj = {username: 'danny', age: 30};
	var obj1 = Object.create(obj, {
		sex: {
			value: '男',
			writable: true, //可修改
			configurable: true, //可删除
			enumerable:true //可被枚举
		}
	});
	console.log(obj1.sex); //男
	obj1.sex = '女';
	delete obj1.sex; 
	for(var i in obj1) {
		console.log(i); 
	}
</script>
  • Object.defineProperties(object, descriptors):为指定对象定义扩展多个属性
    • get 方法:用来得到当前属性值的回调函数
    • set 方法 : 用来监视当前属性值变化的回调函数
    • 存取器属性:settergetter一个用来存值,一个用来取值
<script type="text/javascript">
	var obj2 = {firstName: 'danny', lastName: 'Bob'};
	Object.defineProperties(obj2, {
		fullName: {
			get: function () { //获取扩展属性的值
				return this.firstName + ' ' + this.lastName; //this指向obj2
			}
			set: function(data) { //监听扩展属性,当扩展属性发生变化时会自动调用,自动调用后会将变化的值注入实参
			var names = data.split(' ');
			this.firstName = names[0];
			this.lastName = name[1];
			console.log(data);
			}
		}
	});

	console.log(obj1.sex); //男

</script>
  • 对象本身的 getset 方法
<script type="text/javascript">
	var obj2 = {
		firstName: 'danny',
		lastName: 'Bob',
		get fullName() {
			return this.firstName + ' ' + this.lastName; 
		},
		set fullName(data) {
			var names = data.split(' ');
			this.firstName = names[0];
			this.lastName = name[1];
		}
	};
</script>
Array扩展
  • Array.prototype.indexOf(value):得到值在数组中出现 value 的第一个下标
  • Array.prototype.lastIndexOf(value):得到值在数组中出现 value 元素的最后一个下标
  • Array.prototype.forEach(function(item, index){}):遍历数组
var arr = [2, 3, 4, 2, 1];
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){}):遍历过滤出一个子数组
var arr2 = arr.filter(function (item, index) {
	return item > 3;
});
Function扩展
  • Function.prototype.bind(obj):将函数内的 this 绑定为 obj , 并将函数返回
  • this 指向
this 的绑定对象
方法调用模式调用该方法的对象
函数调用模式如:function fn() {}
fn(); this 被绑定到 window
  • call()、apply()、bind():改变函数运行时 this 的指向
参数
call()第一个参数:要绑定给 this 的值,后面的是参数列表,直接用逗号隔开即可
apply()第一个参数:要绑定给 this 的值,第二个参数是一个参数数组。
bind()call() 很相似,第一个参数:要绑定给 this 的值,后边是一系列参数列表
    • 第一个参数为 nullundefine 时,默认指向 window
    • bind 绑定完 this ,不会立即调用当前函数,而是将函数返回,并且原函数中的 this 指向并没有被改变。call 和 apply 是绑定完立即调用
    • 低版本中没有 bind 方法,实现代码
if (!Function.prototype.bind) {
    Function.prototype.bind = function () {
        var self = this,                        // 保存原函数
            context = [].shift.call(arguments), // 保存需要绑定的this上下文
            args = [].slice.call(arguments);    // 剩余的参数转为数组
        return function () {                    // 返回一个新函数
            self.apply(context, [].concat.call(args, [].slice.call(arguments)));
        }
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值