【Javascript】【数据类型】

127 阅读2分钟

1.变量类型

1.1 基本数据类型有哪些?

number,string,boolean,undefined,null,symbol,bigint

1.2 基本数据和引用类型的区别?

基本数据保存在栈内存中,引用数据类型保存在堆内存中,栈内存中保存了指针的引用。

1.3 数据类型的检测有哪些方法

  • 1.typeof:基本数据类型中除了 null 均可以准确检测,还可以检测 function
typeof 'str' // "string"
typeof false // "boolean"
typeof 1 // "number"
typeof null // "object"
typeof undefined //"undefined"
typeof Symbol(1) //"symbol"
typeof 1n //"bigint"
typeof {} // "object"
typeof [] // "object"
typeof (() => {}) //"function"

tyoeof 的原理:不同的对象在底层都变现为二进制,在 JavaScript 中二进制的前三位用来存储变量的类型信息: 000 对象 | 001 整数 | 010 浮点数 | 100 字符串 | 110 布尔 有两个值比较特殊: null:对应 NULL 指针,一般全是零 undefined:用-(-2^30)表示

  • 2.instanceof:instanceof 运算符用来测试一个对象在其原型链中是否存在一个构造函数的 prototype 属性 语法:object instanceof constructor
function Car(name, year) {
  this.name = name
  this.year = year
}
const auto = new Car('Honda', 2020)
auto instanceof Car // true
// 等价于下面的表达式:
Car.prototype.isPrototypeOf(auto) //true
// 手写instanceof
function instance_of(L, R) {
  let R_P = R.prototype
  let L_p = L.__proto__
  while (true) {
    if (L_p === null) {
      return false
    }
    if (L_p === R_P) {
      return true
    }
    L_p = L_p.__proto__
  }
}
  • 3.Object.prototype.toString() @TODO

2.变量声明

1.变量声明的几种方式

var let const

2.var let const 的区别

  • 1.let 和 const 必须先声明再使用,var 可以先使用再定义;
console.log(a) // undefined
var a = 9
console.log(a) // 9

console.log(b) //Uncaught ReferenceError: b is not defined
let b = 9
console.log(b)
  • 2.let 和 const 都是块级作用域,var 是函数作用域
function getAge() {
  for (let i = 0; i < 5; i++) {
    var age = 20
  }
  console.log(i) //i is not defined
  console.log(age) // 20
  for (var j = 0; j < 5; j++) {
    let age2 = 22
  }
  console.log(j) //5
  console.log(age2) //age2 is not defined
}
  • 3.var 定义的变量会挂载到 this 上,let 和 const 不会
{
  var a = 100
  console.log(this.a) // 100
  let b = 99
  console.log(this.b) //undefined
}
  • 4.let 不允许重复声明,var 可以