Javascript中的变量是松散类型(loose typing)或动态类型,可以根据不同的上下文保存不同的数据类型。在同一个应用程序中,相同的变量可以保存不同类型的数据。
变量名由字母、数字、下划线和$符号组成,不许以数字开头,不能是关键字。Javascript区分大小写。
变量名和函数名的首字母一般采用小写(区分类名),函数名以动名词形式表示。都遵循CamelCase命名法(即由多个单词组成的变量名中每个单词首字母大写)。
基本类型
三种最基本数据类型:字符串、数字以及布尔型。Javascript还提供了一些内建的对象,如String、Number和Boolean,拥有内建属性和方法。
一些容易引发混淆的地方:
当以对象的方式操作基本类型时,String对象会封装字符串基本类型,而Number和Boolean也同样会封装各自的基本类型。当在Javascript中创建了简单字符串变量并使用String对象的方法时,Javascript会隐式地通过String对象封装字符串基本类型,并且调用String对象的属性和方法,最后销毁该对象。
例如:var firstName = "Shelly";
var cappedName = firstName.toUpperCase();
document.write(cappedName);
字符串变量firstName调用toUpperCase方法时,Javascript会创建一个对象来封装这个字符串,然后调用toUpperCase方法,最后销毁这个临时对象。
如果希望以对象的方式操作字符串,那么最好的方式是创建一个对象。如果只是需要用一个简单的字符串来输出信息,或者保存字符串值,而不需要对象提供的所有功能,那么字符串基本类型将是更好的选择。
String数据类型
Javascript并未限定必须用单引号或双引号来表示字符串,唯一的规则是前后的符号必须匹配。
Javascript字符串中可以包含转义字符,
字符串中还可以使用Unicode字符串,表示方法是在\u后面加上4位的十六进制数值。
document.write("\u7231"); 输出“爱”字
字符串转换
例1:
var numValue = 35.00;
var string_value = "this is a number:"+numValue;
document.writeln(string_value);
这种情况数字变量numValue转换成字符串
例2:
var strValue1 = "4"+3+1;
var strValue2 = 4+3+"1";
document.writeln(strValue1); //输出431
document.writeln(strValue2); //输出71
这个例子说明,什么时候将数字转换成字符串,取决于Javascript脚本引擎在什么时候处理字符串。例如,如果字符串是所有数值的第一个,那么数字变量就会被当成字符串进行处理。
例3:
var firstResult = "35"-3;
var secondResult = 30/"3";
var thirdResult = "3"*3;
document.writeln(firstResult); //输出32
document.writeln(secondResult); //输出10
document.writeln(thirdResult); //输出9
使用其他操作符时,会将字符串转换为数字
以上例子说明隐式转换取决于操作符和变量的位置
与其依赖于隐式的数据类型转换,不如自己调用String的全局函数显示地执行字符串转换。
function convertToString(){
var newNumber = 34.56;
var newBoolean = true;
var nothing;
var newNull = null;
var strNumber = String(newNumber);
var strBoolean = String(newBoolean);
var strUndefined = String(nothing);
var strNull = String(newNull);
var strOutput="<p>"+strNumber+" "+strBoolean+" "+strUndefined+" "+strNull+"</p>";
document.writeln(strOutput);
var strOutput2 = String(document);
document.writeln(strOutput2);
}
浏览器显示为:
34.56 true undefined null
[object HTMLDocument]
IE浏览器显示为:
34.56 true undefined null
[object Document]
Boolean数据类型
Boolean(布尔)数据类型只有两种可能只:true和false。布尔值不需要用引号。
双重否定符“!!”可以用来显式(使用Boolean()函数将其他类型的值转换为布尔值)地将数字或字符串转换为布尔值。
Number数据类型
即浮点数,可以包括小数部分,也可以没有小数部分,也可以用指数形式(科学计数法)表示。
有两个特殊的数字:正无穷大和负无穷大,分别用Infinity和-Infinity表示。当Javascript数字溢出时就会返回无穷大。而当使用的数字比Javascript所能支持的最小数字还小时就用到负无穷大。
八进制以0开头,十六进制以0X开头。
parseInt(string,radix)函数只返回数字的整数部分,无论是字符串还是一个整数还是浮点数。Radix为可选,表示要解析的数字的基数。介于2~36之间,默认为10。
parseFloat()函数则会返回浮点型数值。
function convertToString(){
var sNum = "1.23e-2";
document.writeln("<p>"+parseFloat(sNum)+"</p>");
document.writeln("<p>"+parseInt(sNum)+"</p>");
var fValue = parseFloat("1.45 inch");
document.writeln("<p>"+fValue+"</p>");
var iValue = parseInt("-33.50");
document.writeln("<p>"+iValue+"</p>");
}
输出为:
0.0123
1
1.45
-33
第二个数值是调用parseInt函数转换得到的数字,因此在应用指数方式之前先截去了整数后面的部分。第三个数字转换,parseFloat函数会先从字符串中获取数字部分,直到遇到第一个非数字的部分为止。该例中,也就是“1.45”与“inch”之间的空格。接着将得到的字符串“1.45”转换成浮点数。
Null变量
已定义的,值为null的变量。
Undefined变量
已经声明但是还没有初始化。
已经声明并初始化的表达式的值为true,否则,为false。
与变量类型相关的数值:NaN
如果一个字符串或布尔值不能转换为数字,那么所返回的数值将是NaN。下面是一个来自w3school的例子:
<script type="text/javascript">
var test1="300"
var test2="Hello World!"
document.write(Number(test1)+ "<br />")
document.write(Number(test2)+ "<br />")
document.write(isNaN(test1)+ "<br />")
document.write(isNaN(test2))
</script>
输出:
300
NaN
false
true
常量
使用const关键字来创建Javascript常量
const CURRENT_MONTH = 3.5;
常量可以是任意值,不可以重新赋值。一般全部大写,可以是全局常量或局部常量,一般声明为全局。