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

红宝书第七讲:this绑定与强制类型转换详解(小白指南)

红宝书第七讲:this绑定与强制类型转换详解(小白指南)

资料取自《JavaScript高级程序设计(第5版)》。
查看总目录:红宝书学习大纲


一、this绑定:对话中的主角是谁?

简单比喻
假设你在餐厅点菜,this相当于当前服务的服务员:

  • 不同场景服务员会变:包厢用餐 → 专属服务员(对象方法) / 大堂吧台 → 公共服务员(全局对象)

四大绑定规则

  1. 默认绑定 → 指向全局(餐厅大厅服务员)

    function 找服务员() {
      console.log(this === window);    // 非严格模式 ✅ 
    }
    找服务员(); // 默认指向window(浏览器中)
    
  2. 隐式绑定 → 指向调用者(包厢专属服务员)

    const 包厢 = {
      服务员名: "小王",
      点菜() {
        console.log(this.服务员名);  // ✅ 小王
      }
    };
    包厢.点菜(); 
    
  3. 显式绑定 → call/apply指定(指定服务员)

    function 点菜() { console.log(this.推荐菜); }
    const 今日推荐 = { 推荐菜: "红烧肉" };
    
    点菜.call(今日推荐);  // ✅ 红烧肉[^4]
    
  4. 箭头函数 → 绑定定义时的this(固定服务员)

    const 包厢2 = {
      服务员名: "小李",
      点菜: () => console.log(this.服务员名)  
    };
    包厢2.点菜();  // ❌ 输出undefined(箭头函数绑定全局this)[^4]
    

二、强制类型转换:自动变身的魔法

核心概念:JavaScript会自动转换变量类型以适应操作。

  1. 隐式转换(魔法自动触发)

    console.log(5 + "5");    // "55"(数字→字符串)[^2]
    console.log("5" == 5);   // true(字符串→数字比较)
    
  2. 显式转换(手动触发招式)

    const 输入 = "123";
    console.log(Number(输入));         // 123(数字)
    console.log(Boolean("非空字符串")); // true[^3]
    

高危陷阱示例 → 空字符串的意外转换:

if ("") {  
  // ❌ 空字符串转为false,永远不会执行
}
if (0) { // 同上 } 
// 正确做法:显式判断类型[^2]
if (typeof value !== "undefined") 

三、双重保险:严格模式下的限制

严格模式下("use strict"),部分危险行为被禁用:

  • this不再指向全局 → 未绑定时为undefined1
    function 测试() {
      "use strict";
      console.log(this);  // undefined(非严格模式指向window)
    }
    测试();
    

四、综合避坑指南

1. this绑定铁律

  • 用箭头函数固定作用域(需要时)
  • 明确用call/apply/bind指定对象

2. 类型转换安全规范

  • ===!==避免隐式转换2
    "5" === 5   // false(不进行类型转换)
    
  • 敏感操作前显式转换类型
    const 用户输入 = "123";
    const 数字 = Number(用户输入); // ✅ 手动转换
    

实战练习

// 任务1:让点击按钮显示它的文字(正确绑定this)
button.addEventListener('click', function() {
  console.log(this.innerText); // ✅ "点击我"
});

// 任务2:避免空值漏网
function 格式化价格(price) {
  price = Number(price || 0);  // 转换为数字,默认值0
  return `${price.toFixed(2)}`;
}

记住:明确指定this和类型,代码更可靠!


目录:总目录
上篇文章:红宝书第六讲:作用域链与闭包:厨房里的调味料架原理
下篇文章:红宝书第八讲:箭头函数与高阶函数:厨房工具与智能菜谱的对比


  1. 严格模式下this不再默认绑定全局对象,《JavaScript高级程序设计(第5版)》 附录C ↩︎

  2. 推荐使用严格相等符避免类型转换错误,《JavaScript高级程序设计(第5版)》 第3章 ↩︎

相关文章:

  • 51单片机程序变量作用域问题
  • 【Oracle资源损坏类故障】:详细了解坏块
  • PyTorch分布式训练中各节点如何通信
  • Redis 持久化机制
  • 汇编代码中嵌入回调函数的优化说明
  • Centos7快速在线安装MySQL8.0最新版本教程
  • MySQL WHERE 子句详解
  • 蓝桥杯嵌入式赛道复习笔记5(捕获信号发生器的PWM的波形)
  • word报告篇:python生成《蔬菜店销售数据分析报告》案例
  • Spring Boot整合Apache BookKeeper教程
  • 网络安全之前端学习(HTML篇)
  • Leetcode322-零钱兑换
  • 如何在 WordPress 中重新生成永久链接?
  • HarmonyOS next性能优化:多维度策略与实战案例
  • Linux C/C++编程——线程
  • C++动态库中的静态调用和动态调用,延迟加载
  • Flutter 学习之旅 之 flutter 使用 connectivity_plus 进行网路状态监听(断网/网络恢复事件监听)
  • Linux操作系统实验报告单(3)文本编辑器vi/vim
  • JAVA多线程中的单例模式
  • 防止重复点击方法总结-微信小程序
  • 泽连斯基称与特朗普通话讨论停火事宜
  • 绿城约13.93亿元竞得西安浐灞国际港港务片区地块,区内土地楼面单价首次冲破万元
  • 上海:下调个人住房公积金贷款利率
  • 8小时《大师与玛格丽特》:长度可以是特点,但不是价值标准
  • 关税风暴下,3G资本拟94亿美元私有化美国鞋履巨头斯凯奇,溢价30%
  • 德国新一届联邦政府宣誓就职