表达式与语句
表达式
1+2 表达式的值为3
add(1+2) 表达式的值为函数的返回值
值和返回值不一样,只有函数有返回值,函数的值是它的返回值
console.log 表达式的值为函数本身
console.log(3) 表达式的值为undefined
3是打印出来的,不是返回值,undefined才是返回值
语句
var a = 1;
二者之间的区别
表达式一般都有值,语句可能有,可能没有
语句一般会改变环境(声明,赋值)
上面两句话,并不绝对
JS大小写敏感(不要写错)
var a 和 var A 不同
object 和 Object 不同
function 和 Function 不同
空格和回车
大部分空格和回车都没有意义,只要不影响断句,可以随便添加
var a = 1
var a=1
没有任何区别
只有return后面不能加回车,加了之后JS会在return后面自动添加一个undefined
标识符(给变量、函数、属性、参数取名字时候用到的就叫标识符)
规则
第一个字符,可以使用Unicode字母或$或_或中文
后面的字符,可以使用Unicode字母或$或_或中文还有数字
变量名是标识符
var _ = 1
var $ = 2
var _ _ _ _ _ _ = 6 (不要使用太多下划线,最多2个)
var 你好 = "hi"
注释
语法
// 单行注释
/*
内容
*/ 多行注释
区块block
用花括号{} 把代码包在一起,就叫区块
{
let a = 1
let b = 1
}
一般不单独使用,经常与if/for/while 合用
if语句
当指定条件为真,if 语句会执行一段语句。如果条件为假,则执行另一段语句
语法
if(表达式){
语句1
}else{
语句2
}
{}花括号在语句只有1句的时候可以省略,不建议省略,容易产生分歧
变态情况
表达式里可以非常变态
a = 1 是错误的
a = 1 不是a等于1,一个等号是复制后面的内容给前面,不是等于号
=== 三个等号,才是等于号,绝对等于
语句1里可以非常变态,嵌套 if else
if(a < 100)
if(a < 10)
语句2里可以非常变态,嵌套 if else(两套if else)
if(a < 100){
语句1
}else if(a > 1000){
语句1
}else{语句2}
缩进也可以非常变态
a = 1
if(a === 2)
console.log("a")
console.log("a等于2")
结果是打印出a等于2,因为if这句有一个无形的{ }花括号,只包含一句语句
如何放在同一行使用,连接2个语句
,逗号表示这句话没完结
;分号表示这句话完结
推荐写法
if(表达式){
语句
}else if(表达式){
语句
}else{
语句
}
次推荐写法(else省略)
function fn(){
if(表达式1){
return 表达式1
}if(表达式2){
return 表达式2
}return 表达式3
}
switch语句(if else的升级版)
语法
switch (fruit){
case"banana":
break;
case"apple":
break;
default:
}
问号冒号表达式(简写if else)
语法
语句1 ? 表达式2 : 表达式3
function max(a,b){
if(a > b)return a;
else return b;
}
function max(a,b){return a>b ? a : b}
语句1成立,执行表达式2,不成立,执行表达式3
&& 短路逻辑
语法
A && B && C && D
取第一个假值 或者D,不会取true 或 false
代替if else
&& 的特点,如果前面为真值,就取后面的的值
例如
if (window.f1){ console.log("f1存在")
等于:
window.f1 && console.log("f1存在")
常用写法
console && console.log && console.log("hi")
如果1存在,就执行2,2存在,就执行3
关系表格
总结:A && B 等于 ( fn && fn( ) )
|| 短路逻辑
语法
A || B || C || D
取第一个真值或者D,不会取true 或 false
a||b
a为真,整个式子为真,就不往后面执行;a不为真,后面才执行
例如
a = a || 100
等于
if(a){
a=a
}else{a = 100} (保底值)
if(!a){b}
不是a 或 a不存在
总结:A || B 等于 A = A || B
while 循环 (当...时)
while 语句可以在某个条件表达式为真的前提下,循环执行指定的一段代码
直到那个表达式不为真时结束循环(while语句没有返回值)
语法
while(表达式){语句}
判断表达式的真假
当表达式为真,执行语句,执行完在判断表达式的真假
当表达式为假,执行后面的语句
死循环例子
var a = 0.1 初始化
while(a !== 1) 判断
console.log(a) 循环体
a = a + 0.1 增长
for 循环
用于创建一个循环,它包含了三个可选的表达式,三个可选的表达式包围在圆括号中
并由分号分隔,后跟一个在循环中执行的语句
语法
for(语句1;表达式2;表达式3;){
循环体
}
语句1填初始化,表达式2填判断,表达式3填增长
先执行语句1,然后判断表达式2
如果为真,执行循环体,然后执行表达式3
如果为假,直接退出循环体,执行后面的语句
setTimeout 过一段时间执行
var a = 1
function fn(){
console.log(a)
}
不执行,因为不能确定a的值,需要先调用函数才能确定a的值
a的值会变,需要fn()函数先执行,才能确定a的值
for循环要先执行完,才能执行过一会的代码,注意执行的时间顺序
for(var i = 0; i<5; i++){
setTimeout (() => { console.log(i)})
}
结果是 打印5次5
for(let i = 0; i<5; i++){
setTimeout (()=> { console.log(i)})
}
结果是打印 0 1 2 3 4
let 和 for循环配合使用,会产生多出来的虚拟i,存放每次for循环执行完i的值,var不会
break (退出所有循环)和 continue(退出当前一次循环)
for(var i = 0; i<10; i++){
if(i % 2 === 1){
break}}
continue
break,只退出最近的循环
continue,过,下一个,跳出当前循环
label 语句
语法
foo(在任何情况下写一个标识符)
foo:{
console.log(1);
break foo;
console.log("本行不会输出")
}
console.log( 2 )
这个东西是什么
{
foo:1
}
foo 标签,是一个label,语句是 1
详细资料点击:JavaScript 语句和声明