# 正则扩展

  1. u 修饰符
    u修饰符,含义为“Unicode 模式”,用来正确处理大于\uFFFF的 Unicode 字符。也就是说,会正确处理四个字节的 UTF-16 编码。
  2. y 修饰符
    y修饰符,叫做“粘连”(sticky)修饰符。y修饰符确保匹配必须从剩余的第一个位置开始
  3. s修饰符
    s修饰符,使得.可以匹配任意单个字符。称为dotAll模式,即点(dot)代表一切字符

# 数值扩展

  1. 二进制和八进制
    二进制前缀0b(或0B),八进制前缀0o(或0O)
  2. Number对象
    • isFinite() 是否有限
    • isNaN()用来检查一个值是否为NaN。
    Number.isFinite(Infinity); // false
    Number.isNaN(NaN) // true
    Number.isNaN(15) // false
    
    parseInt,parseFloat,移植到Number对象,行为不变
    • isInteger() 数值是否为整数
    Number.isInteger(21) // true
    Number.isInteger(21.1) // false
    
    • trunc()去除一个数的小数部分,返回整数部分
    • sign()判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。
      1. 参数为正数,返回+1;
      2. 参数为负数,返回-1;
      3. 参数为 0,返回0;
      4. 参数为-0,返回-0;
      5. 其他值,返回NaN
    Math.trunc(4.1) // 4
    Math.trunc(4.9) // 4
    Math.sign(-5) // -1
    Math.sign(5) // +1
    Math.sign(0) // +0
    Math.sign(-0) // -0
    Math.sign(NaN) // NaN
    
  3. 指数运算符
2 ** 2 // 4
2 ** 3 // 8

# 函数扩展

  1. 参数设置默认值
function log(x, y = 3) {
  console.log(x, y);
}
function foo(x = 5) {
  let x = 1; // error 默认声明的
  const x = 2; // error
}
  1. rest参数
    ...变量名替换arguments对象
function add(...values) {
    console.log(values)
}
  1. 严格模式
    函数参数使用了默认值、解构赋值、或者扩展运算符,那么函数内部就不能显式设定为严格模式
  2. 箭头函数
let f = v => v;
let foo=(a,b)=>{a*b}

注意点:

  • 函数体内的this对象,就是定义时所在的对象,不是使用时所在的对象
  • 不可当作构造函数,也就是说,不可以使用new命令
  • 不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替 (...)
  • 不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
  • 箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法;
  1. 其他
    尾调用:函数的最后一步是调用另一个函数。
function f(x){
  return g(x);
}

尾递归:函数的最后一步是调用自身

function Fibonacci2 (n , ac1 = 1 , ac2 = 1) {
  if( n <= 1 ) {return ac2};

  return Fibonacci2 (n - 1, ac2, ac1 + ac2);
}
Fibonacci2(100) 
//允许函数的最后一个参数有尾逗号
function foo(
  param1,
  param2,
) { /* ... */ }