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

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

作者: kovli | 来源:发表于2025-04-11 10:59 被阅读0次

红宝书第七讲: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不再指向全局 → 未绑定时为undefined[1]
    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章

相关文章

  • java基础(5)

    多态详解 一共有两种类型的强制类型转换: (1)向上类型转换(upcast):比如说将cat类型转换为Animal...

  • 面向对象多态

    1.条件:继承的情况下 向上转型(编译期静态绑定和运行期动态绑定) 自动类型转换 向下转型 强制类型转换 要...

  • 第三章 JavaScript中的数据间类型的转换

    数据的类型转换分为强制类型转换和非强制类型转换,强制类型转换也可以称为显示转换,非强制类型转换也可以称为隐式转换。...

  • js 实用小套路,你需要的开发小技巧

    强制类型转换 强制转换为Boolean 用 !! 强制转换为Number 用 + 强制转换为String 用 ""...

  • 前端知识点(10)

    强制类型转换 强制类型转换 - 指将一个数据类型强制转换为其他的数据类型 - 类型转换主要指,将其他的数据类型,转...

  • 十一、类型转换

    1、强制类型转换 C方式的强制类型转换 C方式强制类型转换存在的问题 过于粗暴:任意类型之间都可以进行转换,编译器...

  • 引用类型转换

    向上类型转换(自动类型转换),是小类型到大类型的转换向下类型转换(强制类型装换),是大类型到小类型的转换在强制类型...

  • C++指针和引用

    一、指针与强制类型转换 指针类型的强制转换,是指将指针所指的内容的类型由原先的类型转换为后面的类型 p和p1的值都...

  • 前端基础js篇

    1.强制类型转换和隐式类型转换 强制转换:parseInt()、parseFolat()、Number()、Str...

  • JavaScript的强制类型转换

    强制类型转换 将javascript的值从一种类型转换为另一种类型的值——>类型转换隐式类型转换——>强制类型转换...

网友评论

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

      本文链接:https://www.haomeiwen.com/subject/eypcbjtx.html