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 可以