You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
functiongetData(){return{a: 42,b: 'foo'}}var{ a, b }=getData()console.log(a,b)// 42 'foo'functionfoo({ a, b, c }){console.log(a,b,c)}foo({c: [1,2,3],a: 42,b: 'foo'})// 42 'foo' [1, 2, 3]
else if 和可选代码块
实际上JavaScript中并没有 else if 语法,只不过 if 和 else 只包含单条语句的时候可以省略代码块的大括号
语句和表达式
在JavaScript中,需要区分语句和表达式,因为它们存在一些重要差别。语句相当于句子,表达式相当于短语,运算符则相当于标点符号和连接词。在JavaScript中,表达式会返回一个结果值
语句的结果值
有如下两种情况:
var let const
语句的结果值是undefined
代码块
{..}
的结果值是其最后一个表达式/语句的结果值表达式的副作用
最常见有副作用的表达式是函数调用(函数调用也是一个表达式,结果值是该函数的返回值):
递增和递减运算符的副作用:
可以使用语句系列逗号运算符,将多个独立的表达式语句串联成一个语句:
delete
运算符的副作用:=
运算符的副作用:利用赋值表达式的副作用合并
if
条件上下文规则
在不同的上下文中
{..}
的含义不尽相同对象常量
代码块
标签语句最大的用处在于,双层循环的时候可以从内循环控制外循环
一个常见的坑,原因如下:
{}
被算作出现在+
运算符表达式中,[]
会被强制类型转换为''
,而{}
被强制类型转换为'[object object]'
{}
被当做一个空代码块,因此+[]
被强制类型转换为0
对象解构
else if
和可选代码块实际上JavaScript中并没有
else if
语法,只不过if
和else
只包含单条语句的时候可以省略代码块的大括号运算符优先级
MDN运算符优先级列表
需要注意:除了优先级,操作符的左关联 or 右关联也非常重要
自动分号
JavaScript会自动为代码补上缺失的分号,(Automatic Semicolon Insertion, ASI)
ASI只在换行符处起作用,且这个行为只有在代码行末尾与换行符中间除了空格和注释没有其他内容,才会产生
函数参数
ES6中,参数可以设置默认值,但是需要注意暂时性死区(Temporal Dead Zone, TDZ)
有参数默认值的情况下,参数被省略或被赋值为
undefined
参数取值是一样的,但是arguments
会产生如下问题除此之外,向函数传递参数时,
arguments
数组中的对应单元会和命名参数建立关联(严格模式下不关联)因此,尽量不去使用
arguments
,本身它也是JavaScript语言底层实现的一个抽象泄露。ES6之后,完全可以用剩余参数语法来代替try .. finally
关于执行顺序,这里
try
先执行,将函数的返回值设置为42,接着执行finally
。最后函数执行完毕如果包含
throw
也是如此但是当
finally
抛出异常,则函数执行会终止,try
中的返回值会被丢弃当
finally
存在返回值时,会覆盖try
或catch
中的返回值甚至还可以将
finally
和带标签的break
语句一起使用(千万不要)switch
在
switch
语句中,变量会逐一与case
表达式比较(严格相等)。需要注意的是,即使case
表达式中使用了宽松相等,但是在switch
内部仍然是严格相等的比较。The text was updated successfully, but these errors were encountered: