语句
类似于文章,JavaScript程序也是由语句组成的。跟文章不同的是,JavaScript中的语句以分号结尾,且区分大小写,一个基本的js(JavaScript的简称)语句通常如下所示
let a = 10;
该语句由如下5部分组成
- 关键字
let
,下文会详细介绍 - 变量
a
,可以用于存储数据 - 运算符
=
,请注意这个=
跟数学中的=
不同,前者为赋值运算符,后者则表示数值上的相等 - 数字
10
,跟数学中的10意思相同 ;
,与Java类似,js中的语句也是以分号结尾,但js中的分号可以省略(通常不建议省略)
上述5部分共同组成了一个js语句,该语句的作用是将10赋给名为a的变量
注释
注释是程序中进行说明的部分,它不是必要的,也不会影响程序的运行,但会有助于他人和自己阅读代码。(你也可以用注释搞一些好玩的图案,当然只是为了好玩)
js中有两种注释,如下所示
// 我是注释,祝你开心
/*
我是注释,祝你快乐
*/
- 注释1,以**//**开始,到行末结束,通常用来作单行注释
- 注释2,以**/*开始,以*/**结束,通常用来作多行注释
注意,注释不能嵌套使用,即如下形式
/* 你好,我是一个/* 错误 */ 的注释 */
声明
变量
可以在程序中使用变量作为值的名称,这个象征值的名称就是标识符,js标识符通常以**字母(a-z、A-Z)、下划线(_)和美元符号($)**开头,后面可以紧跟多个字母、数字、下划线,通常标识符需要做到见名知意。因为js区分大小写,所以js中标识符a
和标识符A
是不一样,这点请注意
声明变量和常量
有以下两种方式可以声明变量,一种方式声明常量,为了方便,我们把它放到这进行叙述
使用var关键字声明变量
var a = 10;
这条语句声明一个名为a的变量,并把它的值初始化为10。当然你也可以只声明变量,而不对它进行初始化,如下所示
var a;
这条语句只声明了一个名为a的变量,注意,一个变量如果未初始化便被使用,它的值为undefined
使用let关键字声明
let b = 10;
这条语句声明了一个名为b的变量,并把它的值初始化为10。
使用const关键字声明常量
const c = 10;
这条语句声明了一个常量c,并把它的值初始化为10,请注意,常量跟变量的名不能相同。
常量与变量的不同
- 常量在初始化,就不能对其值进行更改
- 变量在初始化后,还可以对其进行二次赋值,其值为最后一次赋的值
如下所示
const a = 10;
a = 20; // 错误,因为常量初始化后就不能再次赋值
var b = 20;
b = 30; // 正确,b的值为30
变量的作用域
一个变量通常属于以下作用域中的一个
- 全局范围,以脚本模式运行的js代码的默认作用域
- 模块范围,以模块模式运行的默认作用域
- 函数内,在函数内创建的变量的作用域
- 块内,在块内创建的变量的作用域,该类型通常用let或const关键字声明
当你在函数外声明变量时,它的作用域就是全局范围,该变量被称为全局变量,它可以在当前代码文件的任意地方使用,例如
var a = 10;
function theA() {
console.log(a); // 这个a即上文声明的a,该语句会在控制台输出10
}
当你在块内声明变量时,该变量则只在创建它的块中有效,如下所示
if (true) {
const a = 10;
console.log(a); // 控制台输出10
}
console.log(a); // 错误,a并没有被声明
请注意,var关键字并不能声明块变量,它只能声明全局变量或者局部变量
if (true) {
var a= 10;
}
console.log(a); // 正确,输出10
变量提升
var关键字声明的变量是可以被提升的,即使你使用它的时候,它并未被声明
console.log(a === undefined); // 控制台输出true
var a; // 如果把这行去掉,将会报错
虽然变量是可以被提升的,但它的值并不会被提升
console.log(a); // 变量并未被初始化,输出undefined
var a = 10;
数据类型
js有八种数据类型
数据类型 | 说明 |
---|---|
Boolean | 值为true or false,即逻辑值 |
null | 表示空值,即啥也没有 |
undefined | 变量未被初始化时的值 |
Number | 数字值,表示整数或者浮点数 |
BigInt | 任意精度的整数 |
String | 字符串,与python类似,js中的字符串使用双引号或者单引号括起来 |
Symbol | 用来表示唯一且不可变的值 |
Object | 通常用来表示现实世界事务的抽象模型 |
数据类型转换
js是动态语言,因此您在声明变量时不必像Java一样标明变量的数据类型,在脚本执行期间,js也会根据需要自动进行类型转换
例如以下语句
var a = 10; // 此时a的数据类型为Number
a = "大大怪将军"; // 此时a的数据类型为String
利用这种特性,我们可以使用**+**运算符连接字符串和数字
var a = 10 + "大大怪将军"; // 此时a为String类型,值为"10大大怪将军"
但请注意,其他运算符并不会进行这样的操作,当两边都是字符串类型的数字;或者一边是字符串类型的数字,另一边是数字类型的数字时,会进行数学运算
var a = "100" - "10"; // a的类型为Number,值为90
你也可以使用以下两个方法,将字符串类型的数字转换为数字类型的数字
- parseInt()
- parseFloat()
字面量
字面量即js中的值,请注意他们跟变量的区别,字面量是固定的
数组字面量
数组字面量是用**[]括起来的一个或多个元素的列表,每个元素之间用,分割,最后一个元素后面可以没有,**
["zhangguoqiang", "lubo"] //一个包含两个元素的数组字面量
数组字面量中额外的逗号
const names = ["zhangguoqiang", , "lubo"];
请问,数组字面量有几个元素?
我们可以在控制台里输出一下看看,在控制台里输入names.length
,我们会发现一个奇怪的现象,names数组的长度为3。这是因为js会把两个逗号之间的元素初始化为undefined
,但它实际与undefined
还是有些不同的,请注意js会忽略每行最后一个元素后面的逗号
const names = ["zhang", "guo", "qiang",]; // 数组长度为3
const names1 = ["zhang",
"guo",
"qiang",]; // 数组长度为3
布尔字面量
布尔字面量即true和false
数字字面量
js支持不同进制的整数和十进制的浮点数,请注意js中的数字是没有符号的,那我们该如何表示负数呢?答案很简单,使用-
就可以以,例如-123
,js会把它解释为应用了-
运算符的数字(实际上跟负数差不多了)
整数字面量
js中的整数支持十进制,八进制,十六进制,二进制,以下是各种进制的区别
进制 | 说明 |
---|---|
十进制 | 一串没有前导0的数字(就是我们现实中最常见的数字) |
八进制 | 前缀为0o或0O,后面跟一串1到7之间的数字 |
十六进制 | 前缀为0x或0X,其后的序列由数字1到9,字母a-f(A-F)组成,字母a-f分别表示10-15 |
二进制 | 前缀为0b或0B,其后跟一串1到2组成的数字 |
注意,整数字面量可以后跟n,表示它是一个BigInt类型的整数 |
浮点字面量
一个浮点数包含以下部分
- 一个无符号十进制整数
- 一个小数点
- 另一个无符号十进制整数
- 指数部分
指数部分由e或E开头,其后跟一个带符号的整数(也可以不带),请注意,无论怎样表示,小数点部是必不可缺的,且小数点后应至少有一位数字,带e的其实就是科学计数法
.23E10; //正确
1.23E+10; //正确
1.E231; //错误
1.23; // 正确
对象字面量
一个对象字面量通常用{}
括起来,其中包含一对或多对属性(以键值对的形式存储),每对属性之间用**,**分割,属性可以是任意类型,甚至是函数
var people = {
name: "张国强",
word: "我是个人",
age: 12,
destination: function () {
console.log("星辰大海");
},
}
访问对象属性可以用.
或者[]
,通常用.
people.name
people[name]
正则表达式字面量
正则表达式字面量用//包裹起来
const re = /ab+c/;
字符串字面量
字符串字面量由单引号或者双引号括起来
"星辰大海";
'星辰大海';