一.直接量(字面量)
在学习JavaScript变量之前,先认识一下直接量(字面量)
字面量:英语叫做literals,也做直接量。看见什么,它就是什么。
咱们先学习数字和字符串的字面量。剩余的字面量类型,之后在讲
1. 数字的字面量
数字的字面量,就是这个数字自己,并不需要任何的符号来界定这个数字。
例如:
数字8 就是数字8 不比表示其他值,这就是字面量
但是也需要注意, 数字也有进制问题,
1.1 整数
JavaScript中,数字的整数字面量可以有三种进制:
10进制:普通的数字就是十进制
8进制:如果以0、0o、0O开头数字字面量是八进制,八进制只包括数字0~7
16进制:如果以0x,0X开头数字字面量是十六进制。十六进制整数可以包含(0-9)和字母 a-f 或 A-F
1.1.1 八进制
<script type="text/javascript">
//以0开头,是八进制;显示的时候会以十进制显示
console.log(017); //15 //1*8+7=15
console.log(0o17); //15
console.log(0O17); //15
console.log(044); //4*8+4=36 ,显示36
console.log(010); //8
console.log(0o36); //30
console.log(0O36); //30
</script>
注意,八进制只能出现0~7这8中数字,如果表示不合法,那么JS将自动的认为你输入错了,从而用十进制进行显示:
console.log(080); //80
//以0开头,按理说是八进制,但是后面的数字错了,所以以十进制显示
但是以0o开头、0O开头的数字,如果后面写错了,控制台报错!
// 如果是0o开头的,后面的数字错了,对不起,不转为10进制了,控制台报错!
console.log(0o88); //报错
console.log(0O88); //报错
// 控制台报错
//Uncaught SyntaxError: Invalid or unexpected token
//语法错误
1.1.2 十六进制
// 十六进制:
console.log(0xff); //255
console.log(0x2b); //43
如果后面有错误的写法,那么控制台报错:
console.log(0x2g);
// 控制台报错
//Uncaught SyntaxError: Invalid or unexpected token
//语法错误
-
总结:认识下面字面量为什么进制的数字字面量
console.log(16); // 十进制 console.log(020); // 八进制 console.log(0o20); // 八进制 console.log(0O20); // 八进制 console.log(0x10); // 十六进制 console.log(-0xf); // 十六进制
1.2 浮点数(小数或指数)
小数的字面量也很简单,就是数学上的点。计算机世界中,小数称为“浮点数”。
指数就是:允许使用e来表示乘以10的几次幂:
console.log(3.1415); //3.1415
console.log(.35); //.35 如果整数位数是0,可以不写
console.log(5e5); //500000
console.log(5.2e5); //520000
console.log(1e-4); //0.0001
注意:
只有十进制有小数的字面量,八进制、十六进制没有小数的字面量。所以小数没有进制之分
那么有个问题,JavaScript里的数字到底最大能显示多大的数字
// 非常大的数字,无穷大
console.log(3e45645645645646);
// 非常小的数字,负无穷大
console.log(-3e45645645645646);
1.3 特殊字面量
1.3.1 Infinity 无穷大
试图输出一个非常大的数字:
// 非常大的数字,无穷大
console.log(3e45645645645646); //Infinity
至于多大的数字能生成无穷大,不同浏览器不一样,不要管。
可以是负的无穷大:
console.log(-5e31415926); //-Infinity
我们可以直接在控制台输出无穷大,注意大小写:
console.log(Infinity);
1.3.2 NaN
英语全名叫做not a number,不是一个数。
比较有意思的是,这个“不是一个数”他居然是一个数字字面量。
// 输出NaN
console.log(0/0); // NaN
1.4 总结一下,
数字字面量有整数字面量(十进制、16进制、八进制),
浮点数字面量(要记住e),
特殊字面量:Infinity,NaN
2. 字符串的字面量
字符串是一个术语,说白了就是我们人说的话。
2.1 字符串字面量的书写方式
字符串的字面量有限定符,就是必须用双引号、单引号包裹起来。字符串被限定在同种引号之间;也就是说,必须是成对单引号或成对双引号。
console.log("今天你好帅哦");
// 字符串用双引号包裹,或者单引号
console.log("今天天气很好");
console.log('今天天气很好');
不加引号是错误的
// 不能不加引号,这是错误的:
console.log(今天天气很好);
注意引号必须是同种引号,混用错误
console.log('嘻嘻");
如果一个数字,用引号引起来,那么就是字符串了:
console.log("兄弟,你中午吃了几碗饭?");
console.log("3");
正常情况下,引号内部可以有不同种的引号,比如双引号里面可以有单引号:
// 双引号中用单引号
console.log("你笑起来像'花儿'一样好看");
// 单引号中用双引号
console.log('你笑起来像"花儿"一样好看');
2.2 特殊字符
在字符串中可以使用一些特殊字符,他们有特定的含义
\n New line 换行符
\t Tab tab缩进
//转义字符
alert("你们\n啊\n怎么可以\n那么可爱呢");
这里\
反斜杠就是我们通常所说的转义符号, 可以将没有意义的字面n
转为有意义的换行,
同样换行符也可以将有意义的符号转为没有意义的不同字符
在使用字符串中可以使用转义字符,
' 单引号
\” 双引号
\ 反斜杠
// 使用反斜杠\转义字符
console.log("你笑起来像\"花儿\"一样好看");
二.变量
变量(Variables),和高中数学中的x、y、z很像,它们此时不是字母,而是代指一些值的符号。
它和直接量不同,直接量5,就是数字5;直接量”你好”就是字符串“你好”。
现在这个变量不一样了,你看见一个a,实际上它不是字母a,而是里面蕴含的不同的值。
1. 整体了解
<script type="text/javascript">
//定义一个变量
var a;
//赋值
a = 200;
//输出变量a
console.log(a);
// 这个语句将会引发错误,因为b没有进行定义
console.log(b);
</script>
我们使用var关键字来定义变量,所谓的关键字就是一些有特殊功能的单词,关键字后面要有空格。
var就是英语variables变量的缩写,表示定义一个变量。一旦你
var a;
你的电脑内存中,就会开辟一个空间,命名为a, 等待你给这个变量空间存放一定的值,
一旦变量声明后,就可以给变量赋值,
JS中给变量赋值用等号,等号右边的值赋给左边。
a = 200;
现在a变量的值就是200。所以我们输出
console.log(a);
控制台就会输出a变量的值,就是200
2. 变量必须先声明,在使用
使用一个变量,必须先进行一个var,才能使用。var这个过程可以叫做声明declaration,也可以叫做定义definition。叫声明一个变量,或定义一个变量.
如果变量未声明就直接使用,会怎么样呢,看下
console.log(n); //这个c没有被var过,所有会报错
因为n没有被声明,所以n现在不是一个变量,系统不认识这个n的。就会抛出引用错误。
console.log(n);
//Uncaught ReferenceError: n is not defined
//ReferenceError 引用错误
//n is not defined n未定义
3. 变量命名规则
变量的名字就是标识符(identifiers),任何标识符的命名都需要遵守一定的规则:
JS中标识符的定义规则,可先理解为变量的规则,以后我们还会接触到其他标识符
由字母、下划线(_)、美元($)符号、数字(0-9)组成
-
不能以数字开头
也就是说,一个标识符必须由字母、下划线、美元符号开头,后续可以有字母、下划线、美元符号、数字
-
严格区分大小写
所以A和a不是同一个变量
不要使用中文变量名
不能使用关键字和保留字
那么什么是关键字 和保留字呢
- 关键字=>js已经赋予特殊功能的单词
- 保留字=>js预订可能未来要使用的字
关键字:
break、else、new、var、 case、 finally 、 return、 void 、 catch 、for 、switch 、 while 、 continue、 function 、this 、 with 、default 、 if 、 throw 、 delete 、 in 、 try 、do 、 instranceof、 typeof
保留字:
abstract 、 enum 、int 、 short 、 boolean 、export 、interface、 static、 byte 、extends 、 long 、 super 、 char 、 final 、native 、synchronized 、 class 、float 、 package 、throws 、 const 、goto 、private 、transient 、 debugger 、 implements 、protected 、 volatile 、 double 、import 、public
示例:
// // 以下都是合法的变量名
var a;
var A;
var b333;
var _abc;
var $;
var $o0_0o$;
var ________;
var _;
// 以下都是非法的变量名
var 123a;
var 12_a;
var abc@163;
var abc¥;
var var;
var class;
注意: 关键字,保留字不用可以的去记忆, 在未来学习的过程中会接触到一大部分关键字保留字,
4. 变量的赋值
变量的赋值用等号,等号就是赋值符号,在JS中等号没有其他的含义,等号就表示赋值。
var a; //定义
a = 200; //赋初值
console.log(a);
运行结果:200
4.1 可以将定义和赋初值写在一起:
var a = 200;
console.log(a); //200
var a = 100;
var b = 200;
a = b; //在改变a变量的值,a的值变为200。b的值不变。
console.log(a);
console.log(b);`
4.2 变量只要var一次就可以了
变量只需要var一次,后面改变变量的值的时候,就不需要var了,可以直接改变它的值。
var a = 200;
a = 50; //不需要写var
console.log(a); //50
4.3 var后没有复制的变量
如果一个变量,仅仅被var了,但是没有被赋初值呢,此时这个变量的值就是undefined;
// 定义不赋初值,值是undefined
var m;
console.log(m); //输出undefined
实际上我们使用var后,就已经定义了这个m,只不过这就是浏览器的一个规矩,如果这个变量没有被赋初值,那么这个变量就视为没有“定义完成”。值就是undefined。就是空值的意思
5. 不写var的情况呢
// 不写var的时候实际上现在看不出来区别,今后就知道是一个全局变量
abc = 123;
console.log(abc); //123
定义abc的时候没有写var,程序没有报错,说明这个abc变量真的已经被定义成功了。现在你看不出来var和不var的区别,感觉都是成功的,但是日后你就会知道,不写其实var定义了一个全局变量,作用域是不能控制的。
知道就行,自己千万不要这么干
6. 同时定义多个变量
定义多个变量时,中间用逗号隔开
var a = 7 , b = 9 , c = 10;
console.log(a);
console.log(b);
console.log(c);
7. 变量声明的提升
这是js特有的一个特点,其他语言都没有这个特点。
我们现在先去改变变量的值,然后定义变量,
由于JS有一个机制,叫做变量声明的提升,所以现在程序在执行前会已经看见这个程序中有一行定义变量,所以就会提升到程序开头去运行。
a = 200;
var a; //这行定义变量会自动提升到所有语句之前
console.log(a); //200
记住,js只能提升变量的声明,而不能提升变量的赋初值
//提升只能提升变量声明,而不能提升赋初值。输出undefined
console.log(a);
var a = 200;
等价于
var a; //自动升级
console.log(a); // undefined
a = 200; //赋初值还留在原地
变量的传递
var a = 1;
var b = 2;
var c = 3;
a = b; //这里改变a的值,a的值变为2,b的值不变仍是2
b = c; //这里改变b的值,b的值变为3,c的值不变仍是3
c = a; //这里改变c的值,c的值变为2,a的值不变仍是2
console.log(a); //2
console.log(b); //3
console.log(c); //2
8. 区分变量还是直接量
变量的时候,不能加引号。如果变量加上引号,就变成字符串的直接量了。
var a = 200;
console.log("a"); //a
var a = "大家好";
console.log(a);
引号是“字符串”的定界符,所以在双引号里面的a已经失去了变量的意思,就是一个字符串a。