近日开始学习 JS ,了解 JS 的入门用法。本篇文章主要总结一下关于 JS 入门的基本语法。
语句和表达式
语句的定义
语句(statement)指为了完成某个任务而进行的操作,一般用来改变环境。例如:
var a = 1+1 ;
以上就是一个赋值语句,表示用var命令声明变量a,而变量a的值为表达式1+1的运算结果。
表达式的定义
表达式(expression)指为了得到返回值的计算式。如上述关于语句的例子中的1+1即为表达式。
二者的区别
二者的主要区别在于:语句主要为了某种操作,一般情况下不需要返回值;而表达式是为了得到返回值,并且一般都会得到一个值。比如,赋值语句的等号右边,预期是一个值,因此可以放置各种表达式。
变量
变量定义
变量是对“值”的具名引用,即为值起名,然后引用这个名字就等于引用这个值。变量的名字即变量名。例如:
var a = 2;
上述代码中先声明了变量a,在变量a与数值2之间建立引用关系,称为将数值2“赋值”给变量a。赋值之后,变量名a就会得到数值2。整个赋值语句开头的var是变量声明命令,表示通知解释引擎,要创建一个变量a。
注意点
但要注意,JavaScript 的变量名大小写敏感, A 和 a 是两个不同的变量。同时,在不影响断句的前提下,大部分的空格和回车也是没有意义的。
也有一个例外,那就是return后面不加回车的话,系统会自动帮你补上undefined。
变量提升
变量提升(hoisting),是由于JS 引擎工作的方式是先解析代码,获取所有被声明的变量后,再一行一行地运行,所以所有变量的声明语句都会被提到代码的头部。例如:
console.log(a);
var a = 1 ;
上述代码使用了console.log的方法,在控制台显示变量a的值。但是由于声明优先于赋值,所以结果会显示undefined,表示变量a已经声明,但未赋值。
标识符
标识符(identifier)指用来识别各种值的合法名称。最常见的标识符就是变量名以及函数名。
命名规则
标识符有一套命名规则:
- 第一个字符可以是 Unicode 字母或者美元符号
$或者下划线_或者中文。 - 第二个字符以及后面的字符,除了上述符号、字母外,还可以是数字
0-9。
当字符不合法时,系统会自动报错,提示Uncaught Syntax Error: Invalid or unexpected token。
注释
JavaScript 提供两种注释方法,一种是用//起头进行单行注释,另一种是多行注释,放在/*和*/之间。
区块
区块(block)由 JavaScript 中的大括号将多个相关语句组合在一起。而对于var命令来说,区块不构成单独的作用域(scope)。
条件语句
在 JavaScript 中可以使用if结构和switch结构来完成条件判断,即有满足预设的条件,才会执行相应的语句。
if语句
if结构先判断一个表达式的布尔值,然后根据布尔值的真伪执行不同的语句。而布尔值指的是JavaScript中的两个特殊值,一个是true 表示为真,另一个是false表示为伪。其基本语法为:
if(表达式){
语句1
}else if(表达式){
语句2
}else{
语句3
}
其中:
- 如果表达式的求值结果为
true则执行紧跟在后面的语句,如果结果为false则跳过后面的语句; - 表达式可以为
a === 1,语句1、2、3中可以再镶嵌if; else代码块总是与离自己最近的那个if语句配对。
注意不要搞混赋值表达式=、相等运算符==和严格相等运算符===。
例如:
var x = 1;
var y = 2;
if(x = y){
console.log(x)
}
则会输出结果2。
而又如例子:
var a = 1;
if(a === 2)
console.log("a")
console.log("a等于2")
上述例子就会显示结果a等于2。如果if语句后面省略{},则if只能管到后面紧跟着的第一个语句。
switch语句
使用switch语句可以方便地代替多个if else语句,但是用得比较少。
例如:
switch(fruit){
case"banana";
break;
case"apple";
break;
default:
}
三元计算符
三元计算符简称为问好冒号表达式。例如:
(条件)?表达式1:表达式2
上述代码表示当“条件”为true时,就返回表达式1的值,否则返回“表达式2”的值。
&&短路逻辑
A&&B&&C&&D
&& 短路逻辑会取第一个假值或者D,并不会取 true 或者 false 。
||短路逻辑
A||B||C||D
|| 短路逻辑会取其中一个真值或者D。
循环语句
循环语句会用于重复循环执行某个操作。
while 循环
while语句包括一个循环条件和一段代码块,只要条件为真,就会一直循环执行代码块。基本语法如下:
while(表达式){语句};
该语句会先判断表达式真假,表达式为真则执行语句,执行完这个语句后再判断表达式的真假;表达式为假则执行后面的语句。
但也有特例:
var a = 1;
while(a ! == 1){
console.log(a);
a = a + 0.1;
}
该例子会因为浮点数不精确而死循环,榨干内存。
for 循环
for语句是while语句的升级版,可以指定循环的起点、终点和终止条件。基本语法如下:
for(语句1;表达式2;语句3){
循环体
}
先执行语句1,再判断表达式2,如果结果为真,就会执行循环体,然后再执行一次语句3;如果结果是假,就会跳出循环,执行后面的语句。
注意一个变态特例:
for(var i = 0; i < 5; i++){
setTimeout(()=>{
console.log(i + '随机数' + Math.random())
},0)
}
该特例会输出以下结果:
break 语句
break语句具有跳转作用,可以让代码不按既有的顺序执行,用于跳出代码块或当前的循环。
例如:
var i = 0;
while(i < 100){
console.log('i 当前为: ' + 1)
i++;
if(i === 10)break;
}
上述的代码只会循环10次,一旦i等于10,就会跳出循环。
continue 语句
continue语句也具有跳转作用,但是它用于跳过本轮循环,并开始下一轮循环。
例如:
var i = 0;
while(i < 100){
i++;
if(i %2===0)continue;
console.log('i 当前为: ' + i);
}
值得注意的是,如果存在多重循环,不带参数的 break 语句和 continue 语句都只针对最内层循环。
label语句
标签(label)可以放在语句前,相当于定位符,用于跳转到程序的任意位置,格式如下:
foo:{
console.log(1);
break foo;
console.log('本行不会输出');
}
console.log(2)
上述代码执行到break foo时就会跳出区块,最终输出结果为1 2。
以上就是本人暂时学习到的JavaScript基本语法,基本语法中有值得注意的特例的话欢迎在评论区补充,感谢!