JavaScript 语法

89 阅读5分钟

表达式与语句

表达式

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 elseif(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,不会取truefalse

代替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,不会取truefalse

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

letfor循环配合使用,会产生多出来的虚拟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 语句和声明