es3,es5语法记要

这篇博客总结了ES3和ES5的关键语法,包括6种数据类型(原始类型与对象)、隐式转换、包装对象、类型检测、块级作用域的缺失、对象结构、创建对象的方式与原型链、数组常用方法、函数(作为对象的特性、创建方式及this的用法)、闭包及其在内存管理中的应用,以及继承的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1、6种数据类型
1)原始类型(5种)
number
string
boolen
null
undefined
2)对象object(包括Function、Array、Date、。。。等等),其中Function是一种特殊的对象
2、隐式转换
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、包装对象(number、string、boolean这三个原始类型有包装对象)

4、类型检测
1)判断原始类型常用typeof
在这里插入图片描述
在这里插入图片描述
2)判断对象常用instanceof
在这里插入图片描述
3)其他判断方式
在这里插入图片描述
在这里插入图片描述

5、没有块级作用域(只有 函数作用域 和 全局作用域)

for(var i=0;i<10;i++){
	
}
console.log(i);
等同于
var i=0;
for(;i<10;i++){

}
console.log(i);

在这里插入图片描述
6、对象结构
在这里插入图片描述
7、创建对象(3种方式)和原型链
参考:https://www.cnblogs.com/chengzp/p/prototype.html

//字面量创建对象
var o1 = {
	a:1,
	b:2
};
var o2 = new Object("{a:1,b:2}");
//构造函数创建对象
var M = function(){
	this.a=2;
}
var o3 = new M();
//Object.create创建对象
var p = {a:99};
var o4 = Object.create(p);//以p做为原型创建对象o4,所以o4._proto_ === p

在这里插入图片描述
8、数组常用方法
ie9及以上版本浏览器支持es5
在这里插入图片描述
9、函数
1)js的函数也是对象,js函数可以像其他对象那样操作(访问属性值)和传递(做为另一个函数的入参),所以我们常叫函数对象;
2)创建函数有3种方式
a)函数声明

function add(a,b){
	return a + b;
}

b)函数表达式

//函数变量
var add = function(a,b){
	return a+b;
};
//立即执行函数
(function(){
	//do sth.
})();
//函数做为返回值
return function(){
	//do sth.
};
//命名函数表达式
var a = function add(){
	//do sth.
}

函数声明和函数表达式区别
函数声明会被前置,可以先使用函数再声明
函数表达式需要先定义,再使用
在这里插入图片描述
c)Function构造器

var func = new Function('a','b','console.log(a+b);');
func(1,2);//3
var func = Function('a','b','console.log(a+b);');
func(1,2);//3

d)3种方式对比
在这里插入图片描述
10)this

//全局this
console.log(this.document === document);
console.log(this === window);
var this.a = 33;
console.log(window.a);//33
//一般函数this
function a() {
	return this;
}
window === a() // true
//做为对象方法的函数的this
var o = {
	prop:77,
	f:function(){
		return this.prop;
	}
};
console.log(o.f());//77

var o = {prop:55};
function a(){
	return this.prop;//这里的this指向window
}
o.f = a;
console.log(o.f());//55
//对象原型链上的this
var o = {
	f:function(){
		return this.a + this.b;
	}
}
var p = Object.create(o);//以o做为原型创建对象p
p.a = 8;
p.b = 9;
console.log(p.f());//17
//构造器中的this
function My(){
	this.a=9;
}
var o = new My();
console.log(o.a);//9

function H(){
	this.a = 9;
	return {a:88};
}
var o = new H();
console.log(o.a);//88
//call,apply方法和this
//每个函数都有call和apply这两个方法(Function对象的方法)
function a(c,d){
	return this.a+this.b+c+d;
}
var o = {a:1,b:2};
//call和apply把函数a中的this变为o,
//call和apply区别只是入参不同,call一个一个传,apply传数组,3传给c,4传给d
a.call(o,3,4);//1+2+3+4
a.apply(o,[3,4]);
//call和apply使用场景
function bar(){
	console.log(Object.prototype.toString.call(this));
}
bar.call(8);//call把函数bar中的this修改为8
//bind和this
//每个函数都有bind方法(Function对象的方法),bind是es5才有,所以ie9+才支持
function f(){
	return this.a;
}
var g = f.bind({a:99});
console.log(g);//99
var o = {
	a:8,
	f:f,
	g:g
};
console.log(o.f);//8
console.log(o.g);//99

11)闭包
在这里插入图片描述
上图右边的例子,outer()函数返回一个函数,执行完outer()函数之后localVal还未释放内存,func()函数调用时可以访问到localVal,这就是一个闭包的现象
在这里插入图片描述
在这里插入图片描述
上图上面的例子就是闭包常见的错误,for循环里边的 i 是一个全局变量,点击触发点击事件函数时可以访问 i 变量,这时 i 变量的值为4
在这里插入图片描述
闭包可以用于封装

12)继承
在这里插入图片描述
在这里插入图片描述

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值