JS 字符串、数值、数组、对象、函数 方法拓展
1. 字符串方法拓展
方法名 | 作用 | 实例 |
---|---|---|
includes(str, index) | 判断字符串中是否存在指定字符 str - 指定字符 index - 字符串开始位置 | “test”.includes(“t”) // true “test”.includes(“a”) // false “test”.includes(“s”, 2) // false |
startsWith(str, index) | 判断字符串是否以指定字符开始 str - 指定字符 index - 字符串开始位置 | “test”.startsWith(“t”) // true “test”.startsWith(“e”) // false “test”.startsWith(“e”, 1) // true |
endsWith(str, index) | 判断字符串是否以指定字符结尾 str - 指定字符 index - 字符串结束位置(不包含) | “test”.endsWith(“t”) // true “test”.endsWith(“e”) // false “test”.endsWith(“e”, 2) // true |
repeat(n) | 将指定字符串重复 n 次 n - 重复次数,不传默认为 0 次 | “test”.repeat() // “” “test”.repeat(2) // “testtest” |
padStart(n, str) padLeft(n, str) | 在字符串开始位置/左侧用指定字符补全 n - 补全到多少位为止,若 n 小于字符串原本长度,则不会做处理 str - 用于补全的字符,默认空格,若此字符长度不为 1 ,则 n 会按 str 的长度计算个数 | “test”.padStart(10, “a”) // “aaaaaatest” “test”.padLeft(11, “abc”) // “abcabcatest” 日期补全: String(new Date().getMonth() + 1).padStart(2, 0).padEnd(3, “月”) // 03月 “01-12”.padStart(10, “YYYY-MM-DD”) // YYYY-01-12 |
padEnd(n, str) padRight(n, str) | 在字符串结束位置/右侧用指定字符补全 n - 补全到多少位为止,若 n 小于字符串原本长度,则不会做处理 str - 用于补全的字符,默认空格,若此字符长度不为 1 ,则 n 会按 str 的长度计算个数 | “test”.padEnd(11, “a”) // “testaaaaaaa” “test”.padEnd(11, “abc”) // “testabcabca” |
2. 数值方法拓展
方法名 | 作用 | 实例 |
---|---|---|
数值类型进制写法 | 将指定10进制数值转换 | console.log(100) // 十进制 100 console.log(0x100) // 十六进制 100 --> 256 console.log(0b100) // 二进制 100 --> 4 console.log(0o100) // 八进制 100 --> 64 |
isFinite(n) | 判断 n 是否是有效数值,会进行 Number 类型转换 n - 要判断的值 | isFinite(99) // true isFinite(99/0) // false isFinite(Infinity) // false isFinite(“100”) // true |
Number.isFinite(n) | 判断 n 是否是有效数值,不会进行 Number 类型转换,只要不是 Number 类型一律返回 false n - 要判断的值 | Number.isFinite(99) // true Number.isFinite(99/0) // false Number.isFinite(Infinity) // false Number.isFinite(“100”) // false |
isNaN(n) | 判断 n 是否是 NaN (Not a number),会进行 Number 类型转换 n - 要判断的值 | isNaN(99) // false isNaN(NaN) // true isNaN(“test”) // true isNaN(“100”) // false |
Number.isNaN(n) | 判断 n 是否是 NaN (Not a number),不会进行 Number 类型转换,只有 n = NaN 时才会返回 true n - 要判断的值 | Number.isNaN(99) // false Number.isNaN(NaN) // true Number.isNaN(“test”) // false Number.isNaN(“100”) // false |
Number.isInteger(n) | 判断 n 是否是整数,不会进行 Number 类型转换 n - 要判断的值 | Number.isInteger(99) // true Number.isInteger(99.0) // true Number.isInteger(99.1) // false Number.isInteger(“99”) // false |
Number.EPSILON | 它表示 1 与 大于 1 的最小浮点数之间的差 2.220446049250313e-16 JS中小数与小数之间的算法会存在 精度丢失 问题,例如:0.1+0.2 == 0.3 // false | |
Math.trunc(n) | 抹掉 n 的小数部分返回一个整数,单纯抹小数,不做其他操作 n - 要处理的值 | Math.trunc(1.2) // 1 Math.trunc(1.8) // 1 Math.trunc(-1.2) // -1 Math.trunc(-1.8) // -1 |
Math.floor(n) | 向下取整,处理后的值比原值小 n - 要处理的值 | Math.floor(1.95) // 1 Math.floor(1.05) // 1 Math.floor(1) // 1 Math.floor(-1.95) // -2 |
Math.ceil(n) | 向上取整,处理后的值比原值大 n - 要处理的值 | Math.ceil(1.95) // 2 Math.ceil(1.05) // 2 Math.ceil(1) // 1 Math.ceil(-1.95) // -1 |
Math.sign(n) | 判断 n 的正负性,会进行 Number 类型转换 n - 要判断的值 | Math.sign(-10) // -1 Math.sign(10) // 1 Math.sign(0) // +0 Math.sign(-0) // -0 Math.sign(“test”) // NaN |
3. 数组方法拓展
方法名 | 作用 | 实例 |
---|---|---|
Array.from(params) | 将类似于数组但不是数组的数据 params 转化为数组 params - 类似于数组但不是数组,例如 JS 获取到的 DOMList | function test() { console.log(arguments[0]) // 1 console.log(arguments.map) // undefined console.log(Array.from(arguments).map) // function map() {…} } test(1,2,3,4) |
Array.of(n1,n2,…,n) | 声明一个数组,包含 n1, n2, …, n 个元素 | let arr = [1,2,3] // [1,2,3] let arr = Array(1,2,3) // [1,2,3] let arr = Array.of(1,2,3) // [1,2,3] let arr = Array(3) // [ , , ] let arr = Array.of(3) // [3] |
fill(str, startIndex, endIndex) | 填充数组、替换数组中的某一项 str - 填充的内容 startIndex - 开始填充的位置 endIndex - 结束填充的位置(不包含) | [,].fill(“test”) // [“test”, “test”] [“a”,“b”,“c”].fill(“test”, 1, 2) // [“a”, “test”, “c”] |
flat() | 数组扁平化处理,处理多维数组时用到,不会影响原数组 | [1, 2, 3, [4, 5, 6]].flat() // [1, 2, 3, 4, 5, 6] |
flatMap(fun) | 数组扁平化处理,处理多维复杂数组时用到,不会影响原数组,类似于 map 方法 fun - 回调函数,返回需要扁平化处理的属性 | let arr = [ { name: “a”, list: [1,2,3] }, { name: “b”, list: [4,5,6] }, ] arr.flatMap((n) => { return n.list }) // [1, 2, 3, 4, 5, 6] |
4. 对象方法拓展
方法名 | 作用 | 实例 |
---|---|---|
属性字面量增强写法 | - | 传统写法: let name = “test” let obj = { name: name, fun1: function(){ … } } 增强写法: let name = “test” let obj = { name, // name: name fun1(){ … } } |
属性名为变量 | - | let a = “name” let obj = { [a]: “test” // name: test } |
Object.assign(obj1, obj2, …, objn) | 合并对象 第一个 obj 会被当做目标对象,其他的为被合并对象,因此此方法会改变 obj1 的值 | let obj1 = { name: “test1” } let obj2 = { age: 20 } let obj3 = { name: “obj3的name” } Object.assign(obj1, obj2, obj3) console.log("obj1: ", obj1) // obj1: {name: “obj3的name”, age: 20} |
Object.is(val1, val2) | 判断两个值是否相等,只接受 2 个参数 | NaN == NaN // false NaN === NaN // false Object.is(6, 6) // true Object.is(6, “6”) // false Object.is({}, {}) // false Object.is(NaN, NaN) // true Object.is(+0, -0) // false +0 === -0 // true |
5. 函数方法拓展
方法名 | 作用 | 实例 |
---|---|---|
参数默认值 | - | test(a, b = 1, c = 2) {} |
剩余参数 | - | test(…args) { console.log(args) // [1,2,3] } test(1,2,3) |
箭头函数 | - | https://blog.csdn.net/CxZzzE/article/details/125563499 |
笔记来源: https://www.bilibili.com/video/BV1w8411s7g3/?p=11&spm_id_from=pageDriver&vd_source=8469bc86f044a56d2c8c7be5d1770d9a