JavaScript进阶教程——包装对象、类型转换、作用域、闭包与模块化
创始人
2024-03-29 14:17:21
0

文章目录

  • 包装对象
  • 类型转换
    • 显示转换
    • 隐式转换
  • 作用域
    • let与const的用法:
    • 作用域链
  • 闭包与模块化
    • 封装

包装对象

为什么原始类型可以使用方法和属性:

  1. toString()
  2. split()
  3. length属性

在这里插入图片描述
包装对象:

  1. new String()
  2. new Number()
  3. new Boolean()
let num = 123;
console.log(typeof num.toString());let str = "hello world";
console.log(str.split(""));
console.log(str.length); // new String(str)

原始类型调用方法或属性的时候,程序的后台会自动将他们转换成对应的包装对象。

转换后,立即销毁:
在这里插入图片描述

转换成包装对象,并成功执行方法后,包装对象会立即销毁,变量又重新回到原始类型的状态

在这里插入图片描述

总结:永远不要主动创建包装对象

创建包装对象的构造函数可以用来做类型转换:

  1. String()
  2. Number()
  3. Boolean()

类型转换

在开发项目的时候,我们经常会用到类型转换,例如:

DOM输入的字符串,我们希望实现数学运算,要转换成数值。

类型转换可以分成两类:

  1. 显示转换(强制转换) Number String Boolean
  2. 隐式转换(自动转换)

显示转换

  1. Number()
  2. String()
  3. Boolean()
  4. toString(): null和undefined不能调用toString方法实现类型转换
  5. parseInt()
  6. parseFloat()

在这里插入图片描述

在这里插入图片描述

Number、parseInt的区别,Number传的参数必须是纯数字,不能有字母,parseInt可以有,但是如果字母位于第一位,则返回NaN

隐式转换

  1. if语句
  2. while语句
  3. 逻辑与
  4. 逻辑或
  5. 逻辑非
  6. == : 使用===代替==,既可以避免歧义,也可以提升性能

各种数据类型是如何实现类型转换的呢:

  1. 数值类型只有0和NaN会转换成false
  2. null和undefined都会转换成false
  3. 空字符串会转换成false,其他为true
  4. 所有对象都会转换成true

在这里插入图片描述

在这里插入图片描述
在这里插入图片描述

在这里插入图片描述

逻辑与左侧的值转化为布尔值,如果为true,那么逻辑与表达式的返回值就是第二个值,如果左侧为false,那么返回值就是第一个值

在这里插入图片描述

逻辑或左侧的值转化为布尔值,如果为false,那么逻辑与表达式的返回值就是第二个值,如果左侧为true,那么返回值就是第一个值

作用域

  1. 函数外面能否使用函数内部定义的变量
  2. if语句或for语句外面能够使用语句内定义的变量

在这里插入图片描述在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

每一个变量都有自己的作用域:

  1. 全局变量
  2. 局部变量

let与const的用法:

  1. 抛弃var,永远使用let定义变量
  2. 通常引入外部模块,或是定义函数表达式,可以使用const定义常量
  3. let const有块级作用域

作用域链

在作用域中嵌套作用域时,就会形成一个作用域链,更底层的作用域可以访问上层及其更上层的变量,但是上层无法直接访问底层的变量。

闭包与模块化

什么是闭包:
简单一句话概括:函数嵌套,内部函数就叫做闭包。

/*1. 函数嵌套,内部函数就是闭包2. 内部函数没有执行完成,外部函数内存空间不会被销毁
*/
function outerFun() {let n = 10function innerFun() {console.log(n)}return innerFun
}let fun = outerFun()fun() // 10

闭包有什么用:封装

封装

将一个功能放到一个模块中

var a = (function () {var n = 10var m = 20function add() {console.log(n + m)}return add
}()

但是现在实际开发中我们会使用es6的语法来封装

总结:

  1. 函数嵌套
  2. 内部函数可以使用外部函数的变量
  3. 闭包作为返回值,内部函数没有运行完成,外部函数中变量不会被销毁
  4. 可以用来实现模块化或封装代码

相关内容

热门资讯

监控摄像头接入GB28181平... 流程简介将监控摄像头的视频在网站和APP中直播,要解决的几个问题是:1&...
Windows10添加群晖磁盘... 在使用群晖NAS时,我们需要通过本地映射的方式把NAS映射成本地的一块磁盘使用。 通过...
protocol buffer... 目录 目录 什么是protocol buffer 1.protobuf 1.1安装  1.2使用...
在Word、WPS中插入AxM... 引言 我最近需要写一些文章,在排版时发现AxMath插入的公式竟然会导致行间距异常&#...
Fluent中创建监测点 1 概述某些仿真问题,需要创建监测点,用于获取空间定点的数据࿰...
educoder数据结构与算法...                                                   ...
MySQL下载和安装(Wind... 前言:刚换了一台电脑,里面所有东西都需要重新配置,习惯了所...
MFC文件操作  MFC提供了一个文件操作的基类CFile,这个类提供了一个没有缓存的二进制格式的磁盘...
有效的括号 一、题目 给定一个只包括 '(',')','{','}'...
【Ctfer训练计划】——(三... 作者名:Demo不是emo  主页面链接:主页传送门 创作初心ÿ...