JavaScript(一)声明和变量的使用
变量的声明
使用var关键字声明变量;
JavaScript是一种无类型的语言,无类型意味着用户不必显示地声明变量的数据类型,JavaScript将根据需要自动进行数据类型转换。
1 //基本规则
2 var 变量名;
3
4 //声明一个名firstName的变量
5 var firstName;
6
7 //一条语句声明多个变量,用逗号分割
8 var firstName,middleName,lastName;
9
10 //声明的同时可以赋值
11 var firstName="Mick";
12 var firstName="Mick",middleName="J.",lastName="BL";
注意:JavaScript变量是区分大小写的。
<html>
<head>
<title>JS区分大小写</title>
<script type="text/javascript">
/**
*区分大小写
*/
function checkJSDiffCase(){
var USERNAME = "大写用户名";
var username = "小写用户名";
alert(USERNAME);
}
</script>
</head>
<body onload="checkJSDiffCase();">
</body>
</html>
JavaScript标识符的命名规范
- 第一个字符必须为字母、下划线(_)或者美元符号($);
- 其他字符可以是字母、下划线(_)、美元符号($)、数字,最好不要有其他字符,虽然可以使用中文,但不推荐这么做;
- 变量名不能是关键字或逻辑常量(true、false、null或undefined);
- 变量名在其作用范围必须是唯一的。
变量的数据类型
简单数据类型
简单数据类型是构成数据的基本元素,也被成为原始数据类型。
数据类型 | 取值范围 |
Boolean | true或false |
Number | 双精度浮点型 |
String | 表示一个字符序列,一般用双引号或者单引号包围/除了内存限制外,长度没有限制。 |
Undefined |
Undefined数据类型仅有一个值,与类型名相同,即undefined(注意区分大小写)。当 定义了一个变量而未为该变量赋值时,该变量的值是undefined。 |
Null |
Null数据类型仅有一个值,与类型名相同,即null(注意区分大小写)。当一个用于引用某个 对象的变量不再使用时,就可以为该变量赋值为null,从而该变量就不再引用那个对象了。 |
Boolean会在适当时将值true和false转换成1和0。
1 <html>
2 <head>
3 <title>JS中Boolean类型的值</title>
4 <script type="text/javascript">
5 /**
6 *会在适当的时候转换成1和0
7 */
8 function checkBooleanValue(){
9 var isLoad = true;
10 if(isLoad == 1){
11 alert("数据已经加载完毕!");
12 }
13 }
14 </script>
15 </head>
16 <body onload="checkBooleanValue();">
17 </body>
18 </html>
转义字符——反斜杠加上指定的符号。
转义序列 | 字符 |
---|---|
\b | 退格 |
\f | 走纸换页 |
\n | 换行 |
\r | 回车 |
\t | 横向跳格 (Ctrl-I) |
\' | 单引号 |
\" | 双引号 |
\\ | 反斜杠 |
浮点值即带有小数点的数字,浮点数字都是十进制的,如果是整数,那么数字可以以十进制、八进制和十六进制来表示。八进制整数用一个前导0指明;十六进制整数用0x指明(x大小写都可以,尽量使用小写x以实现最大的兼容性)——八进制数和十六进制可以是负数,但不能是小数。
数字常量:Infinity表示无穷大。NaN表示非数字,一个变量定以后未赋值而进行数学运算,就会返回NaN。
复杂数据类型
Array数据类型
在JavaScript数组中的元素的数据类型很自由,可以混合各种数据类型,甚至是混合复杂的数据类型,可以嵌套另一个数组。
Object数据类型
//创建一个名为user的新对象
var user = new Object();
user.name = "用户名称";
user.password = "用户密码";
自定义常量和内建常量
使用const关键字自定义常量,并给它们赋原义值。
<html>
<head>
<title>JS中Const声明不可改变的变量</title>
<script type="text/javascript">
/**
*会在适当的时候转换成1和0
*/
function checkConst(){
const CON_NUM = 1;
CON_NUM = 2;
alert(CON_NUM);
}
</script>
</head>
<body onload="checkConst();">
</body>
</html>
null常量和undefined常量
1 var ob = new Object();
2 ob.message;
3 alert(ob.message == null);//返回null
4
5 var ob = new Object();
6 alert(ob.sex);//返回undefined
在程序中使用变量
变量值中包含有引号(引号或单引号),就必须使用转义符(\)。如果包含交替包含的话,就无需转义符了。
1 //temp1的值是this is 'js'
2 var temp1 = "this is 'js'!";
3
4 //temp2的值是this is "js"
5 var temp2 = 'this is "js"!';
如果定义了JavaScript变量,没有赋值,那么运行环境会为其指定一个默认值——undefined。
变量的传值和传址
简单数据类型(例如Number,String)按值传递。复杂类型按址传递。
堆(heap)用于为复杂数据类型分配空间,例如数组对象、Object对象。它是在运行时动态分配内存的,因此存取速度较慢。
栈(stack)中主要存放一些基本类型的变量和对象的引用。其优势是存取速度比堆要快,并且栈内的数据可以共享。但缺点是存在栈中的数据大小与生存期必须是确定的,缺乏灵活性。
栈有一个重要的特殊性,就是存在栈中的数据可以共享。
易错内容
在堆和栈的使用问题上,最容易犯错的是String类型:
var str = new String("abc");//堆中
var str = "abc";//栈中
第一种是用new关键字来新建String对象,对象会存放与堆中,每调用一次就会创建一个新的对象;
第二种是在栈中,栈中存放值"abc"和对值的引用。
//易错栈堆数据存储
var s1 = "abc";
var s2 = "abc";
alert(s1 == s2); //返回true
alert(s1 === s2); //返回true,地址相同
var s1 = new String("abc");
var s2 = new String("abc");
alert(s1 == s2); //返回false
alert(s1 === s2); //返回false
var s1 = new String("abc");
var s2 = "abc";
alert(s1 == s2); //返回true
alert(s1 === s2); //返回false