var关键字:定义变量同时可以进行赋值
var message="hello" message = 10
可以改变保存的值,也可以改变值的类型,但是不推荐这样写。
- var声明的变量会成为包含它的函数的局部变量。
function test(){ var message = "hello"; } test(); console.log(message);//出错
- var声明提升:变量会自动提升到函数作用域顶部,函数作用域。
function test(){ console.log(message); var message = "hello"; } test();//undefined //等价于以下代码 function test(){ var message; console.log(message); message = "hello" } test();
let关键字:定义变量同时可以赋值。
let message = "hello"
- let不允许同一个块作用域中出现冗余声明
let message; let message;//标识符已经声明过了
- let存在暂时性死区即不存在变量提升
console.log(message);//ReferenceError:message没有定义 let message = "hello";
- let在全局作用域中声明的变量不会成为window对象的属性,var声明的变量则会。
var name = "Jason"; console,log(window.name);// 'Jason'let age = 42; console.log(age);// undefined
const关键字:声明变量并同时赋值且值不允许修改。
const message;//出错 const message = 'hello'; message = Jason';//TypeError:给常量赋值const name = 'Jason'; const name = 'Jason';//SyntaxError:不允许重复声明
数据类型:
- 基本数据类型:Undefined、Null、Boolean、Number、String、Symbol
- 复杂数据类型:Object