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、大括号的作用:
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值就是告诉程序没有这个属性。