JavaScript语法(一)

68 阅读3分钟

携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第13天,点击查看活动详情

大家好!我是前端爬楼工程师🚹,一个野生程序员。好奇新技术,仰慕牛大佬。如果喜欢我的文章,可以关注➕点赞,为我注入能量,与我一同成长吧~


如何区分表达式和语句 ?

var a = 3 * 6 
var b = a
b

3 * 6、第二行的a和第三行的b都是表达式, 三行代码都是包含表达式的语句a = 3 * 6也叫赋值表达式b同时也是个语句,即表达式语句。 第一行和第二行代码也称声明语句

每个语句都有返回值

image.png

image.png

声明语句的返回值是undefined,赋值语句的返回值是右边表达式的结果。

image.png

代码块的结果值是其最后一个语句/表达式的结果。上述代码中代码块最后一个语句是b = 4 + 38,所以它的结果是42。

如何获得语句的结果值?

var a , b;
a = eval("if(true){b = 4 + 38};")
a; // 42

使用eval()可以获取到语句的结果值。

var a, b ;
a = do{
    if(true){
        b = 4 + 38;
    }
}
a // 42

上述代码中,do {..} 表达式执行一个代码块(包含一个或多个语句),返回最后一个语句的结果值,赋值给变量a。这个的好处就是减少eval()的使用。

表达式的副作用

var a = 2;
var b = a + 3;

大部分表达式都没有副作用,最常见的有副作用(也可能没有)的表达式是函数调用

function foo (){
    a = a + 1
}
var a = 1
foo() 

结果值undefined , 副作用是a的值改变了。

其他一些表达式也有副作用

var a = 42
var b = a++

首先返回变量a的当前值42,赋值给b,然后将a的值加1

运算符要将产生的副作用赋值给一个变量。

var a = 42
++a++ // reference Error

首先执行 a++, 返回42 ,然后执行 ++42 ,因为这里42不是一个变量,所以++ 42报错。

 var a = 42;
 var b = (a ++) 
 a // 43
 b // 42

()并不能影响副作用的执行顺序。

var a = 42, b;
b = (a ++ , a);
a // 43
b // 43

a++ 执行,然后执行a ,结果为43 ,赋值给b.

delete 表达式也有结果值,副作用是删除对象中的属性。

var obj = {
    a: 42
}
delete a; // true

结果值:true , 副作用:obj的属性a被删除了 ,操作失败返回false

=、+=、-=运算符

var a ;
a = 42 // 42
b = a+=1 // 43

结果值是42,副作用是将42赋值给a

var a , b ,c;
a = b = c = 42

多个表达式串联时,c = 42结果为42,将42赋值给cb = 42 结果值是 42,将42赋值给b, 最后a = 42结果值是42,将42赋值给a

!!误用

var a = b = 42 // 这里b没有声明,会在全局变量里创建一个`b,严格模式会报错