深入了解JavaScript中的基本变量类型
JavaScript中的基本变量
JavaScript 目前有 7 种基本类型,如下:
String
Number
Boolean
Null
Undefined
Object
Symbol
(ES6新增)
除了 Object
是复杂数据类型外,其它的 6 种是 JavaScript的基本数据类型。每个 JavaScript 类型都有一个对应的表示,如:
- 字符串
1 | var string = "Hello John"; |
- 数字
1 | var age = 33; |
JavaScript中“变量”的定义方式
此处变量二字加引号的原因是因为,部分定义的内容其实是不可变的,
immutable
.
在 JavaScript 中,可以使用 var
关键字将值存储在变量中,这是声明变量的最兼容方法:
1 | var greet = "Hello"; |
这里说的兼容,是因为在 ES6
中我们还有两个选择: let
和 const
。旧的浏览器可能不支持这些新的关键字,除非使用“转置器”,否则可能会遇到错误。在新的浏览器中,建议都 let
和 const
。主要有两个好处:
let
和const
都有自己的块作用域const
不能重新分配,也不能重新声明
通过以下的内容,可以看出,我对与let的理解其实就是一个加了作用域的
var
,其作用域是以代码块为namespace
的代码段,而const
的是更加严格的let
。
块作用域是指用 let
或 const
声明的变量与在封闭或外部块
中声明的相同变量名不重叠。例如:
1 |
|
这里的 name
似乎是重复的,但实际上是两个不同的变量在自己的作用域里。const
具有相同的行为:
1 | const name = "Foo"; |
var
的行为就与 let
和 const
不一样了。
1 | var name = "Foo"; |
而var
是可以重新生命的,就像上面的代码,name
在内部代码块中被重新声明了一次,而且同时被重新赋值了。
var
与const
不同的地方在于:
如果你尝试重新声明一个
const
,会得到"SyntaxError: Identifier has already been declared"
。如果将某个值重新赋值给同一个
const
,会得到"TypeError: Assignment to constant variable"
错误。
1 |
|
可变类型与不可变类型
上面所说的 “const 不能重新分配,也不能重新声明”
时,并不意味着const 是不可变的。
这是初学者都会遇到的问题。事实上,任何稍微复杂一点的JavaScript数据结构,如数组或对象,即使在分配给 const
时,它们的值或者属性值是可变的,不可变是指这些复杂对象的内存地址。
这里会涉及到一个引用类型概念,如果const
中保存的变量其下有应用类型的变量,则这些字内容是可以被修改的。
引用类型主要有以下几个类型:
Object
类型
Array
类型
Date
类型
RegExp
类型
Function
类型基本包装类型
Boolean
类型是布尔值对应的引用类型。要创建Boolean
对象,可以像下面这样调用Boolean
构造函数并传入true
或false
值.`Number` 是数字值对应的引用类型。要创建`Number`对象,可以在调用`Number`构造函数是向其中传递相应的数值。如下:1
2
let a = new Boolean(true)
`String`类型是字符串的对象包装类型,如下:
1 let n = new Number(10)
1 let s = new String('Foo')
- 内置对象
Global
对象
Math
对象
1 |
|
因为引用类型中存放的是变量的地址,所以,如果变量的地址不变的话,其内部的变化,不受const
类型的约束。
Function类型
Function类型主要由以下几种定义方式:
- 命名函数
1 | function sum(a, b) { |
- 匿名函数
1 |
|
- 对象方法
如果将Function
定义在对象中,则可以在Function
内部使用this
调用对象的内部属性。
1 | var widget = { |
- 对象方法简写(ES 6)
1 |
|
- IIFE(立即执行函数)
1 | var IIFE = (function () { |
箭头函数
- 命名箭头函数
1 | const arrow = () => console.log("Silly me"); |
- 匿名箭头函数
与常规匿名函数一样,也有匿名箭头函数。这里有一个作为回调传递给另一个函数
1 | const arr = [1, 2, 3]; |
- 对象方法
1 |
|
- IIFE 箭头函数
1 | (() => { |
深入了解JavaScript中的基本变量类型