Javascript高级总结

深渊向深渊呼唤

一、数据类型

数据类型分类:基本数据类型引用数据类型大整数Symbol

基本数据类型:NumberStringBooleanUndefinedNull,其中UndefinedNull不常用;上述五种数据类型在typeof作用下分别返回"number"、"string"、"boolean"、"undefined“和”object"; 引用数据类型:Object(’Object‘、‘Function’和’Array’),在typeof作用下返回"object"; 大整数:BigInt,在typeof作用下返回"bigint"; Symbol:Symbol,在typeof作用下返回"symbol";

二、数据、内存、变量

数据:将实体事物以二进制的形式存储于计算机中的’东东’; 内存:我们通常所指的是临时内存(内存条通电后分配的内存空间),固态硬盘是永久存在的。内存分类为栈和堆内存空间,用于存储相应的数据类型数据; 变量:由变量名和变量值组成;
总结:数据存储于内存当中,变量是这个数据的标识符,通过这个标识符可以读写操作内存中的数据;

三、对象

对象是一个事物的属性及行为描述的封装体;

四、函数

函数是一个功能模块封装及实现的封装体;

五、构造函数之原型链

一切函数都是通过new Function()产生(包括函数Function本身,Object也是通过new Function()产生); A instanceof B:其结果返回true,表示确定A对象是B类的实例、B类的子类、或者说实现了某个特定的接口,那么返回true的条件是满足B类的显示原型与A对象的隐式原型链有交集;下面是instanceof案例:
Function instanceof Function // true(注意:Function.__proto__ === Function.prototype,唯一一个对象本身的隐式原型和显示原型相等)
Function instanceof Object // true
Object instanceof Object // true
Object instanceof Function // true
Array instanceof Array // false
Array instanceof Function // true
Array instanceof Object // true
let arr = new Array();
arr instanceof Array // true
arr instanceof Object // true
arr instanceof Function // false
let obj = {}; // 等同于let obj = new Object();
obj instanceof Object // true
obj instanceof Function // false

六、变量提升、函数提升

var来声明的变量名存在变量提升:
console.log(a); // undefined
var a = '变量提升';
用此方式声明的函数存在函数提升:
a(); // '函数提升'
function a() {
   console.log('函数提升');
}
先变量提升,后函数提升
var c = 1;
function c(c) {
	console.log(c);
}
c(2); // 报错:c is not a function
var声明的变量挂载于何处?
if(!(b in window)) {
	var b = 1;
}
console.log(b); // undefined 因为非模块化环境下运行,var存在变量提升并且没有代码块这个概念,所以上面语句先`var b;`(var声明的变量会在全局变量挂载和window对象下挂载这个属性,所以此时打印window.b为undefined),然后`if(!(b in window)) {b=1}`,最后打印`console.log(b)`为undefined;如果是在模块化环境下运行,在运行到if判断语句时就会报出b is not defined;

七、执行上下文、执行上下文栈

执行上下文: 全局执行上下文、函数执行上下文和eval函数执行上下文(此上下文不推荐使用及产生); 执行上下文栈:由全局执行上下文和函数执行上下文的执行形成的一个栈结构,遵循后进先出原则;
栏目