JS基本语法

106 阅读3分钟

表达式和语句

表达式

  • 1+2表达式的值是3
  • add(1,2)表达式的值是函数的返回值
  • console.log(3)的值是Undefined,因为返回值是undefined.

语句

  • var a = 1 是一个语句

表达式和语句的区别

  • 表达式一般都有值,语句可能有也可能没有
  • 语句一般回改变环境(声明、赋值)
  • 上面两句话并不是绝对的

JS的一些注意事项

  • JS是大小写敏感的
  • 空格
    • 大部分空格都没有实际含义
    • 加回车大部分也没有实际影响
    • 只有一个地方不能加回车,那就是return后面, 否则会返回undefiend

1592724339291-4bc0601f-a382-4e39-a1a3-120042a8a89b.png

标识符

标识符是指变量的合法命名,规则如下:

  • 第一个字符,可以是任意Unicode字母(包括英文字母、希腊字母、中文)、下划线(_)、$符号,不可以是数字开头
  • 第二个字符及后面的字符,除了 Unicode 字母、美元符号和下划线,还可以用数字0-9

1592724633566-eef083ef-5e05-4f5c-98d8-2ac073429602.png

if else 语句

语法

  • if (表达式){语句1} else {语句2}
  • {}在语句只有一句的时候可以省略,但不建议这样做
  • 例:
const a = 1;
if (a === 2)
    console.log('打印a'); console.log('打印b')

这里只会打印b

switch 语句

1592728287906-752ce019-ee67-4901-a911-797ad1c77252.png

每个case都需要写一个break,不然,如果banana没有break, 那么它会继续执行apple的部分,直到碰到了Break

&& 短路逻辑

if (window.f1) {
    console.log('f1存在')
}
window.f1 && console.log('f1存在')

上面两句语句等价

a&&b
等价于
if (a) {
    b
}

A&&B: 如果A是真,就看B的值;如果A是假,就看A的值,就不会管B,短路

A&&B&&C&&D : 取第一个假值 或者 B

|| 短路逻辑

a||b
等价于
if(!a) {
  b
}

常见的应用场景就是给a设定默认值

a = a || 100
如果a存在就a=a, 如果a不存在, a=100
等价于
if (a) {
 a = a
} else {
 a = 100
}

问号冒号表达式

表达式1?表达式2:表达式3

a > b? a : b

while循环

语法

  • while(表达式){语句}
  • 判断表达式真假
  • 当表达式为真,执行语句,执行完再判断表达式真假
  • 当表达式为假,执行后面的语句
let a = 0.1;
while (a !== 1) {
    console.log(a)
    a = a + 0.1
}

由于浮点数的计算时不精确的,所以以上代码会死循环

for循环

语法

  • for(语句1; 表达式2; 语句3){循环体}
  • 先执行语句1
  • 然后判断表达式2
  • 如果为真,执行循环体,然后执行语句3
  • 如果为假,直接退出循环,执行后面的语句
for (var i = 0; i < 5; i++) {
    console.log(i)
}
请问这里打印出的i是多少?
console.log(i)

答案是5, 因为当i == 4, i = i + 1 = 5, 然后退出循环

for (let i = 0; i < 5; i++) {
    console.log(i)
}
请问这里打印出的i是多少?
console.log(i)

i是undefined. 因为Let声明的变量不会变量提升

for (var i = 0; i < 5; i++) {
    setTimeout(()=>{//setTimeout就是过一段时间执行
        console.log(i)
    }, 0)
}

会打印出5次5

我们已经知道for (var i = 0; i < 5; i++) {}执行完毕后,i的值是5

而setTimeout就是过一段时间执行, 而for循环是当前任务,所以这段代码意思就是说等到for循环执行完毕了,再打印5次i,所以就会打印5个5

for (let i = 0; i < 5; i++) {
    setTimeout(()=>{
        console.log(i)
    }, 0)
}

当把var 换成 let, 就会打印出 0, 1, 2, 3, 4

break 和 continue

  • break是跳出离它最近的一个循环
  • continue是跳出本次循环,下次继续
for (var i = 0; i < 10; i++) {
    for (var j = 0; j < 5; j++) {
        if (i===5) {
            break;
        }
    }
    console.log(i)
}

会打印出0,1,2,3,4,5,6,7,8,9

因为break只会跳出和他最近的一个for循环

label

{
    a:1;
}

以上的代码是:有一个代码块,代码块里有一个label, a: 1 表示这个标签是a, a的值是1

以上代码不是一个对象!

foo: {
    console.log(1)
    break foo;
    console.log('本行不会输出')
}
console.log(2)

foo 表示 label的标识符是 foo, break foo 表示退出当前的Label, 所以代码会输出1, 2