这是我参与「第四届青训营 」笔记创作活动的的第3天,今天听月影老师讲了JavaScript,受益匪浅。
变量类型和计算
JavaScript中的变量类型包括值类型和引用类型,分类如下:
- 值类型:字符串(string), 数值(number), 布尔值(boolean), null、undefined
- 引用类型:对象(Object), 数组(Array), 函数(Function)
Boolean值(true、false)
false,undefined,null,0,NaN和一个空字符串''
typeof
- 识别所有值类型
- 识别函数
- 判断是否引用类型
//能判断函数
typeof console.log //'function'
typeof function(){}//'function'
//能识别引用类型(object)
typeof null //'object'
typeof ['a','b'] //'object'
typeof { x:100 } //'object'
类型转换
const a = 100 + 10 //110
const b = 100 + '10' //'10010'
const c = true + '10' //'true10'
parseInt()强制类型转换
==:类型转换
//除了 == null 之外,其他一律用 ===
100 == '100' //true
0 == '' //true
0 ==false //true
false == '' //true
null == undefined //true
-
truly变量:
!!a === true的变量 -
-
falsely变量:
!!a ===false的变量 -
//falsely变量,除此之外都是truly变量
!!0 === false
!!NaN === false
!!'' === false
!!null === false
!!undefined === false
!!false === false
值类型和引用类型的区别
//引用类型
let a = { age: 20 }
let b = a
b.age = 21
a.age //21
性能问题
-
值类型在栈中实现
-
引用类型
let a //undefined //'undefined'
const s = 'abc' //'string'
const n = 100 //'number'
const b = true //'boolean'
const s = Symbol('s') //'symbol'
const obj = {x:100}
const arr = ['a','b','c']
const n = null 是特殊引用类型,指针指向空地址,特殊引用类型,但不用于存储数据,所以没有拷贝复制函数这种说法
function fn() {}
原型和原型链
1、原型模式是用于创建重复的对象,同时又能保证性能,这种类型的设计模式属于创建型模式,它提供了一种创建对象的最佳方式;
2、原型链是原型对象创建过程的历史记录,当访问一个对象的某个属性时,会先在这个对象本身属性上查找。
class实现继承
constructor
extends和super
//父类
class People {
constructor(name){
this.name = name
}
Chilema(){
console.log(`${this.name}chile`)
}
}
//子类
class Student extends People{
constructor(name, number){
super(name) //继承自父类
this.number = number
}
sayHi(){
console.log(`${this.name}和${this.number}`)
}
}
let xiaoming = new Student('xiaoming', 001)
//隐式原型和显式原型
xiaoming.__proto__ === Student.prototype //true
class实际上是函数,是语法糖 typeof People //'function'
原型关系
- 每个class都有一个显式原型prototype
- 每个实例都有隐式原型
__proto__
Object.**proto** : null
总结
今天学会了原生js的使用以及对函数的封装,以及将集成函数的部分结构抽离成可复用的函数,以及学会了原型和原型链的使用和区别。