深入浅出 JavaScript 基础:从变量声明到对象系统全解析

131 阅读2分钟

JavaScript 基础:类型与对象深度解析

一、变量声明机制

1. var 的特性

  • 函数作用域:仅在声明函数内部有效
  • 变量提升:声明会被提升到作用域顶部,但赋值不会
  • 重复声明:允许相同作用域内多次声明
  • 全局污染风险:全局声明会成为 window 对象属性
console.log(x); // undefined(变量提升)
var x = 10;
​
function test() {
  var y = 20;
}
console.log(y); // 报错(函数作用域限制)

2. let/const 的现代特性

  • 块级作用域:仅在 {} 范围内有效
  • 暂时性死区:在声明前访问会报错
  • 无变量提升:声明前访问会直接报错
  • const 不可变性:不能重新赋值整个变量(但可修改对象属性)
if (true) {
  let y = 20;
  const PI = 3.14;
  PI = 3.15; // TypeError
}
console.log(y); // 报错(块级作用域限制)

3. 变量声明最佳实践

  • 使用 let 作为默认变量声明方式
  • 使用 const 声明不可变的常量
  • 避免使用 var(除非需要兼容IE11)

二、数据类型系统

1. 基本类型(Primitive Types)

  • String:不可变值类型
  • Number:包含整数、浮点数、NaN、Infinity
  • Boolean:true/false
  • Undefined:未赋值状态
  • Null:空对象指针
let str = 'Hello'; // String
let num = 42;      // Number
let isTrue = true; // Boolean
let nothing = null; // Null
let undef;         // Undefined

2. 引用类型(Reference Types)

  • Object:基础数据容器
  • Array:有序数据集合
  • Function:可执行代码块
let obj = { name: 'Alice' }; // Object
let arr = [1, 2, 3];         // Array
let func = () => console.log('Arrow'); // Function

3. 类型转换陷阱

console.log(1 + '2');   // "12"(隐式转换)
console.log(1 * '2');   // 2(数值转换)
console.log(Boolean(0)); // false

三、对象系统详解

1. 动态属性特性

const person = { name: 'Bob' };
person.age = 25;       // 动态添加属性
delete person.age;     // 动态删除属性

2. 原型链机制

// 原始值通过包装对象调用方法
"hello".toUpperCase(); // 等价于 new String("hello").toUpperCase()

3. 接口模拟实现

// 接口定义(通过约定实现)
const Animal = {
  speak: function() {
    console.log("Some sound");
  }
};
​
// 接口实现
const Dog = {
  speak: function() {
    console.log("Woof!");
  }
};
​
Dog.speak(); // 接口调用

四、常见误区与解决方案

1. const 可变性误解

// 错误示例(会报错):
const PI = 3.14;
PI = 3.15; // TypeError
​
// 正确使用:
const obj = { value: 42 };
obj.value = 100; // 允许修改属性

2. 块级作用域陷阱

for (var i = 0; i < 3; i++) {
  setTimeout(() => console.log(i), 100); 
}
// 输出:3,3,3(var作用域问题)for (let j = 0; j < 3; j++) {
  setTimeout(() => console.log(j), 100);
}
// 输出:0,1,2(let块级作用域)

结语:掌握这些基础概念是成为合格JavaScript开发者的第一步。建议通过实际项目练习巩固理解,推荐配合MDN官方文档学习最新规范。