javascript概述

javascript语言特性:动态语言,动态类型,解释执行

1. 数据类型

原始类型:boolean、number、string、undefined、null

引用类型:object和(es6新增类型)symbol、bigint

注:引用类型变量里存储的是指针

2. 执行环境和作用域

js函数执行环境是一个对象,此对象包含了这个函数中声明的变量或函数,函数的执行环境串联起来组成了类似c语言中的调用堆栈。

理解执行环境,也便理解变量作用域,也就明白所谓变量或者函数提升。

在浏览器中,最外层的执行环境就是windows对象

3. new和this

this是动态变化的,始终指向调用此函数的对象

new先创建一个空对象,然后在空对象上调用构造函数

function test() {
   console.log(this);
}
var t2 = new test();
t2.aa = 3;
test();

调用test(),在全局对象上,所以this指向windows对象

而使用new test(),在新创建的t2对象,所以this指向t2对象

4. 构造函数,原型对象,实例的关系

通过new 调用的函数就是构造函数,如果没有通过new操作符来调用的,就是普通函数

原型对象和实例的关系如图,此图来自于JavaScript高级编程

Person是定义的函数对象,默认有一个原型对象,所有通过new Person构造的对象实例内部也有原型对象,共享Person函数的原型对象。

5. 两个操作符

typeof操作符,区别原生类型或者Object类型,但如果想具体分辨是Array还是Number等引用类型,则需要instanceof操作符。

instanceof原理:

function _instanceof(L, R) { //L为instanceof左表达式,R为右表达式
  let Ro = R.prototype //原型
  L = L.__proto__ //隐式原型
  while (true) {
    if (L === null) { //当到达L原型链顶端还未匹配,返回false
      return false
    }
    if (L === Ro) { //全等时,返回true
      return true
    }
    L = L.__proto__
  }
}
原文地址:https://www.cnblogs.com/zhaiyunyun/p/12050417.html