javascript进阶知识巩固
- 一,基础总结:
- 二,函数高级
- 三,面向对象高级
- 四,线程机制与事件机制
一,基础总结:
1,数据类型
1.1. 基本类型:
- String
- Number
- Boolean
- undefined
- Null
1.2.对象类型:
2,变量类型: 【变量内存之的类型】
2.1.基本类型:
保存的就是基本类型的数据
2.2.引用类型:保存的引用地址
- Object:任意对象都是Object
- Function
- Array
3, 数据-变量-内存
4,对象
5,回调函数
回调函数的特点:
- 自己定义的
- 自己没有去主动调用
- 最终函数执行了
常见的回调函数:
- DOM事件回调函数【点击事件,悬浮事件等】
- 定时器回调函数
- ajax请求回调函数
- 生命周期回调函数
6,IIFE:立即执行函数–匿名函数自调用
相当于闭包吧个人理解。不会污染全局命名空间。
7,函数中的this ?
如何确定this指向的是谁?
- test():this指向window
- p.test():this指向P
- new test() :this指向新创建的实例对象
- p.cal(obj):this指向obj
8,判断
对数据进行判断时,“typeof”, “instanceof " ,” ==="
- typeof:可以判断undefined/number/string/boolean/function。不能判断 null & Object , Object & Array
- instanceof :判断对象的具体类型
- " === "可以用来判断null和undefined
console.log(typeof '123');//String
typeof undefined // undefined 值为undefined ,类型为undefined
typeof null // object 值为null,类型为对象
null === undefined // false 全等要求值和类型都相等,它们类型不同
null == undefined // true
console.log('111' instanceof String);//true
9,undefined和null的区别:
- undefined表示变量声明过但并未赋值。会自动默认赋值undefined。 比如 let x;
- null表示数据定义并赋值了只是value为null。null主动释放一个变量引用的对象,表示一个变量不再指向任何对象地址。
- 什么时候需要给变量赋值为null? 初始时和结束时。
当使用完一个比较大的对象时,需要对其进行释放内存时,设置为 null。
let a = null;//初始赋值为null,表明将要将a赋值为对象
a = [],
a = null;//结束时赋值为null,让a指向的对象成为垃圾对象,可以被垃圾回收器回收
10,ES6语法规范,let/const的区别
二,函数高级
1,原型和原型链
1.6 关于原型的面试题检测:
面试题1:涉及知识点—原型,变量赋值,内存
function A() {}
A.prototype.n = 1;
var b = new A();//b对象的隐式原型 b.__proto__ === A.prototype 所以通过隐式原型查找到b.n的值为1
A.prototype = { //将{}赋值给显示原型变量。数组/对象/函数的赋值会重新分配新的内存空间,存储新的内存地址。
n:2,
m:3
}
var c = new A();
console.log(b.n,b.m,c.n,c.m);//1 undefined 2 3
图解:
面试题2:
知识点:所有函数的显示原型都默认指向空的Object对象。所有函数都是Function实例,包括它本身。对象的隐式原型恒等于函数的显示原型。
function F() {};
Object.prototype.a = function() {
console.log('a');
}
Function.prototype.b = function() {
console.log('b');
}
var f = new F();//f.__proto__的值等于F.prototype,F.prototype的值等于空的Object对象。【所有函数的显示原型都默认指向空的Object实例对象,实例对象最终可以看到显示原型上的值。
f.a();
f.b();
F.a();
F.b();
图解:
以上图解纠正:f.b()不是undefined。而是无法执行,会报错,因为找不到函数b()。其他三个都会执行相应函数。