ES6常用知识点整理(四)

5. 数字扩展

进制表示

es6 中,二进制的表示方法都是以 0b 开头
console.log(0b111101110); // 494
es6 中,八进制的表示方法都是以 0o 开头
console.log(0o767); //503

 

数值判断

判断是否为有效数值
  console.log("15", Number.isFinite(15)); //true
  console.log("NaN", Number.isFinite(NaN)); //false
  console.log("1/0", Number.isFinite(1 / 0)); // false
判断是不是数
  console.log("NaN", Number.isNaN(NaN)); //false
  console.log("0", Number.isNaN(0)); //true
判断是否整数
  console.log(Number.isInteger(25)); //true
  console.log(Number.isInteger(25.0)); //true 25.0 等于 25
  console.log(Number.isInteger(25.1)); //false 25.1 不等于 25
  console.log(Number.isInteger("25")); //false  参数必须是数
数的边界
  console.log(Number.MAX_SAFE_INTEGER); //9007199254740991
  console.log(Number.MIN_SAFE_INTEGER); //-9007199254740991
判断安全范围内的整数
  console.log(Number.isSafeInteger(10)); //true
  console.log(Number.isSafeInteger(10.4)); //false
返回一个小数的整数部分
  console.log(Math.trunc(4.11)); //4
  console.log(Math.trunc(4.9)); //4
判断一个数 正数 负数 零
  console.log(Math.sign(-5)); //-1
  console.log(Math.sign(0)); //0
  console.log(Math.sign(5)); //1
  console.log(Math.sign("ffd")); //NaN

计算立方根

  console.log(Math.cbrt(-1)); //-1
  console.log(Math.cbrt(8)); //2
  console.log(Math.cbrt("gf")); //NaN

 

6. 数组扩展

数组转换

一组数据转换成数组
  let arr = Array.of(3, "sd", 7, 9, 11);
  console.log("arr=", arr); //[3, "sd", 7, 9, 11]
类数组转真数组
  // 把元素集合转义成数组
  let p = document.querySelectorAll("p");
  let pArr = Array.from(p);
  pArr.forEach(item => {
    console.log(item.textContent);
    //ES6
    //慕课网
    //学习教程
  });
  //映射关系
  console.log(Array.from([1, 3, 5], item => item * 2));
  // [2,6,10]

填充数组

  console.log([1, "a", undefined].fill(7)); // [7,7,7]
  // 后两个参数 起始位置 终止位置
  console.log(["a", "b", "c", "d", "e"].fill(7, 1, 3)); //['a',7,7,'d','e']

打印值

返回数组索引
  for (let index of ["1", "c", "ks"].keys()) {
    console.log(index);
    //0
    //1
    //2
  }
 
返回索引与值, 配合解构使用
  for (let [index, value] of ["1", "c", "ks"].entries()) {
    console.log(index, value);
    //0 '1'
    //1 'c'
    //2 'ks'
  }
从第 3 个位置开始读到 4 之前,放到第 0 个位置
console.log([1, 2, 3, 4, 5].copyWithin(0, 3, 4)); //[4, 2, 3, 4, 5]
找到符合条件的第一个数值
console.log([1, 2, 3, 4, 5, 6].find(item => item > 3)); //4
找到符合条件的第一个索引
console.log([1, 2, 3, 4, 5, 6].findIndex(item => item > 3)); //3
这个数组中是否包括 目标值
  console.log([1, 2, NaN].includes(1)); //true
  console.log([1, 2, NaN].includes(NaN)); //true

 

7. 函数扩展

参数

参数默认值
  function test(x, y = "world") {
    console.log("默认值", x, y);
  }
  test("hello"); //hello world
是取得参数中的值
  let x = "test";
  function test2(x, y = x) {
    console.log("作用域", x, y);
  }
  test2("kaka"); // kaka kaka
