当前位置: 首页 > news >正文

JavaScript 基础特性

一、变量特性

1.1 变量提升

console.log(temp); // undefined(变量提升但未初始化)
var temp = 'hello';
  • 现象var声明的变量会提升至作用域顶部,但赋值不提升

  • 建议:改用 let/const 避免变量提升问题

1.2 变量泄露

for (var i = 0; i < 5; i++) { /*...*/ }
console.log(i); // 5(var无块级作用域)
  • 问题var在循环中泄露变量到外部作用域

  • 解决方案:使用 let 声明循环变量


二、数据结构 - Map( 核心特性)

const map = new Map();
map.set(Symbol(), '唯一键值'); // 支持任意类型键
map.forEach((v,k) => console.log(k, v)); // 迭代方法
  • 优势:相比Object,支持对象/Symbol作为键、维护插入顺序、专用迭代方法

  • 常用APIkeys()/values()/entries()/size


三、对象特性

3.1 动态属性名

let dynamicKey = 'role';
let obj = {
  [dynamicKey]: 'Admin', // ES6计算属性名
  [Symbol('id')]: 123    // Symbol作为唯一键
};
3.2 Symbol特性

const sym1 = Symbol('desc');
const sym2 = Symbol('desc');
console.log(sym1 === sym2); // false(唯一性)

四、函数进阶

4.1 参数处理

// 默认参数(注意参数顺序)
function sum(x=0, y=x) { /*...*/ }

// Rest参数(必须最后参数)
function log(...args) { 
  args.forEach(arg => console.log(arg));
}
4.2 高阶函数

// 函数作为返回值(工厂模式)
function createMultiplier(n) {
  return (x) => x * n;
}
const triple = createMultiplier(3);
4.3 闭包实践

function counter() {
  let count = 0;
  return {
    inc: () => ++count,
    get: () => count
  };
}
const c = counter();
c.inc(); // 1(保持状态私有)

五、类与继承

  类基础:

class Animal {
  constructor(name) {
    this.name = name;
  }

  // 实例方法
  speak() {
    console.log(`${this.name} makes noise`);
  }

  // 静态方法
  static info() {
    return 'Animal Class';
  }
}

class Dog extends Animal {
  constructor(name, breed) {
    super(name);
    this.breed = breed;
  }

  speak() {
    super.speak();
    console.log('Woof!');
  }
}

六、事件系统(Node.js)


const EventEmitter = require('events');
class MyEmitter extends EventEmitter {}

const emitter = new MyEmitter();
emitter.on('event', (a, b) => {
  console.log(a + b); // 30
});
emitter.emit('event', 10, 20);

七、模板字符串高级用法


// 标签模板
function highlight(strings, ...values) {
  return strings.reduce((acc, str, i) => 
    `${acc}${str}<mark>${values[i] || ''}</mark>`, '');
}

const price = 99;
const html = highlight`Price: ${price} USD`;
// 输出:Price: <mark>99</mark> USD

八、常见陷阱与最佳实践

    变量声明

  • 始终使用 let/const
  • 避免 var 的变量提升问题

  1. 相等判断

    
    0 == '0'   // true(隐式转换)
    0 === '0'  // false(严格判断)

  2. 箭头函数特性

    
    const obj = {
      value: 42,
      getValue: () => this.value // 箭头函数无自己的this
    };

  3. 深拷贝方案

    
    const deepCopy = JSON.parse(JSON.stringify(obj)); // 简易深拷贝


九、新特性展望(ES6+)

  1. 可选链操作符

    
    const street = user?.address?.street;

  2. 空值合并

    
    const input = null;
    const value = input ?? 'default';

  3. Promise & async/await

    
    async function fetchData() {
      try {
        const res = await fetch(url);
        return res.json();
      } catch (err) {
        console.error(err);
      }
    }

相关文章:

  • XAMPP 下载、部署及使用入门
  • [redis进阶一]redis的持久化(2)AOF篇章
  • 设计模式(结构型)-桥接模式
  • Keil创建自定义的STM32标准库工程
  • jetpack之lifecycle的原理分析
  • 4.13学习总结
  • rag相关的技术
  • CSS 列表样式学习笔记
  • Spring Security 权限配置详解
  • 【5G-A学习】ISAC通信感知一体化学习小记
  • Elasticsearch搜索引擎 3(DSL)
  • 2025.4.7-2025.4.13文献阅读
  • 「Flutter」Flutter集成Google Ads广告
  • WXJ196微机小电流接地选线装置使用简单方便无需维护
  • 路由策略/策略路由之route-policy
  • 水下塑料垃圾识别分割数据集labelme格式2703张6类别
  • Redis实现签到功能
  • SSM智能排课系统
  • SpringBoot 自定义输出控制台图标
  • ANP协议深度解析:智能体网络协议的演进与革新
  • 官方通报汕头违建豪宅“英之园”将强拆:对有关人员严肃追责问责
  • 上海一保租房社区亮相,首批546套房源可拎包入住
  • 昆明公布3起经济犯罪案例:一人持有820余万假美元被判刑十年
  • 俄外交部:俄乌伊斯坦布尔谈判改在当地时间15日下午举行
  • 第1现场 | 美国称将取消制裁,对叙利亚意味着什么
  • 2025年中国网络文明大会将于6月10日在安徽合肥举办