zoukankan      html  css  js  c++  java
  • 003-正则的扩展、数值的扩展、函数的扩展、数组的扩展、对象的扩展

    正则的扩展:http://es6.ruanyifeng.com/#docs/regex

    数值的扩展:http://es6.ruanyifeng.com/#docs/number

    函数的扩展:http://es6.ruanyifeng.com/#docs/function

    数组的扩展:http://es6.ruanyifeng.com/#docs/array

    对象的扩展:http://es6.ruanyifeng.com/#docs/object

    1、正则的扩展

      查看原文

    2、数值的扩展

      Number.isFinite()用来检查一个数值是否为有限的(finite),即不是Infinity

      Number.isNaN()用来检查一个值是否为NaN

      Number.isInteger()用来判断一个数值是否为整数。

      Number.isSafeInteger()则是用来判断一个整数是否落在这个范围之内。ES6 引入了Number.MAX_SAFE_INTEGERNumber.MIN_SAFE_INTEGER这两个常量,用来表示这个范围的上下限。

    Math 对象的扩展

      Math.trunc方法用于去除一个数的小数部分,返回整数部分。

      Math.sign方法用来判断一个数到底是正数、负数、还是零。对于非数值,会先将其转换为数值。

      Math.cbrt方法用于计算一个数的立方根。

    其中还扩展了对数方法、双曲函数方法、指数方法  

    3、函数的扩展

    3.1、参数默认值

    3.2、箭头函数

      ES6 允许使用“箭头”(=>)定义函数。  

    var f = v => v;
    
    // 等同于
    var f = function (v) {
      return v;
    };

    如果箭头函数不需要参数或需要多个参数,就使用一个圆括号代表参数部分。

    var f = () => 5;
    // 等同于
    var f = function () { return 5 };
    
    var sum = (num1, num2) => num1 + num2;
    // 等同于
    var sum = function(num1, num2) {
      return num1 + num2;
    };

    3.3、双冒号运算符

    箭头函数可以绑定this对象,大大减少了显式绑定this对象的写法(callapplybind)。但是,箭头函数并不适用于所有场合,所以现在有一个提案,提出了“函数绑定”(function bind)运算符,用来取代callapplybind调用。

    函数绑定运算符是并排的两个冒号(::),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即this对象),绑定到右边的函数上面。

    foo::bar;
    // 等同于
    bar.bind(foo);
    
    foo::bar(...arguments);
    // 等同于
    bar.apply(foo, arguments);
    
    const hasOwnProperty = Object.prototype.hasOwnProperty;
    function hasOwn(obj, key) {
      return obj::hasOwnProperty(key);
    }

    如果双冒号左边为空,右边是一个对象的方法,则等于将该方法绑定在该对象上面。

    var method = obj::obj.foo;
    // 等同于
    var method = ::obj.foo;
    
    let log = ::console.log;
    // 等同于
    var log = console.log.bind(console);

    如果双冒号运算符的运算结果,还是一个对象,就可以采用链式写法。

    import { map, takeWhile, forEach } from "iterlib";
    
    getPlayers()
    ::map(x => x.character())
    ::takeWhile(x => x.strength > 100)
    ::forEach(x => console.log(x));

    4、数组的扩展:http://es6.ruanyifeng.com/#docs/array

    5、对象的扩展:http://es6.ruanyifeng.com/#docs/object

    5.1、属性简写

    const foo = 'bar';
    const baz = {foo};
    baz // {foo: "bar"}
    
    // 等同于
    const baz = {foo: foo};

    方法属性简写

    let birth = '2000/01/01';
    
    const Person = {
    
      name: '张三',
    
      //等同于birth: birth
      birth,
    
      // 等同于hello: function ()...
      hello() { console.log('我的名字是', this.name); }
    
    };

    属性的赋值器(setter)和取值器(getter),事实上也是采用这种写法。

    const cart = {
      _wheels: 4,
    
      get wheels () {
        return this._wheels;
      },
    
      set wheels (value) {
        if (value < this._wheels) {
          throw new Error('数值太小了!');
        }
        this._wheels = value;
      }
    }

    如果某个方法的值是一个 Generator 函数,前面需要加上星号。

    const obj = {
      * m() {
        yield 'hello world';
      }
    };

    5.2、属性的遍历

    ES6 一共有 5 种方法可以遍历对象的属性。

    (1)for...in

    for...in循环遍历对象自身的和继承的可枚举属性(不含 Symbol 属性)。

    (2)Object.keys(obj)

    Object.keys返回一个数组,包括对象自身的(不含继承的)所有可枚举属性(不含 Symbol 属性)的键名。

    (3)Object.getOwnPropertyNames(obj)

    Object.getOwnPropertyNames返回一个数组,包含对象自身的所有属性(不含 Symbol 属性,但是包括不可枚举属性)的键名。

    (4)Object.getOwnPropertySymbols(obj)

    Object.getOwnPropertySymbols返回一个数组,包含对象自身的所有 Symbol 属性的键名。

    (5)Reflect.ownKeys(obj)

    Reflect.ownKeys返回一个数组,包含对象自身的所有键名,不管键名是 Symbol 或字符串,也不管是否可枚举。

    以上的 5 种方法遍历对象的键名,都遵守同样的属性遍历的次序规则。

    • 首先遍历所有数值键,按照数值升序排列。
    • 其次遍历所有字符串键,按照加入时间升序排列。
    • 最后遍历所有 Symbol 键,按照加入时间升序排列。
    Reflect.ownKeys({ [Symbol()]:0, b:0, 10:0, 2:0, a:0 })
    // ['2', '10', 'b', 'a', Symbol()]
    

    上面代码中,Reflect.ownKeys方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性210,其次是字符串属性ba,最后是 Symbol 属性。

  • 相关阅读:
    Python学习笔记_从CSV读取数据写入Excel文件中
    Python学习笔记_Python向Excel写入数据
    Python学习笔记_一个Tkinter示例,使用FileDialog
    Python学习笔记_我的参考网址
    Python读取CSV文件,报错:UnicodeDecodeError: 'gbk' codec can't decode byte 0xa7 in position 727: illegal multibyte sequence
    Python读取CSV文件
    JS写的多级联select,如何取值
    c#常用的Datable转换为json,以及json转换为DataTable操作方法
    C# 读写App.config
    一个简单的存储过程使用事务的例子
  • 原文地址:https://www.cnblogs.com/bjlhx/p/8976793.html
Copyright © 2011-2022 走看看