js (ECMAScript) 对数据处理的 方法、属性总结
注意:原生类型的数据本身是没有属性、方法的。但是 有的原始类型(如 string),当他 调用属性或方法时,JS引擎会先对原始类型数据进行包装(即隐式的转换为相应的对象) https://www.cnblogs.com/websir/p/5192095.html
一、数字(整型不会隐式转换成对象,需要自己手动通过 new Number(123) 转换成 Number对象;浮点型数据 会 隐式转化)
https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Number
- 实例属性:
constructor、prototype ---- 【这两个属性所有的对象都有,下面的就不写了】
- 实例方法:(es6及以上的方法属性,字体设为 青色)
toFixed【转换为有小数点的字符串】、toString、toExponential【科学计数法表示,变成字符串类型】、toLocaleString【数字在特定语言环境下的表示字符串,功能强大】 toPrecision【类似toFixed功能】 不常用:sFinite、toExponential(x)【转化为 指数 计算法】、toPrecision(x)【转化为 类似指数计算法的指定长度数据】、 valueOf()、isInteger【判断给定的参数是否为整数】、isSafeInteger【判断参数值是否是一个"安全整数"】
注意:整数直接调用toString 会报错,如2.toString,因为js会把 2.解析为小数点。可以写成 (2).toString()。
- 构造函数的方法:
isNaN【判断值是否为NaN】、isFinite【判断值是否为有限数】、isInteger【判断值是否为整型】
二、字符串(会隐式转换成对象) :http://www.runoob.com/jsref/jsref-obj-string.html
属性:
length
方法:
indexOf、lastIndexOf、replace【某些字符替换另一些字符】、toUpperCase【大小写转换】、toLowerCase、split【转为数组】、charAt【指定位置的字符】、
charCodeAt【指定位置字符的Unicode码】、includes【是否包含指定字符串】、match【匹配】、search【类似indexOf,查找匹配字符串的下标】、
slice【截取指定下标位置的字符串】、substr【截取指定长度的字符串】、substring【这个功能和slice类似】、trim【去除字符串两边的空白】、
startsWith【是否以指定的子字符串开头】、endsWith【通startWith】
不常用:concat【字符串拼接,一般用+号】、fromCharCode、lastIndexOf、repeat、toLocaleLowerCase、toLocaleUpperCase、valueOf、toString
三、正则表达式 http://www.runoob.com/jsref/jsref-obj-regexp.html
属性:
global【是否设置g修饰符】、ignoreCase、multiline、lastIndex【规定下次匹配的起始位置】、source【返回正则表达式的匹配模式】
方法:
exec【检索字符串中指定的值 的 位置】、test【检索字符串中指定的值】
不常用:toString
四、数组 http://www.runoob.com/jsref/jsref-obj-array.html 或 https://www.cnblogs.com/Faith-Yin/p/12360892.html
- 实例属性:
length
- 实例方法:
concat【连接两个或更多的数组】、forEach【数组每个元素都执行一次回调函数】、indexOf【搜索数组中的元素,并返回它所在的位置】、lastIndexOf【和indexOf功能一样,从后面找】、
join【把数组的所有元素放入一个字符串,默认逗号分隔】、map【通过根据指定函数,返回处理后的数组】、pop【删除数组的最后一个元素并返回删除的元素】、
push【向数组的末尾添加一个或更多元素,并返回新的长度】、shift【删除并返回数组的第一个元素】、unshift【数组的开头添加一个或更多元素,并返回新的长度】、
reduce【根据指定的函数,将数组元素计算为一个值】、reduceRight【和reduce一样的用法,不过是从右边开始计算】、reverse【反转数组的元素顺序】、
slice【选取数组的的一部分,并返回一个新数组】、some【检测数组元素中是否有元素符合指定条件】、every【检测数组元素的每个元素是否都符合条件】、
sort【通过指定函数,对数组进行排序】、splice【从数组中添加或删除元素】、filter【过滤数组,返回一个满足要求的数组】
不常用:valueOf【返回数组对象的原始值】、toString【把数组转换为字符串,并返回结果。是以逗号分隔的。一般使用join方法实现】
es6 新增的方法:
find【找到第一个符合条件的成员】、findIndex【找到第一个符合条件的成员的索引值】、includes【判断一个数组是否包含一个指定的值】、fill【使用固定值来填充数组(改变原数组)】、
keys【遍历数组的键名,返回键名可迭代对象】、values【遍历数组键值,返回键值可迭代对象】、entries【遍历数组的键名和键值,返回可迭代对象】、
copyWithin【拷贝数组指定项,填充原数组】、filter【过滤数组,返回一个满足要求的数组】、flat【对数组内嵌套的数组“拉平”】、flatMap、
- 构造函数的方法:
from【类数组/迭代对象 转化为数组】、of【将一组值转换成数组】、isArray【判断对象是否为数组】、
五、Date 对象 (实例对象,通过new Date() 创建,里面参数不同,创建不同的时间对象) http://www.runoob.com/jsref/jsref-obj-date.html 或 https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Date(推荐,MDN)
创建 Date 对象的4中方式:new Date() 的参数不同,最后创建的都是时间对象,只是时间不同而已。 https://blog.csdn.net/yue31313/article/details/79609661
new Date() // Thu Mar 21 2019 21:41:25 GMT+0800 (中国标准时间) 相当于传入 当前时间点 作为参数获取的时间对象
new Date(2017,06,06) // Thu Jul 06 2017 00:00:00 GMT+0800 (中国标准时间) 过去某个时间的时间对象 (以整数作为参数,有几种模式) new Date(“2017/06/06”) // Tue Jun 06 2017 00:00:00 GMT+0800 (中国标准时间) 过去某个时间的时间对象 (以字符串作为参数,有几种模式) new Date(毫秒数) // Thu Jan 01 1970 08:00:00 GMT+0800 (中国标准时间) 从1970年1月1日开始算起的毫秒数 的对应的时间对象
注:所有主流浏览器都支持的格式为: var dateTime = new Date("2017/09/12 13:42:00"); 即参数为 yyyy/MM/dd hh:mm:ss 格式 字符串
- 实例方法:
getFullYear【获取对象中的年,4位数返回】、getMonth【获取对象中的月,获取的月份要加1】、getDate【获取 Data对象中的 几号】、getDay【获取 Data对象中的 星期几】、
getHours【获取对象中的 时】、getMinutes【获取对象中的分】、getSeconds【获取对象的秒】、getMilliseconds【获取对象中的 毫秒】、getTime【获取时间戳】
toDateString【将 Date对象的部分(日期),以字符串(Fri Mar 22 2019)输出】、
toString【将 Date对象,转换为字符串(Fri Mar 22 2019 13:07:00 GMT+0800 (中国标准时间))】、
toTimeString【将 Date对象的部分(时间),以字符串(13:11:54 GMT+0800 (中国标准时间))输出】、
toLocaleDateString【根据本地时间格式,将 Date对象的 年/月/日 输出】、toLocaleTimeString【根据本地时间格式,把Date对象的 时:分:秒 输出】、
toLocaleString【根据本地时间格式,把Date对象的 年月日 时分秒 输出】
不常用:
getUTCDate【根据世界时从 Date 对象返回月中的一天 (1 ~ 31)】、toISOString【ISO标准时间格式,字符串】、toJSON【ISO标准时间格式,以 JSON 数据格式返回日期字符串】、
getTimezoneOffset【与标准时间的差,以分为单位】、
setFullYear【设置时间对象中的年】、setMonth()、setDate【设置时间对象中 几号】、setHours()、setMinutes()、setSeconds()、setMilliseconds()、
setTime【以毫秒设置Date对象】、valueOf【返回 Date 对象的原始值,即一个时间戳】
重点:1、时间对象是可以直接比较大小的,如 new Date('2018-8-8 17:35:00')>new Date('2018-8-8 19:20:11') // true。
2、时间对象 一旦参与运算,就会自动中转化为时间戳。所以上面的时间可以进行比较。 如
+new Date() // 输出 1575438671452
- 构造函数的方法(非时间对象):
parse【获取某个时间到1970年的时间戳】(即转化为时间戳,参数可以是时间字符串,也可以是时间对象)
注意:原生的 Date 对象 本身存在一点问题的,这里说明下
- 同一日期,不同格式获取到的时间对象的时间点是不一样的。如
new Date('2020/1/1') // Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间) new Date('2020-1-1') // Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间) new Date('2020 1 1') // Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间) new Date('2020/01/01') // Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间) new Date('2020-01-01') // Wed Jan 01 2020 08:00:00 GMT+0800 (中国标准时间) new Date('2020 01 01') // Wed Jan 01 2020 00:00:00 GMT+0800 (中国标准时间)
说明:同一日期(主要是日期,设定时间就不会),获取到不同的时间戳值,这就是一个bug问题了。在比较时间和运算就会出问题,所以再开发中应尽可能规避这个问题。
解决方案:目前我们就先规避吧,能用’/‘拼接的就不用’-‘,即便是用了,也最好替换成’/'再做判断。实在规避不了的,就强制设置时间参数为00:00:00。基本上可以解决大部分的问题。
六、Math 对象 (不用创建,本身就是实例对象) http://www.runoob.com/jsref/jsref-obj-math.html
属性:
PI【圆周率】、E【算术常量 e】 其它几个基本不用,这里不提
方法:(一般数值是作为方法传进去的)
ceil【对数进行上舍入】、floor【对数进行下舍入】、max(x,y,z,...,n)【返回 x,y,z,...,n 中的最高值】、min【返回最低值】、
pow(x,y)【 x 的 y 次幂】、random【0~1随机数】、round【四舍五人】、
不常用:abs、三角函数、exp(x)、log(x)、sqrt(x)
七、Error 对象 http://www.runoob.com/jsref/jsref-obj-error.html
属性: Error 对象现有属性,没有方法
name【设置或返回一个错误名】、message【设置或返回一个错误信息】
八、全局方法: http://www.runoob.com/jsref/jsref-obj-global.html (typeof 属于关键字,不是方法)
方法:
decodeURI【解码某个编码的 URI】、encodeURI【把字符串编码为 URI】、isNaN【检查某个值是否是数字,不区分数据类型】、Number【转换为数字,转不了的 返回 NaN】、
decodeURIComponent【解码一个编码的 URI 组件,比decodeURI编码的字符更多】、encodeURIComponent【同理】、
parseFloat【字符串转变为一个浮点数,转不了的 返回NaN】、parseInt【字符串变成10进制的整型,任意进制的数据都可以转化】、String【转换为字符串】
不常用:escape【对字符串进行编码】、unescape【对由 escape编码的字符串进行解码】、eval【把字符串作为脚本来执行】、isFinite
字符串(URL)编码 方法: 参考 https://www.cnblogs.com/wfblog/p/10582944.html
九、 函数对象:
属性:
es6的属性:name【返回定义时的函数名】、
十、FormData 对象 https://developer.mozilla.org/zh-CN/docs/Web/API/FormData
方法:
append【追加新的属性值】、delete【删除一个键值对】、get【返回与给定键关联的第一个值】、getAll【返回与给定键关联的所有值的数组】、
set【设置属性值,如果有就覆盖掉】、has【是否包含某些键】、
十一、URLSearchParams 对象【解析查询字符串的对象】 https://developer.mozilla.org/zh-CN/docs/Web/API/URLSearchParams
方法:
append【插入一个指定的键/值对作为新的搜索参数】、delete【删除指定的搜索参数及其对应的值】、get【获取指定搜索参数的第一个值】、getAll【返回数组】、
has【判断是否存在此搜索参数】、set【设置一个搜索参数的新值】、sort【按键名排序】,toString【返回搜索参数组成的字符串】 entries【遍历用】、keys【遍历用】、values【遍历用】
十二、 URL 对象 (实例对象,通过new URL() 创建) https://developer.mozilla.org/zh-CN/docs/Web/API/URL
- 实例属性:
hash、hostname、href、origin、pathname【以 '/' 起头紧跟着 URL 文件路径的 DOMString】、port、protocol、search、
searchParams【是一个只读的URLSearchParams对象】、username【淘汰】、password【淘汰】
- 实例方法:
toString【返回完整的URL字符串,即url.href的值】、toJson【和toString返回是一样的值】
- 构造函数的方法:
createObjectURL、revokeObjectURL
十三、
es6 中各种方法请参考:https://www.runoob.com/w3cnote/es6-tutorial.html
一、Symbol (是原始数据类型): let sy = Symbol("KK"); (个人理解:Symbol数据,可让两个一样的字符串,表达的是两个不同的名称,即 Symbol() != Symbol())
用法: 由于每一个 Symbol 的值都是不相等的,所以 Symbol 作为对象的属性名,可以保证属性不重名。(感觉没什么用,虽然使用Symbol 不会出现重名覆盖的问题,但是)
1、Symbol 是原始数据类型,所以 sy 没有属性、方法。
2、Symbol 有两个全局方法: Symbol.for()【全局搜索 Symbol 中是否有该字符对应的 Symbol 值,有九返回Symbol 值】、 Symbol.keyFor()【返回一个已登记的 Symbol 类型值的 key】
二、Map(映射)对象: (map对象 类似 object对象,但是键名可以是任意类型的数据。字典型数据上常用,字典名可以是任意数据) https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Map
属性:
size【键值对的数量】、constructor【对象原型】
方法:
set【设值】、get【取值】、has【是否有值】、forEach【Map的迭代】、clear【清除对象中的元素】、delete【移除某个键值对】、 其他的用法参考链接
特殊用法:for...of【Map的迭代】、Map 与 Array的转换
三、Set(集合)对象:( set对象 类似 数组,本质是一个集合,set对象的键是数字,不能指定键的名称,目前 不能通过键获取值,需要遍历实现) https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Set
属性:
size【set对象的值的个数】、constructor【对象原型】
方法:
add【设值】、has【是否有值】、forEach【Set的迭代】、clear【清除对象中的元素】、delete【移除某个元素】、 其他的用法参考链接
特殊用法:利用set对象的储存值的唯一性,可以实现 数组去重、并集、交集、差集 等功能
四、Promise 对象(注意,Promise只是一个对象 不是方法,参数是一个回调函数,创建对象时立即执行):
如果要实现 调用某个函数后 变成一个 Promise 对象,只要这个函数 return 出来一个promise 对象就可以了。
![](https://images.cnblogs.com/OutliningIndicators/ContractedBlock.gif)
function ajax(URL) { return new Promise(function (resolve, reject) { // return 一个 promise对象 var req = new XMLHttpRequest(); req.open('GET', URL, true); req.onload = function () { if (req.status === 200) { resolve(req.responseText); // pending 状态 变成 fulfilled(成功) } else { reject(new Error(req.statusText)); // pending 状态 变成 rejected(失败) } }; req.onerror = function () { reject(new Error(req.statusText)); }; req.send(); }); }
方法:
Promise 实例的方法: then、cath
Promise 静态方法: Promise.resolve【将现有对象转为Promise对象】、Promise.reject【将现有对象转为Promise对象】
五、Object对象:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Reference/Global_Objects/Object
方法:
Object实例的方法: Object静态方法:Object.assign【通过复制一个或多个对象来创建一个新的对象】、Object.create【使用指定的原型对象和属性创建一个新的对象】、
Object.getOwnPropertyDescriptor【返回对象指定的属性配置】、 ...
个别API说明下:
一、toLocaleString 方法:表示 把一个对象 根据语言环境,转话为对应语言下的字符串。比如 数字、时间 ,不同国家有不同的表示格式。https://juejin.cn/post/7049885477888852004
- 包含这个API 的类有
Array.prototype.toLocaleString([locales[,options]]) Number.prototype.toLocaleString([locales[,options]]) Date.prototype.toLocaleString([locales[,options]])
他们的参数结构都一样,locales表示语言代码。后面options有哪些属性,看 MDN官网 toLocaleString
不同类型的对象,option属性也是不同的。下面介绍几个常用的属性 - Array类型的好像不同地区的都一样。
- Number类型对象的 option属性有: style,currency
// 1、将数字进行千分位切割展示 var num = 1331231 console.log(num.toLocaleString()) // 1,331,231 // 2、将数字转为货币样式 var number = 123456.789; console.log(number.toLocaleString('zh', { style: 'currency', currency: 'EUR' })); //€123,456.79 console.log(number.toLocaleString('zh', { style: 'currency', currency: 'CNY' })); //¥123,456.79 console.log(number.toLocaleString('zh', { style: 'currency', currency: 'CNY',currencyDisplay:'code' })); //CNY 123,456.79 console.log(number.toLocaleString('zh', { style: 'currency', currency: 'CNY',currencyDisplay:'name' })); //123,456.79人民币 // 3、将数字转为百分比形式 var num1 = 0.12 var num2 = 2.45 console.log(num1.toLocaleString('zh',{style:'percent'})) // 12% console.log(num2.toLocaleString('zh',{style:'percent'})) // 245% // 4、将纯数字/字符串数组所有元素用逗号拼接起来 var numArray = [12,564,'55',5,'8'] console.log(numArray.toLocaleString('zh')) // 12,564,55,5,8
- Date类型对象的 option属性有: hour12、weekday、year、month、day
new Date().toLocaleString('zh-CN', {hour12: false}) // 是否12小时制 new Date().toLocaleString('zh-CN', {weekday: "long"}) // 星期二 new Date().toLocaleString('zh-CN', {weekday: "short"}) // 周二 new Date().toLocaleString('zh-CN', {year: "numeric"}) // 2022年 new Date().toLocaleString('zh-CN', {month: "long"}) // 五月 new Date().toLocaleString('zh-CN', {month: "short"}) // 5月 new Date().toLocaleString('zh-CN', {day: "numeric"}) // '31日' new Date().toLocaleString('zh-CN', {dateStyle: "full"}) // 2022年5月31日星期二 new Date().toLocaleString('zh-CN', {dateStyle: "long"}) // 2022年5月31日 new Date().toLocaleString('zh-CN', {dateStyle: "short"}) // 2022/5/31