1,JS基础
1,JS的基本数据类型
- number
- string
- boolean
- undefined
- null
- symbol
- bigInt
注:用typeof 判断数据类型 typeof(undefined)=>undefined; typeof(null)=>object undefined 声明了一个但未赋值 null 空对象
2,JS的引用数据类型
- Array 数组(属于对象的一种)
var arr1=new Array(3)长度为三的数组,每一项都是空;
var arr2=new Array(1,2,3)数组的初始化,1*3的数组;
- Object 对象
var obj={}
var obj=new Object{}
var obj=new Object{
{
name:"zs"
}
}
- 区分对象和数组的方法
1.obj.constructor-Object.prototype.toString.call(arr)
2.arr instanceof array
3.数组有一个方法IsArray
注typeof()对象和数组返回结果都是object
3,JS的基本数据类型和引用数据类型的区别
-
基本数据类型中基本数据存储在栈(stack)中,是按值访问的,因为可以直接操作保存在变量中的实际值。
-
引用数据类型是保存在堆(heap)中,不能直接访问堆内存中的位置和操作堆内存空间,只能操作对象在栈内存中的引用地址,当两个引用数据类型指向了同一个堆内存对象。obj1赋值给obj2,实际上这个堆内存对象在栈内存的引用地址复制了一份给了obj2,但是实际上他们共同指向了同一个堆内存对象,所以修改obj2其实就是修改堆中的地址,所以通过obj1访问也能访问的到。
4,基本数据类型的运算
5,异步加载
defer 先加载dom 同时加载JS,dom加载完成后执行;
async 先加载dom 同时加载JS,执行完JS,继续加载dom;
6,类
类的创建
function Person(name,age){
this.name=name;
this.age=age;
thi.say=function(){
console.log("hello")
}
}
每构建一个实例化对象,类会自动创建类中含有的函数;
1.函数下有一个prototype属性,它的实质是一个指针,指向它的原型对象 Person.prototype=>{constructor: ƒ}
2.原型对象下的属性和方法,可以被每一个实例化对象所共享,不需要每次构建一个实例化对象,创建一次方法;
3.实例化对象下有一个属性constructor,指向它的构造函数(也就是这个类)a.constructor=>ƒ Person(name,age){}
4.实例化对象下有一个属性__proto__指向它的原型对象a.proto=>{constructor: ƒ}
5.原型链:当从一个对象那里调取属性和方法时,如果对象自身不带有该属性和方法,就会去自己关联的prototype那里去寻找,如果prototype没有,就会去prototype关联的前辈prototype那里去寻找,以此类推,直到prototype....prototype=undefined,object的prototype就是undefined,这就是所谓的原型链,【感觉就像其他语言中对于祖先类的继承】
6.继承:
1)Person.call(this)=>继承父类的属性
2)coder.prototype=newPerson()=>继承父类及父类原型链上的方法
3)coder.prototype.constructor=code=>将原型对象的构造函数指回coder