目录
一,变量声明,undefined
JS中,变量通常通过var声明,类型是动态类型。
如果只声明不初始化,那么初始值就是undefined这个特殊的值。
和C语言一样,变量可以声明的同时进行初始化。
非严格模式下,var还可以省略掉,即默认的声明方式是var而不是let
二,typeof 运算符
typeof可以给出一个变量的类型
如果是undefined,类型就是undefined
如果变量不存在,类型也是undefined
三,运算法则
JS的常规运算和C语言一样,但是JS的运算还包括了动态类型推导。
<p id="demo"></p>
<script>
x = "8" + 3 + 5;
document.getElementById("demo").innerHTML = x;
</script>
结果是835
<p id="demo"></p>
<script>
var x = 3 + 5 + "8"
document.getElementById("demo").innerHTML = x;
</script>
结果是88
四,var、作用域
通常用var声明变量。
在函数外声明的变量有全局作用域,在函数内声明的变量有局部作用域(函数作用域)。
var 可以多次声明变量
<p id="demo"></p>
<script>
var carName = "porsche";
var carName;
document.getElementById("demo").innerHTML = carName;
</script>
多次声明并初始化也是可以的
<p id="demo"></p>
<script>
var x = 2;
// 此时 x 是 2
var x = 3;
// 此时 x 是 3
document.getElementById("demo").innerHTML = x;
</script>
五,let
使用let声明的变量,具有块作用域。
和var一样,可以先声明再初始化,也可以声明并初始化
<p id="demo"></p>
<script>
let carName
carName = 123
document.getElementById("demo").innerHTML = carName;
</script>
或者
<p id="demo"></p>
<script>
let carName = 123
document.getElementById("demo").innerHTML = carName;
</script>
六,重复声明
在相同的块中,先后2次声明一个变量(无论有没有初始化),只能先var再var,
另外三种都不行(先var再let,先let再let,先let再var)
七,变量提升 Hoisting
通过 var 声明的变量会提升到顶端,也就是说可以先使用再声明。
let声明的变量不能提升。