JS教程—容易忽略的概念
1、表达式 和 语句 :
- 表达式:MDN上也没有表达式的具体概况,只说明了哪些表达式。https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Operators
- 运算符 表达式
- 左表达式
- 赋值表达式 【变量声明是一个语句,而赋值本身是一个表达式】
- 语句:MDN上也没有语句的具体概况,只说明了哪些语句。 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Statements
- 声明语句:var、let、const、function 等
- 控制流程语句:switch、if...else... 等
- 等
- 表达式和语句的区别:在 javascript 中 所有表达式都有返回值(如果没有返回值就是undefined),这个返回值就可以继续作为表达式的一部分。
2、小括号的作用:http://www.voycn.com/article/jszhongxiaokuohaodeyongfazongjie 或 http://www.360doc.com/content/18/0224/11/31710407_732033425.shtml
- 强制表达式运算
函数立即执行
(function(){ // ... })();
先声明后赋值的解构赋值
let x; {x}={x:1,y:1} // 报错 主要还是大括号的原因,js在行首遇到{}会把它当做代码块执行,所以会报错. ({x}={x:1,y:1}) // 这里小括号的作用,就是告诉程序。里面是一个表达式处理,而不是一个的代码块。当然首先 里面本身就是可以作为表达式处理才可以。
如果里面无法进行表达式处理就会报错。 let { x } = {x: 1},中 { x } = {x: 1} 本身就是一个合法表达式。只是在没有 let 情况,js把{ }里面的代码解析成语句了。
所以用(),显示说明是一个表达式就好不会报错了。
说明下:表达式本身就是具有返回值。所以使用(),强制表达式运算,运算后还是有返回值,这个是没有改变的。
3、大括号的作用:
- 对象字面量:
- 块语句:块语句用于将零个或多个语句组合在一起。块由一对大括号(“花括号”)界定,并包含零个或多个语句和声明。
个人理解:- if 后面如果是一个语句就不需要块语句,如果是多个语句执行,就要使用块语句把它们组合起来。
- 使用空语句可以实现相反的行为,即在需要语句情况下不提供任何语句。用分号;表示。
如下,if 条件判断后面后面应该有执行语句,而没有。
if (condition); // 注意,这个“if”不会产生任何作用!
空语句结尾,也表示上一个语句结束了,和下面的代码不在一个语句中。这也说明,JS不是通过分号来判断语句是否结束的,分号是一个空语句,所以只要不产生歧异的语句可以不用分号。
4、null和undefined的区别:http://t.zoukankan.com/Renyi-Fan-p-13969705.html 或 https://juejin.cn/post/6844903574242066440
java中只要声明了原生类型,默认就会给一个初始值的;而声明一个包装类型时,默认给的值就是null。
JavaScript 是动态类型,声明一个变量 不赋值时,根本无法给他默认值。而null是表示“无”的对象,不适合原始值,所以创造了一个undefined。JavaScript的最初版本是这样区分的:null是一个表示"无"的对象,转为数值时为0;undefined是一个表示"无"的原始值,转为数值时为NaN。
但是,上面这样的区分,在实践中很快就被证明不可行。目前,null和undefined基本是同义的,只有一些细微的差别。
下面总结下,个人在实践中对他们的总结:
- null:表示一个 空对象的 值,本质上他还是一个特殊值。
- undefind:表示"缺少值",就是此处应该有一个值,但是还没有定义。即 事实上 没有这个值。
所以对象在JSON序列化时,会忽略掉undefined的属性。因为undefined值就是告诉程序没有这个属性。
5、label 语句:标记语句是任何带有标识符前缀的语句。你可以使用嵌套在标记语句中的 break 或 continue 语句跳转到对应标记。
即,break 或 continue 本来跳出语句的,变成跳转到指定语句去了。
let str = ""; loop1: for (let i = 0; i < 5; i++) { if (i === 1) { continue loop1; // 跳到标签语句中 } str = str + i; } console.log(str); // Expected output: "0234"
总结:label 语句是 需要 break 或 continue 的配合才能起作用。 标签语句只是起一个标记作用,不会改变语句本身的执行流程。

浙公网安备 33010602011771号