003-正则的扩展数值的扩展函数的扩展数组的扩展对象的扩展
Posted 木子旭
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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_INTEGER
和Number.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
对象的写法(call
、apply
、bind
)。但是,箭头函数并不适用于所有场合,所以现在有一个提案,提出了“函数绑定”(function bind)运算符,用来取代call
、apply
、bind
调用。
函数绑定运算符是并排的两个冒号(::
),双冒号左边是一个对象,右边是一个函数。该运算符会自动将左边的对象,作为上下文环境(即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
方法返回一个数组,包含了参数对象的所有属性。这个数组的属性次序是这样的,首先是数值属性2
和10
,其次是字符串属性b
和a
,最后是 Symbol 属性。
以上是关于003-正则的扩展数值的扩展函数的扩展数组的扩展对象的扩展的主要内容,如果未能解决你的问题,请参考以下文章