变量
- js是动态类型的语言,变量的类型会在解释的时候确定。
- 定义变量的时候不需要指定变量的类型 全部使用var/let/const
除非特殊情况全部用let
let age = 10;
let name ='张三';
let win =true;
let getName = function(){}
let arrNum =[];
let obj = {};
- var会存在变量提升的问题。变量提升:变量没有定义就能够被使用,在定义之前可以使用变量。
console.log(age); //age在定义之前被使用,输出undefined
var age = 100;
console.log(age); //输出100
console.log(name); //报错:Uncaught ReferenceError: Cannot access 'name' before initialization
let name ='张三';
console.log(name);
- var:函数作用域:会导致块内的局部变量被泄漏出来。
if(true){
let a = 100;
var b = 1000;
}
console.log(a); //报错:a is not defined
console.log(b); //输出1000,即局部变量B被泄露
- let:块作用域(括号括起来的代码块) : 会存在暂时性死区(用let定义出来的变量被绑定在这个块内)
let a = 1;
if (true) {
//a被绑定在这个块内,定义以后才能使用,定义前使用会出错。
console.log(a); //报错:Cannot access 'a' before initialization
let a = 100;
}
5、typeof:用于确定变量类型
console.log(typeof(age));
console.log(typeof name);
console.log(typeof win);
console.log(typeof getName);
console.log(typeof arrNum,typeof obj);
console.log(null);
console.log(undefined);