JS基础知识-变量类型 | 青训营笔记

74 阅读2分钟

这是我参与「第四届青训营 」笔记创作活动的的第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的变量

  • 5e2394c9a57ffabb4cc7b6ed8f108a9c.png

  • falsely变量:!!a ===false的变量

  • 599a1a3b77a239a27031ffdc69d82cd7.png

 //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

性能问题

  • 值类型在栈中实现

  • 引用类型

01bcdf1405dd90d089f05d83519f105e.png

 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

  • extendssuper
//父类
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的使用以及对函数的封装,以及将集成函数的部分结构抽离成可复用的函数,以及学会了原型和原型链的使用和区别。