大家好,小编来为大家解答以下问题,javascript高级程序设计第五版 pdf,javascript高级程序设计pdf百度云,今天让我们一起来看看吧!
目录
一、深入基础
1.1数据类型
1.分类:
-基本类型
-String:任意字符串
-Number:任意的数字
-boolean: true/false
-undefined:未定义
-null:空
-引用(对象)类型
-Object:任意对象
-Function:一种特别的对象(可以执行)
-Array:一种特别的对象(数值下标,内部数据是有序的)
2.判断:
-typeof:
可以判断:undefined、数值、字符串、布尔值
不能判断: null与object object与array
instanceof:可以判断对象的具体类型
=== 可以判断undefined、null
3.undefined与null的区别?
* undefined表示定义未赋值
* null表示赋值了,值为null
什么时候给变量赋值为null?
* 初始赋值,表明将要赋值为对象
* 结束前,让对象成为垃圾对象(被垃圾回收器回收)
4.严格区别变量类型与数据类型?
* 数据的类型
- 基本类型
- 对象类型
* 变量的类型(变量内存值的类型)
-基本类型:保存就是基本类型的数据
-引用类型:保存的是地址值
1.2数据变量与内存
1.什么是数据?
-存储在内存中代表特定的信息,本质上是010101…
-数据的特点:可传递、可运算
-内存中所有操作的目标:数据
逻辑运算
算数运算
赋值
运行函数
2.什么是内存?
-内存条通电后产生的可储存数据的空间(临时的)
-内存产生和死亡:内存条==>通电==>产生内存空间==>存储数据==>处理对象==>断电==>内存空间和数据消失
-一小块内存的2个数据
-内部存储的数据
-地址值
-内存分类
-栈:存储全局变量、局部变量
-堆:存储对象
3.什么是变量?
-可变化的的量,又变量名和变量值组成
-每个变量都对应的一小块内存,变量名用来查找对应的内存,变量值就是内存中保存的数据
4.内存,数据,变量三者之间的关系
-内存用来存储数据
-变量是内存的标识
5.var a = xxx; a内存中到底保存的是什么?
- xxx 是基本数据,保存的就是这个数据
- xxx 是对象,保存的是对象的地址值
- xxx 是一个变量,保存的xxx的内存内容(可能是基本数据,也可能是地址值)
6.关于引用变量的赋值问题:
2个引用变量指向同一个对象,通过一个变量修改对象内部数据,另一个变量看到的是修改之后的数据。
2个引用变量指向同一个对象,让其中一个引用变量指向另一个对象,另一个引用变量依然指向前一个对象GPT改写。
<>
var obj1 = {name:"tom"};
var obj2 = obj1;
obj2.name = "bob";
console.log(obj1.name); //bob
function fun(obj){
obj.name = "TIMI";
};
fun(obj1);
console.log(obj2.name); //TIMI
var a = {age:12};
var b = a;
a = {name:"mike",age:13};
b.age = 14;
console.log(b.age,a.name,a.age); //14,mike,13
function fun2(obj){
obj = {age:15};
};
fun2(a);
console.log(a.age); //13
</>
7.在js调用函数时传递变量参数时,是值传递还是引用传递?
- 理解1:都是值(基本/地址值)传递
- 理解2:可能是值传递,也可能是引用传递(地址值)
<>
var a = 3;
function fun1(a){
a = a+1;
};
fun1(a);
console.log(a);//3
function fun2(obj){
console.log(obj.name);
};
var obj = {name:"tom"};
fun2(obj);
</>
8.js引擎如何管理内存
1.内存生命周期
- 分配小内存空间,得到它的使用权
- 储存数据,可以反复进行操作
- 释放小内存空间
2.释放内存
-局部变量:函数执行完自动释放
对象:成为垃圾对象–>垃圾回收器回收
1.3对象
1.什么是对象?
- 多个数据的封装体
- 用来保存多个数据的容器
- 一个对象代表现实中的一个事物
2.为什么用对象?
- 统一管理多个数据
3.对象的组成
- 属性:属性名(字符串)和属性值(任意)组成
- 方法:一种特别的属性(属性值是函数)
4.如何访问对象内部的数据?
- .属性名: 编码简单,有时不能用
- [“属性名”]: 编码麻烦,能通用
5.什么时候使用 [“属性名”] 这种方式
- 属性名包含特殊字符:- 空格等
- 属性名不确定
<>
var p = {};
// 1.给对象p添加一个属性:content-type:text/json
// p.content-type = "text/json"; 不能用
p["content-type"] = "text/json";
console.log(p["content-type"]);
// 2.属性名不确定
var propName = "myAge";
var value = 18;
// p.propName = value; 不能用
p[propName] = value;
console.log(p[propName]);
</>
1.4函数
1.什么是函数?
实现特定功能的n条语句的封装体
只有函数是可以执行的,其他类型的数据不能执行
2.如何定义函数?
函数声明
表达式
3.如何调用函数?
test(); 函数名(); 直接调用
obj.test(); 通过对象调用
new test(); new调用
test.call/apply(obj); 临时让test成为obj的方法进行调用
4.回调函数
什么是回调函数?
1.自己定义的
2.没有调用
3.最终执行了(在某个时刻或某个条件下)
常见的回调函数?
1.dom事件回调函数
2.定时器的回调函数
3.ajax请求回调函数
4.生命周期回调函数
<body>
<button id="btn01">回调</button>
<>
var btn01 = document.getElementById("btn01");
btn01.onclick = function(){
alert(this.innerHTML);
};
// 定时器
setTimeout(function(){
alert("到点了");
},2000);
</>
</body>
1.5 IIFE
IIFE 全称:Immediately-Invoked Function Expression (立即调用函数表达式),别名:匿名函数自调用。
作用:
- 隐藏内部实现
-不会干扰到外部(全局)命名空间
-用它来编码js模块
<>
(function(){ //匿名函数自调用
var a = 3;
console.log(a+3);
})();
var a = 4;
console.log(a);
(function(){
var a = 1;
function test(){
console.log(++a);
}
window.$ = function(){ //向外暴露一个全局函数
return{
test:test
}
};
})();
$().test(); //$是一个函数
//$执行后返回的是一个对象
</>
1.6函数中的this
1.this是什么?
- 在任何函数本质上都是通过某个对象来调用的,如果没有直接指定就是window
- 所有函数内部都有一个变量this
- 它的值是调用函数的当前对象
2.如何确定this的值?
- test(); window
- p.test(); p
- new test(); 新创建的对象
- p.call(obj); obj
< type="text/java">
function Person(color) {
console.log(this)
this.color = color;
this.getColor = function () {
console.log(this)
return this.color;
};
this.setColor = function (color) {
console.log(this)
this.color = color;
};
}
Person("red"); //this是谁? window
var p = new Person("yello"); //this是谁? p
p.getColor(); //this是谁? p
var obj = {};
p.setColor.call(obj, "black"); //this是谁? obj
var test = p.setColor;
test(); //this是谁? window
function fun1() {
function fun2() {
console.log(this);
}
fun2(); //this是谁? window
}
fun1();
</>
二、函数高级
2.1原型与原型链
2.1.1原型(prototype)
1.函数的prototype属性
- 每个函数都有一个prototype属性,它默认指向一个Object空对象(即为原型对象)
- 原型对象中有一个属性constructor,它指向函数对象
2.给原型对象添加属性(一般都是方法)
- 作用:函数的所有实例对象自动拥有原型中的属性(方法)
<>
// 每个函数都有一个prototype属性,它默认指向一个Object空对象(即为原型对象)
console.log(Date.prototype,typeof Date.prototype);
function Fun(){
}
console.log(Fun.prototype);//默认指向一个Object空对象(没有我们的属性)
// 原型对象中有一个属性constructor,它指向函数对象
console.log(Date.prototype.constructor===Date);
console.log(Fun.prototype.constructor===Fun);
// 给原型对象添加属性(一般是方法)--> 实例对象可以访问
Fun.prototype.test = function(){
console.log('test()');
}
var fun = new Fun();
fun.test();
</>
2.1.2显示原型与隐式原型
1.每个函数function都有一个prototype,即显示原型(属性)
2.每个实例对象都有一个__proto__,可称为隐式原型(属性)
3.对象的隐式原型的值为其对应构造函数的显示原型的值
4.总结:
- 函数的prototype属性:在定义函数时自动添加的,默认值是一个空Object对象
- 对象的__proto__属性:创建对象时自动添加的,默认值为构造函数的prototype属