JavaScript基础——类型系统

一、变量没有声明类型,不代表没有类型

JavaScript 是一个弱类型的语言,es6 以前 声明变量的关键词 只有一个 var ,也没有类型声明,所以 很多人都说 js 没有类型,只是它的类型是隐式的,根据所赋值的类型而定。

二、类型系统

1.系统一(js本身提供的):JavaScript 基本数据类型

值类型 引用类型
undefined
number
string
boolean
symbol(ES6新加入)
function
object

2.系统二:ECMA 语言类型

Undefined、Null、Number、String、Boolean、Symbol、Object

3.两者的不同

① js本身类型 全部采用字母小写,ECMA 语言类型 首字母大写
② ECMA 将 Null 作为 单独类型(根据传统语言而定),js本身类型 Null 是 特殊的 object 类型
③ ECMA 没有将 function 作为 基本类型,js本身类型 function 是一等公民,与其他基本数据类型 同等级

三、声明方式

js迄今为止有三种关键词来声明变量:var、let 和 const,其中 let 和 const 是es6 提出的。

1.var

var 主要是 es6 之前声明变量的关键词。 var 声明的变量 可以在后续重复声明,也可以覆盖
例如:

1
2
3
4
5
var a = 1;
a = 2;
console.log(a) // 2
var a = "hello,world"
console.log(a) // hello,world

2.let

与 var 不同的是, let 声明的变量,值可覆盖, 不可重复 声明

1
2
3
4
5
let a = 1;
a = 2;
console.log(a) // 2
let a = "hello,world";
console.log(a) // throw error

3.const

const 一般 用于声明 常量,需要注意一点的是, const 声明的 引用类型 值可改变,引用不可变。

4.隐式声明

在 es5 及 以前 变量可不直接声明,直接赋值

1
2
a = 1;
console.log(a); // 1

在 es5 提供了一个关键词 “strict”,严格模式。

1
2
3
"strict"
a = 1;
console.log(a) // throw error

现在 提供的 执行环境和 es6 已经默认 为严格模式了

总结

时期 可重复声明 值可覆盖
var es5及以前
let es6
const es6
原创技术分享,您的支持将鼓励我继续创作