es6之各种数据类型的扩展
一. 字符串的扩展
- 为字符串添加了Iterator,可以被for...of遍历
- includes、startsWith、endsWith都会返回布尔值,且支持第二个参数(开始搜索的位置),endsWith针对前n个字符,其他两个都是从第n个到结束
- repeat返回一个新字符串,参数为重复的次数(小数会向下取整,负数或Infnity会报错,0到-1等同于0,字符串会转为数字)
- es8引入padStart、padEnd在头部或尾部补全,第一个参数是字符串最小长度,第二个参数是用来补齐的字符串
- 模板字符串`${...}`
- String.raw方法用来充当模板字符串的处理函数,返回一个斜杠都被转义(即斜杠前面再加一个斜杠)的字符串,对应于替换变量后的模板字符串;如:String.raw`hello\n${1+2}` // 'hello\\n3'
也可以作为正常函数,如String.raw({raw: 'hello'}, 1, 2, 3) // 'h1e2l3lo' - codePointAt(返回一个字符的码点),String.fromCodePoint(从码点返回对应字符)
二. 数值的扩展
- Number.isFinite检查一个值是否是有限的,对非数值一律返回false
- Number.isNaN检查一个值是否是NaN,只有NaN才返回true;
传统方法isFinite isNaN都会先调用Number()将非数值转为数值 - Number.parseInt(),Number.parseFloat()与传统方法一样,目的是减少全局方法是语言模块化
- Number.isInteger()判断是否为整数
- Number.EPSILON是一个极小的常量,浮点数计算的误差小于这个值就ok
- JS的准确整数范围:-2^53~2^53(不含两端),
Number.MAX_SAFE_INTEGER = Math.pow(2, 53) - 1;
Number.MIN_SAFE_INTEGER = -Number.MAX_SAFE_INTEGER;
Number.isSafeInteger()是用来判断一个整数是否落在这个范围之内; - Math.trunc() 去除小数部分返回整数部分;
Math.sign() 判断是整数负数还是0;
Math.cbrt() 计算一个数的立方根;还有一些对数方法、三角函数方法;
指数运算符2 ** 3 === 8,与Math.pow实现不同,对于特别大的运算,运算结果最后一位有不同;
三. 数组的扩展
- Array.from可以将类数组对象和可遍历的对象转为数组,扩展运算符也可以将某些对象转数组;
可以接受第二个参数,类似于map方法,将处理的值返回数组; - Array.of将一组值转为数组;
- copyWithin将指定位置的成员复制到其他位置;
Array.prototype.copyWithin(target, start = 0, end = this.length) - find找到第一个符合条件的成员,参数是一个回调函数;
findIndex返回第一个符合条件的数组成员的位置 - fill使用给定值填充数组,二三参数可以指定开始结束位置;
- keys、values、entries
- includes,indexOf一是不够语义化,二是内部使用===判断,
[NaN].indexOf(NaN) // -1 , [NaN].includes(NaN) // true
Map的has是用来查找键名的,Set的has是用来查找值的 - 数组的空位是没有任何值,0 in [,,] // false,es6中会将空位转为undefined,应当避免出现空位;
forEach filter reduce every some都会跳过空位;
map会跳过空位,但会保留这个值;
join和toString会把空位视为undefined,而undefined和null会被处理成空字符串; - ES6 则是明确将空位转为undefined;
四. 函数的扩展
- 允许为函数设置默认值,如果非尾部的参数设置默认值,实际上这个参数是没法省略的;
定了默认值以后,函数的length属性,将返回没有指定默认值的参数个数;
如果设置了默认值的参数不是尾参数,那么length属性也不再计入后面的参数了; - 一旦设置了参数的默认值,函数进行声明初始化时,参数会形成一个单独的作用域(context)。等到初始化结束,这个作用域就会消失。这种语法行为,在不设置参数默认值时,是不会出现的。
- Rest参数(...变量名)
- 扩展运算符(...),将一个数组转为用逗号分隔的参数序列。
/* 替代数组的apply方法 */ // ES5的写法
function f(x, y, z) {
// ...
}
var args = [0, 1, 2];
f.apply(null, args); // ES6的写法
function f(x, y, z) {
// ...
}
var args = [0, 1, 2];
f(...args); /* --------------------------------- */ // ES5的写法
Math.max.apply(null, [14, 3, 77]) // ES6的写法
Math.max(...[14, 3, 77]) // 等同于
Math.max(14, 3, 77); /* --------------------------------- */ // ES5的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
Array.prototype.push.apply(arr1, arr2); // ES6的写法
var arr1 = [0, 1, 2];
var arr2 = [3, 4, 5];
arr1.push(...arr2); 箭头函数使用注意:
(1)函数体内的this对象,就是定义时所在的对象,而不是使用时所在的对象。
(2)不可以当作构造函数,也就是说,不可以使用new命令,否则会抛出一个错误。
(3)不可以使用arguments对象,该对象在函数体内不存在。如果要用,可以用 rest 参数代替。
(4)不可以使用yield命令,因此箭头函数不能用作 Generator 函数。
- this指向固定化,并不是因为箭头函数内部有绑定this的机制,实际原因是箭头函数根本没有自己的this,导致内部的this就是外层代码块的this。正是因为它没有this,所以也就不能用作构造函数;
- 尾调用:函数最后一步是调用另一个函数,尾调用由于是最后一步,所以不用保留外层函数的调用帧;
- 尾递归:递归耗内存,容易发生栈溢出,但尾递归只有一个调用帧,所以不会发生栈溢出;
五. 对象的扩展
- 属性简写表示法
- 属性名表达式,[变量名]
- 方法的name属性返回函数名(即方法名)
- Object.is,与===基本一致,不同在于一是
+0
不等于-0
,二是NaN
等于自身// es5实现Object.is Object.defineProperty(Object, 'is', {
value: function(x, y) {
if (x === y) {
// 针对+0 不等于 -0的情况
return x !== 0 || 1 / x === 1 / y;
}
// 针对NaN的情况
return x !== x && y !== y;
},
configurable: true,
enumerable: false,
writable: true
}); - Object.assign(target, o1, o2)用于对象的合并,若果有同名属性,后面会覆盖前面的;实行的浅拷贝
由于undefined和null无法转成对象,所以如果它们作为参数,就会报错; - Object.getOwnPropertyDescriptor方法可以获取该属性的描述对象。
- 属性的遍历:
for...in、Object.keys、Object.getOwnPropertyNames(obj)、Object.getOwnPropertySymbols(obj)、Reflect.ownKeys(obj) - __proto__与Object.setPrototypeOf()作用相同,用来设置一个对象的prototype对象,Object.getPrototypeOf()
- Object.keys(),Object.values(),Object.entries()
- Object.getOwnPropertyDescriptors返回指定对象所有自身属性(非继承属性)的描述对象;
六. 正则扩展
- ES6 为正则表达式新增了flags属性,返回正则表达式的修饰符;
- y修饰符与g类似,也是全局匹配,后一次匹配都从上一次匹配成功的下一个位置开始。不同在于,g修饰符只要剩余位置中存在匹配就可,而y修饰符确保匹配必须从剩余的第一个位置开始;
- sticky表示是否设置了y修饰符;
- ES6 将match replace search split四个方法,在语言内部全部调用RegExp的实例方法,从而做到所有与正则相关的方法,全都定义在RegExp对象上;
es6之各种数据类型的扩展的更多相关文章
- ES6关于Unicode的相关扩展
前面的话 字符串是编程中重要的数据类型,只有熟练掌握字符串操作才能更高效地开发程序.JS中的字符串String类型是由引号括起来的一组由16位Unicode字符组成的字符序列.在过去,16位足以包含任 ...
- Python基础学习Day7 基础数据类型的扩展 集合 深浅copy
一.基础数据类型的扩展 1.1GBK ---> UTF - 8 # str --->bytes s1 = '太白' # 字符串是unicode编码 b1 = s1.encode('gbk' ...
- ES6中对数值的扩展
上一节和大家学习了字符串的扩展,这一节轮到了数值,我们一起来学习数值的扩展. 剧透一下,这一节并不会很烧脑,都是介绍类的知识讲解,理解性的东西不多,初学者们也可以愉快地看完. 传统的写法 在介绍数值的 ...
- ES6中的数组方法扩展
上一篇文章小编简单介绍了在ES6中,一些常用的方法和一些简单的应用,在这篇文章中,小编将针对ES6中数组常用方法进行扩展,相信经过这篇文章之后,每一位小伙伴下班时间会有所提前,就算从原来的996变成9 ...
- 每日学习心得:Js基本数据类型常用方法扩展
2014-02-17 前言: 节后的第一周上班,整个状态调整的还不错,已完全进入正常的工作状态.这一周主要还是对年前项目存在的一些问题进行完善.修整,基本上没有做大的改动.这里就把项目中经常用到的一些 ...
- ES6 入门系列 - 函数的扩展
1函数参数的默认值 基本用法 在ES6之前,不能直接为函数的参数指定默认值,只能采用变通的方法. function log(x, y) { y = y || 'World'; console.log( ...
- ES6入门之函数的扩展
函数js原有的: 属性:arguments[].caller(调用该函数的引用,注意与callee分别开,callee指的是调用函数本身经常在递归中出现).length(形参个数).prototype ...
- JavaScript学习笔记--ES6学习(四) 字符串的扩展
ES6对字符串进行了一些扩展,主要表现在对Unicode 大于\uFFFF的字符的处理上. 1. ES6中字符的Unicode表示方法 在ES5中,字符串的Unicode表示方法: \uxxxx . ...
- JavaScript学习笔记--ES6学习(五) 数值的扩展
ES6 对于数值类型 (Number) 进行了一下扩展: 1.对于二进制和八进制提供了新的写法 ES6对于二进制和八进制的数值提供了新的写法,分别用0b (或者0B) 和0o (或者0o) 表示.例如 ...
随机推荐
- tmux简要介绍
什么是tmux tmux全称terminal multiplexer,是一个终端复用软件.它可以帮助我们方便地管理多个终端会话. 下面介绍tmux中涉及到的一些名词 window 窗口 pane 窗格 ...
- 1.6 OWIN集成
OWIN集成 安装 使用 如果在应用程序里既使用ASP.NET MVC也使用ASP.NET Web API,需要在工程里安装Abp.Owin包. 安装 添加Abp.Owin包到主工程里(一般是web工 ...
- .NET遇上Docker - Docker集成Cron定时运行.NETCore(ConsoleApp)程序.md
配置项目的Docker支持 对于VS中Docker的配置,依旧重复一些废话. 给项目添加Docker支持,VS2015可以直接使用Docker for VS插件,VS2017在安装时选择容器支持.VS ...
- PHP 学习笔记(3)
<?phpif (isset($_POST['action']) && $_POST['action'] == 'submitted') { echo '<pre&g ...
- 服务器端IIS中部署带Office组件程序
开发的程序需要用到Office组件(Word.Excel等)的时候,往往在开发环境中运行正常,但是部署到服务器上就出问题. 1)首先保证开发环境引用的dll正确 .net 4.0以上版本,添加引用Mi ...
- spring security 配置多个AuthenticationProvider
前言 发现很少关于spring security的文章,基本都是入门级的,配个UserServiceDetails或者配个路由控制就完事了,而且很多还是xml配置,国内通病...so,本文里的配置都是 ...
- 在linux服务器上发布web应用的完整过程
首先你要有一个完整的web应用的小Demo,一个简单的demo就可以了,但是要涉及到数据库,笔者这里简单的模拟一个登陆的过程. 在本地测试,访问项目: 键入账号密码,点击登陆: 就是这么个简单的动作, ...
- CSS动画效果的回调
用纯JS实现动画效果代码量大,计算复杂.因此现在前端页面的动画效果一般都采用CSS来实现. CSS动画实现简单高效,但是在处理动画,控制动画过程上却缺少一些有效手段. 例如我们想在动画效果完成时调用回 ...
- Windows下快速安装Xgboost(无需Git或者VS)
xgboost的全称是eXtreme Gradient Boosting,现在已经风靡Kaggle.天池.DataCastle.Kesci等国内外数据竞赛平台,是比赛夺冠的必备大杀器!如果把数据竞赛比 ...
- 关于web程序快速开发个人见解以及经历
由于在之前公司业务的发展,需要在基于核心业务的基础上开发其他较为独立的业务系统,所以就有了这个基于Dapper,DDD概念的基础框架,由于个人基于这个框架已经经历过两个系统的开发,也因为其他项目团队需 ...