变量声明
在js程序中,使用一个变量之前应当先声明。使用关键字var来声明。
(ES6新增了let命令,用来声明局部变量,有兴趣的可以自己百度一下,后续也会单独说明var与let区别。此处只按照书本说明var。)
// 可以一个关键字声明一个,如果声明语句没有给变量指定初始值,它的初始值是undefined。
var i;
var sum;
// 也可以一个关键字声明多个
var a, b;
// 也可以在声明的同时,为变量赋初始值
var msg = "hello world";
var i = 0, j = 1, k = 2;
// for 和 for/in 循环中使用var
for(var i = 0; i < 10; i++) { console.log(i); }
var obj = { x:1, y:2 };
for(var i in obj) { console.log(i + " = " + obj[i]); }
以上写法都是合法的,但是开发过程中,一定要严格按照团队的编码规范来书写代码(规约这个事情,我已经写过很多次了,可见规约的重要性)。
注意:我们可以看到js在声明变量的时候,没有指定变量的数据类型,js变量可以是任意数据类型。
看下面代码,是完全合法的。
var i = 10;
i = "test";
console.log(i);
重复的声明和遗漏的声明
使用var语句重复声明变量是合法且无害的。
var str;
var str = "a";
var str = "b";
console.log(str); // b
如果你试图读取一个没有声明的变量的值时,会报错。
console.log(str1); // Uncaught ReferenceError: str1 is not defined
在ECMAScript 5严格模式下,给一个未声明的变量赋值也会报错,但是非严格模式下,给一个未声明变量赋值,js实际上会给全局创建一个同名属性,并且可以正确工作,这意味着你可以侥幸不声明全局变量,但是这个不好的习惯可能会造成很多bug,因此应该在使用变量的时候,确保变量声明过。
str1 = 1;
console.log(str1); // 1
// 变量str1 没有声明直接赋值,正常运行,但这个绝对不是好代码