// 所以||会有一个常用作用:传参判断 let func = function (a, b) { a = a || 'Hello'; b = b || 'World'; return a + " " + b; } console.log(func('Hi')); // Hi World console.log(func('Hi', "")); // 注意这里传入了假值,结果依然是Hi World console.log(func('Hi', " ").trim()); // 传入空字符则判断为true,返回Hi
{ /* ++表达式 */ let a = 43; let b = (a++ , a); console.log(b); // 正确将44赋值给b };
{ /* ES6的参数预留值可以理解为使用了let,存在暂时性死区TDZ */ // 下面声明赋值b的时候,同时进行了访问,这样在ES6有些情况会报错 let testTDZ = function (a = 3, b = a + b + 3) { console.log(a, b); // 不报错就输出NaN } // testTDZ(); };
{ /* 宿主变量 */ let div = document.createElement('div'); console.log(typeof div); // object console.log(Object.prototype.toString.call(div)); // [object HTMLDivElement] console.log(div.tagName); // DIV };
{ // generator let a = 100; const foo = function* () { a++; yield; // 暂停 return a; } let iterator = foo();
iterator.next(); let res = iterator.next();
console.log(res); // value, done
const bar = function* (num) { // 遇到yield表达式时,会暂停在赋值语句中间,并本质要求提供一个值 // 可以不设定预留值,即(yield),不设定时默认返回的value是undefined let result = num * (yield'Hello'); return result; }
let iterator2 = bar(10); let res21 = iterator2.next(); // 函数停在yield表达式的中间,并把yield后的内容暂时作为value值 let res22 = iterator2.next(7); // 传值,赋值语句继续执行