JavaScript进阶教程——包装对象、类型转换、作用域、闭包与模块化

包装对象

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

  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 = 10
  function innerFun() {
    console.log(n)
  }
  
  return innerFun
}

let fun = outerFun()

fun() // 10

闭包有什么用:封装

封装

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

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

   return add
}()

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

总结:

  1. 函数嵌套
  2. 内部函数可以使用外部函数的变量
  3. 闭包作为返回值,内部函数没有运行完成,外部函数中变量不会被销毁
  4. 可以用来实现模块化或封装代码
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

lalaxuan

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值