…表示无语,或者说反对.
语句
表达式语言,陈述式语言, 目前流行的语言都是陈述式语言(有语句和表达式)
11.1 声明
let const function class
var 已经过时,以前用于Internet Explorer...// 合着, var 之前只能IE用是吧...
let a = 1,
b = 2; // 还是建议单独,为了可读和可维护性,这个看个人爱好,或者看公司规范.
let { name: a, age: b } = {name: 'miller', age: 19}; // a b
let [a, b] = [2,3]
解构并不是多么重要的语法... // 是啊, 不用也行...
function fn(){ return 'small' }
等效于
let fn = undefined; // let 需要分号结尾...这是什么老古董
fn = function() { return 'small' ) // 等效个P....函数有变量提升,let 没有啊..
所有通过function语句创建的let语句也会被提升 // 啥意思?? let 能被提升?
if(){
function fn(){} // 这样不好,函数还是放函数体或者模块内 // 模块内是啥意思?? 对象?
}
const a; //报错, 必须赋值 constant
使该变量不可以被重新复制; // p106 第三段,第四行, 这里应该是赋值吧...唉
Object.freeze是作用于值的,而const则作用于变量 // Object.freeze冻结的变量还能重新赋值.
我们有必要理解值和变量的区别,变量包含对一个值的引用,而值从来不会包含变量
11.2表达式
javascript允许在语句的位置写任何表达式 // 什么是语句的位置?
有意义的表达式就三类: 赋值 调用 delete
表达式也可以写在语句的位置上,这大大降低了编译器识错的能力 // …说编译器更难识别错误不就行了.
赋值语句包含四部分:
1. 左值,用于接收值的表达式,它可以是一个产出对象或数组的表达式... //P107 第一行 这里写得实在啰嗦,而且也不对啊
fn() = 1// 比如fn()返回一个对象,这能赋值???? 一个对象不能被赋值, 变量才行,或者说对象的属性
a.name = 1 // 赋值语句可以是
2. 运算符 = += -= *= /= %= **=
>>>= 右移赋值
>>= 带括号扩展右移赋值
<< 左移赋值
&= 位运算与赋值
|= 位运算或赋值
^= 位运算异或赋值
3. 表达式 //
4. 分号 // ...
不建议使用 ++ – , 应该抛弃 //… ++a a++ 很容易区分, 书写也方便 a += 1 a++ 你对比下
表达式语句 // 表达式是表达式, 语句是语句, 虽然严格来说,表达式也是一句…
11.3 分支
if和swicth 我们其实只需要一个,甚至都不需要.
const myObj = my[case_expression](); // 建议用对象替代switch
上面的代码有个问题, 它与this绑定在了一起 // ??
javascript将条件语句部分当做布尔式犯蠢类型 // ?? 这说了个啥, 我知道它想表达, 用true false,真费劲..
如果if在语义上只是else区块中最顶部的逻辑,我建议你讲其写入else,而不是提升到与else平级 // 这...说了个啥, 这不废话吗
如果前一个区块是以中断(如 return)结尾的,就不应该使用else if // ?? 为啥不能用
function fn(a) {
if (a > 1) {
return 2
} else if (a <= 1 && a > 0) {
return 1
} else {
return 3
}
}
console.log(fn(2))
function fn() {
if(a > 1) return true;
return false // 上面他应该是想说: 如果只有两种情况, 已经有一个return了,就不用在写第二个分支判断了.省点代码
}
11.4 循环
for / while / do while 我们其实只需要一个,甚至都不需要. // 又是这一句
- 推荐用forEach替换 for, 总之不建议使用for // 哈哈…
- 最好的循环写法是尾递归 //
while(true){
// 做些事情
if() {
break;
}
//做别的事情
}
11.5 中断
break; continue; throw return ;
- break用于退出循环和switch语句
- continue 跳到循环体顶部 // 这个比我当时学得要好, 我当时学的是, 跳过本次循环-不严谨
- throw 抛出异常
- return
- label 做标记, 是一种设计错误
在使用return的时候确信目前应当返回, 而不是将所有的返回点集中到一处 // 不知道在说啥
11.6 大杂烩
- 没讲啥…就讲了个debugger ,说上线的代码不应该含有debugger
11.7 标点
if(a) xx // 不好
if(a) {} //