JavaScript基础
简介:
本节讲解JavaScript基础核心知识:涵盖值类型与引用类型区别、typeof检测类型及局限性、===与==差异及应用场景、内置函数与对象、原型链五规则、属性查找机制、instanceof原理,以及this指向和箭头函数中this的绑定时机。重点突出类型判断、原型继承与this机制,助力深入理解JS面向对象机制。(238字)
1 变量类型和计算
1.1 值类型和引用类型的区别?
- 值类型:每个变量都会存储各自的值。不会相互影响
- 引用类型:不同变量的指针执行了同一个对象(数组,对象,函数)
1.2 typeof可以及检测的数据类型有哪些?
Note
● 基本数据类型:Undefined null bool string number
● 关键点:typeof只能区分值类型,不能区分引用类型
● JS中的基本数据类型:null, undefined, bool, string, number(typeof可以区分除了null以外的四种值类型)
● typeof 6种类型:Object({},[],null), Undefined, Boolean, Number, Function, String
● typeof可以区分值类型,typeof null = Object1.3 JS中===和==的区别?
1.3.1 区别?
== 会进行强制类型转换之后再比较,=== 不会进行强制类型转换的1.3.2 应用场景?
- (用于判断对象属性是否存在):if (obj == null) ===>>> 等价于if (obj == null || obj == undefined),可以简化代码,其他情形都使用===进行比较
- 用于判断函数的参数是否存在: function(a, b){ if(a == null) { // ... }}
- 对于函数内部或者是一个对象的参数进行判断只会出现undefined, 而不会报错(慎用)
1.3.3 其他?
js中类型转换为false的有哪些(6种):null, undefined, NaN, '', false, 01.4 JS中的内置函数有哪些?
Note
● 内置函数: Object Array Boolean Number String Function Date RegExp Error
● 内置对象:Math, JSON2 原型和原型链
2.1 原型链的5条规则
- 所有的引用类型(数组,对象,函数),都是具有对象特性的,即可以自由扩展属性(除了null以外)
- 所有的引用类型(数组、对象、函数),都有一个proto 属性(隐式原型),这个属性的值是一个普通对象
- 所有的函数,都有一个prototype属性(显式原型),这个属性值是一个普通的对象
- 所有的引用类型(数组、对象、函数),proto的属性值指向(完全相等)它的构造函数的“prototype”的属性值
- 当试图得到一个对象的某一个属性的时候,如果一个对象本身没有这个属性的话,就会去它的proto( 也就是它的构造函数中去寻找这个属性)
2.2 JS中寻找对象属性的过程
- 当一个对象没有这个toString()这个属性的时候,就回去自己的隐式原型proto中去寻找这个属性,也就是去自己额构造函数的显示原型prototype中寻找这个属性(对象自身的隐式原型就是他的构造函数的显式原型)
- 发现FOO.prototype中也没有这个toString属性,这也是一个对象,name就去这个对象{}的proto中寻找toString()这个属性
2.3 instanceof的作用?
是用于判断【引用类型】属于哪个【构造函数】的方法
Note
总结:f.proto 一层一层向上寻找,能否找到FOO.prototype,找到为true,否则为false2.4 对this的理解?
- 作为构造函数执行
- 作为对象属性执行
- 作为普通函数执行
- call apply bind
2.5箭头函数中的this
首先,箭头函数没有自己的this,箭头函数中的this是在定义函数的时候绑定,它会捕获其所在的上下文的this作为自己的this,而不像普通函数那样是在执行函数的时候绑定。