如果参数中没有x 就朝外取值
  let x = "test";
  function test2(c, y = x) {
    console.log("作用域", c, y);
  }
  test2("kaka"); // kaka test

rest 参数, 扩展运算符

  // 把一些离散的值转换成了数组
  function test3(...arg) {
    for (let v of arg) {
      console.log("rest", v);
      // 1
      // 5
      // a
    }
  }
  test3(1, 5, "a");

  // 把数组转成离散的值
  console.log("a", ...[1, 2, 4]); //a 1 2 4

箭头函数

  // this 绑定
  // es5: 函数被调用时的对象
  // es6: 定义时候的对象
  let arrow = v => v * 2;
  console.log(arrow(3)); //6
  let arrow2 = () => 5;
  console.log(arrow2()); //5

尾调用

  function tail(x) {
    console.log("tail", x);
  }
  function fx(x) {
    return tail(x);
  }
  fx(123); // 123

 

8. 对象扩展

简洁表达

  let o = 1;
  let k = 2;
  let es5 = { o: o, k: k };
  let es6 = { o, k };
  console.log(es5);
  console.log(es6);
  // {o: 1, k: 2}

  let es5_method = {
    hello: function() {
      console.log("hello es5");
    }
  };
  let es6_method = {
    hello() {
      console.log("hello es6");
    }
  };

  es5_method.hello();
  es6_method.hello();

属性表达式

  let a = "b";
  let es5_obj = {
    a: "c"
  };
  // 中括号包起变量,a 是变量,变量的值是b
  let es6_obj = {
    [a]: "c"
  };
  console.log(es5_obj); //{a: "c"}
  console.log(es6_obj); //{b: "c"}

新增api

  // 判断相等,等同 ===
  console.log(Object.is("abc", "abc")); //true
  // 引用类型 引用两个不同地址
  console.log(Object.is([], [])); //false

  // 浅拷贝 属性有限制 ,拷贝自身属性的地址
  console.log("拷贝", Object.assign({ a: "a" }, { b: "b" })); //{a: "a", b: "b"

  let test = { k: 123, o: 456 };
  for (let [key, value] of Object.entries(test)) {
    console.log([key, value]);
    // ["k", 123]
    // ["o", 456]

扩展运算符 (es7特性, 支持度不高)

  //扩展运算符 (es7特性)
  //let { a, b, ...c } = { a: "test", b: "kill", c: "ddd", d: "ccc" };
  // c= {
  //   c:ddd,
  //   d:ddd
  // }

 

9. symbol 类型

symbol 作用

提供一个独一无二的值
  //声明
  let a1 = Symbol();
  let a2 = Symbol();
  console.log(a1 === a2); //false

  // 设定key值,同key 的值是相等的
  let a3 = Symbol.for("a3");
  let a4 = Symbol.for("a3");
  console.log(a3 === a4); //true

 

使用场景
  // 同键值不会造成冲突
  let a1 = Symbol.for("abc");
  let obj = {
    [a1]: "123",
    abc: 345,
    c: 456
  };
  console.log(obj); //{abc: 345, c: 456, Symbol(abc): "123"}
  /**
   * 对象中有用到symbol作key值时,for in 和 let of 是拿不到属性的
   */
  for (let [key, value] of Object.entries(obj)) {
    console.log(key, value);
    // abc 345
    // c 456
  }
  for (let key in obj) {
    console.log(key, obj[key]);
    // abc 345
    // c 456
  }

  // 这时候就需要一个api了,得到一个数组
  Object.getOwnPropertySymbols(obj).forEach(item => {
    console.log(obj[item]);
    // 123 (只取到symbol)
  });

  // 所有都要那到要使用Reflect, 返回symbol变量作为key值的属性
  Reflect.ownKeys(obj).forEach(item => {
    console.log(item, obj[item]);
    // abc 345
    // c 456
    // Symbol(abc) '123'
  });

 

posted @ 2019-07-05 15:14  言叶以上  阅读(377)  评论(0编辑  收藏  举报