在 JavaScript 中变量用来存放脚本中的值。这是一个使用名称来检索和操作值的方式。如果能有效地使用变量,能有助于理解脚本所做的工作。
变量声明
尽管不是必须的,但在使用变量之前先进行声明是一种好的习惯。可以使用 var 语句来进行变量声明。只有当要在函数中声明一个局部变量时,才必须使用 var 语句。所谓局部变量就是那些只在函数内有效的变量。在其他任何时候,推荐方法是在使用之前先用 var 语句来声明变量。
下面是变量声明的代码示例:
var mim = "A man, a plan, a canal, Panama!"; // mim 中存储的值是 string 类型。
// 引号中的这句话就是赋给 mim 的值,为字符串文字。
var ror = 3; // ror 中存储的值为 numeric 类型。
var nen = true; // nen 中存储的值为 Boolean 类型。
var fif = 2.718281828 // fif 中存储的值为 numeric 类型。
变量命名
JavaScript 是一种区分大小写的语言,因此将一个变量命名为 myCounter 和将其命名为 mYCounter 是不一样的。 另外,变量的名称其长度可以任意,但必须遵循若干规则:
第一个字符必须是一个字母(大小写均可)、或一个下划线(_)或一个美元符 ($)。
后续的字符可以是字母、数字、下划线或美元符。
变量名称不能是 保留字。
合法的变量名称示例:
_pagecount
Part9
Number_Items
一些无效的变量名称:
99Balloons // 以数字开头。
Smith&Wesson // & 对变量名而言不是一个合法的字符。
如果要声明一个变量并进行初始化,但又不指定任何特殊值,可以将其指定为一个专用值 null。
var zaz = null;
var notalot = 3 * zaz; // 此时 notalot 为 0。
如果声明了一个变量但没有对其赋值,该变量存在,且为 undefined 类型。
var godot;
var waitingFor = 1 * godot; // 由于 godot 为 undefined 类型,因此 waitingFor 的值为 NaN。
如果直接对变量赋值,就隐式地声明了一个变量(即不使用 var)。不过,不能在根本没有声明的情况下就使用一个变量。这样做将导致运行时产生错误。
lel = ""; // 变量 lel 已隐式声明。
var aMess = vyv + zez; // 产生一个错误,因为 vyv 和 zez 不存在。
强制转换
由于 JavaScript 是一种自由类型的语言,JavaScript 中的变量在技术上没有固定的类型。不过,它们具有与其包含的值的类型等价的类型。在某些环境下可能将变量的自动转换(或强制转换)或数据的一部分强制为别的类型。Number 类型易于被包括在字符串中,但字符串不能直接包含到数值中,为此提供了显式的转换函数 parseInt() 和 parseFloat()。
var theFrom = 1;
var theTo = 10;
var doWhat = "Count from ";
doWhat += theFrom + " to " + theTo + ".";
执行该代码后,doWhat 变量的值为 "Count from 1 to 10." 其中的数字数据被强制为字符串格式。
var nowWhat = 0;
nowWhat += 1 + "10"; // 在本例中,由于 "10" 是一个字符串,
// "+=" 运算符其连接作用。
执行该代码后,nowWhat 变量的值为 "0110"。执行下述步骤可获得该结果:
查看 1 和 "10" 的类型。"10" 为一个字符串,1 为数值类型,因此该数被强制为一个字符串。
由于 + 运算符两边的值都是字符串,因此执行字符串连接操作。其结果为 "110"
查看 += 两边的值的类型。 nowWhat 包含一个数,而 "110" 是字符串,因此将数转换为一个字符串。
由于现在 += 运算符两边都是字符串,因此执行字符串连接操作。其结果为"0110"。
将结果存放到 nowWhat。
var nowThen = 0;
nowThen += 1 + parseInt("10"); // 在本例中 "+=" 执行加法。
执行该代码后,nowThen 变量包含整数 11。