1. 字面量
字面量:固定的值,字面是什么含义就表示什么
分类:
-
① 数字字面量:数字不用双引号包裹
-
② 字符串字面量
-
③ undefined
-
④ 布尔值(true / false)
1.1 数字字面量
数字字面量:
-
整数
-
浮点数
-
特殊值(Infinity 和 NaN)
1.1.1 整数:
- 十进制(0-9): 不需要书写前缀 在console面板输出结果和参与数学运算时都是十进制
- 八进制(0-7): 前缀0 , 0o , 0O 逢8进一
- 十六进制(0-16):前缀0x,0X 逢16进一
0-9 A - 10 B - 11 C - 12 D - 13 E - 14 F - 15
进制之间转换:
八进制转换成十进制
//3 * 8的0方 + 2 * 8 的1次方 + 1 * 8 的2次
console.log(0O123);
复制代码
十六进制转换成十进制
//3 * 16的0方 + 2 * 16 的1次方 + 1 *16 的2次
console.log(0x123);
复制代码
1.1.2 浮点数
只能使用十进制表示
可以使用幂(科学计数法)表示
// 浮点数可以使用幂(科学计数法)表示
console.log(0.5e-5);
复制代码
1.1.3 特殊值
特殊值:
Infinity(无穷大)
NaN (not a number 不是数)
-
Infinity: 无穷大 属于数字字面量(计算机计算能力有限超过极限时,显示无穷大)
-
-Infinity:无穷小 属于数字字面量 一个数除以0等于无穷小
// 一个数除以0等于无穷小
console.log(2/0);
复制代码
- NaN(not a number):不是数字 属于数字字面量
1.2 字符串字面量
字符串必须用双引号包裹。
字符串可以书写零个或者多个特殊字符:
-
\n : 换行
-
\t : 制表符
有些符号有特殊含义,可以在符号前面书写转义字符\ 。可以原样输出符号
console.log("这是一对双引号\" \" \? 这是反斜杠\\");
复制代码
2. 变量
ECMAScript 的变量是松散类型的,所谓松散类型就是可以用来保存任何类型的数据
定义变量时要使用 var 操作符(注意var是一个关键字),后跟变量名(即一个标识符),如下所示:
var message;
复制代码
变量使用必须先声明变量 :var 变量名;
变量命名规则:
- ① 只能使用字母、下划线(_)、美元符号($)或数字,但是不能是数字开头
- ② JS是区分大小写的,这里所指的字母可以是(大写的)“A”到字母“Z”和(小写的)“a”到“z”
- ③ 不能是JavaScript的关键字和保留字。
未经过初始化的变量,会保存一个特殊的值—— undefined
如果使用变量之前未声明,会报错。
变量可以多次赋值,最后赋值的结果输出,旧值被舍弃。
变量声明的提升:
通常情况先声明变量,然后进行赋值。可以先使用后面声明的变量,不会报错。输出结果是undefined(表示变量没有任何赋值,可以接收任何赋值)。即使后面声明的变量已经有赋值,结果也是undefined.
// 先使用变量
console.log(a);
// 在声明变量 声明变量时可以直接赋值
var a = 10;
//等价写法:
var a;
console.log(a);
a = 10;
复制代码
JS预解析工作原理:
JS在执行代码之前,先预解析。将所有变量的声明语句提升到所有语句之前。只提升变量的声明语句不提升变量的赋值。
用 var 操作符定义的变量将成为定义该变量的作用域中的局部变量。也就是说,如果在函数中使用 var 定义一个变量,那么这个变量在函数退出后就会被销毁
function test(){
var message = "hi"; // 局部变量
}
test();
alert(message); // 错误!
复制代码
省略 var 操作符,从而创建一个全局变量,要是JS严格模式就会报错(所以不推荐):
function test(){
message = "hi"; // 全局变量
}
test();
alert(message); // "hi"
复制代码
同时声明并初始化多个变量: 使用一条语句定义多个变量,只要像下面这样把每个变量(初始化或不初始化均可)用逗号分隔开即可:
var message = "hi",
found = false,
age = 29;
复制代码