| typeof | 结果 |
|---|---|
| {} | object |
| [] | object |
| null | object |
| undefined | undefined |
| NaN | number |
| 0 | number |
| true | boolean |
| ‘’ | string |
let与var与const
var的特点
1、var的作用域
var 声明的作用域是全局的或函数/局部的。
当 var 变量在函数外部声明时,作用域是全局的。这意味着在函数体外用 var 声明的任何变量都可以在整个窗口中使用。
var 在函数中声明时,它的作用域是在函数体内。这意味着它只能在该函数中被访问。
2、var 变量可以重新声明和更新
3、var的提升
提升(hoisting)是一种 JavaScript 机制,其中变量和函数声明在代码执行之前被移动到其作用域的顶部。
let的特点
1、let是块级作用域
块是由 {} 界定的代码块。一个块存在于花括号中。花括号内的任何内容都是一个块。
因此,在带有 let 的块中声明的变量只能在该块中使用。
2、let可以更新但不能重新声明
就像 var 一样,使用 let 声明的变量可以在其作用域内更新。与 var 不同,let 变量不能在其作用域内重新声明。
3、let的提升
就像 var 一样,let 声明被提升到顶部。与初始化为 undefined 的 var 不同,let 关键字未初始化。所以如果你在声明之前尝试使用 let 变量,你会得到一个 Reference Error。
const的特点
1、const 声明是块作用域
与 let 声明一样,const 声明只能在它们声明的块内访问。
2、const 不能更新或重新声明
这意味着用 const 声明的变量的值在其作用域内保持不变。它不能被更新或重新声明。
3、const 的提升
就像 let 一样,const 声明被提升到顶部但没有被初始化。
区别
var声明是全局作用域或函数作用域,而let和const是块作用域。var变量可以在其作用域内更新和重新声明;let变量可以更新但不能重新声明;const变量既不能更新也不能重新声明。- 它们都被提升到了作用域的顶部。但是,
var变量是用undefined初始化的,而let和const变量不会被初始化。 var和let可以在不初始化的情况下声明,而const必须在声明时初始化。
类型转换
理解弱类型语言的特征,掌握显式类型转换的方法
在 JavaScript 中数据被分成了不同的类型,如数值、字符串、布尔值、undefined,在实际编程的过程中,不同数据类型之间存在着转换的关系。
隐式转换
某些运算符被执行时,系统内部自动将数据类型进行转换,这种转换称为隐式转换。
- +号两边只要有一个是字符串,都会把另外一个转成字符串
- 除了+以外的算术运算符,比如 - * / 等都会把数据转成数字类型。
- +号作为正号解析可以转换成数字型
- 任何数据和字符串相加结果都是字符串
- 有字符串的加法“”+1,结果是“1”
- 减法-(像大多数数学运算一样)只能用于数字,它会使空字符串””转换为0
- null经过数字转换之后会变为0
- undefined经过数字转换之后会变为NaN
1 | <!DOCTYPE html> |
注:数据类型的隐式转换是 JavaScript 的特征,后续学习中还会遇到,目前先需要理解什么是隐式转换。
补充介绍模板字符串的拼接的使用
显式转换
编写程序时过度依靠系统内部的隐式转换是不严谨的,因为隐式转换规律并不清晰,大多是靠经验总结的规律。为了避免因隐式转换带来的问题,通常根逻辑需要对数据进行显示转换。
转为Number
1、通过 Number 显示转换成数值类型,当转换失败时结果为 NaN(Not a Number)即不是一个数字。
1 | <!DOCTYPE html> |
如果字符串内容里有非数字,转换失败时结果为 NaN(Not a Number)即不是一个数字
NaN也是number类型的数据,代表非数字
特殊转换:
| Number转换 | 结果 |
|---|---|
| Number({}) | NaN |
| Number([]) | 0 |
| Number(‘’) | 0 |
| Number(null) | 0 |
| Number(undefined) | undefined |
| Number(NaN) | NAN |
| Number(false) | 0 |
| Number(true) | 1 |
2、parseInt(数据) 只保留整数,数字只能在字符串开头,否则NaN。
3、parseFloat(数据) 可以保留小数,数字只能在字符串开头,否则NaN。
转换为字符型
1 | String(数据) |
1 | 变量.toString(进制) |
1 | 任意数据类型 + "" |
转换为Boolean值
‘’、0、undefined、null、false、NaN转换为布尔值后都是false,其余则为true


Null和Undefined
1 | <body> |
null 和 undefined 区别:
undefined 表示没有赋值
null 表示赋值了,但是内容为空
null 开发中的使用场景:
官方解释:把 null 作为尚未创建的对象
大白话: 将来有个变量里面存放的是一个对象,但是对象还没创建好,可以先给个null