ES6新增的padStart()方法和padEnd()方法

本文详细介绍了JavaScript中padStart()与padEnd()方法的使用技巧,包括如何在字符串前后填充字符以达到指定长度,并提供了多种参数类型的填充示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

padStart()

用于在开头位置补全字符串

语法:

'abc'.padStart(10, '0123456789')
// '0123456abc'

 参数:

接受两个参数:

第一个参数是用来指定字符串的长度,如果该值低于当前字符串的长度,则将按原样返回当前字符串

第二个参数是用来补全的字符串,如果此字符串太长而无法保持在目标长度内,则会截断该字符串并应用最左侧的部分,如果省略,将会用空格补全。

"abc".padStart(3,"a")    //abc

'abc'.padStart(10, '0123456789')    //"0123456abc"

'abc'.padStart(10)        // "       abc"

示例:

第二个参数可以传入任意类型的值。

如果传入的参数和原有的参数加起来还没有第一个参数的length大,那么空缺的位置将会用第二个参数来补全。

如果传入的参数是 [] 那么将会原样输出

如果传入的参数是 {} 那么浏览器会将 {} 解析成 [object Object] 来输出。

'abc'.padStart(8, false);    //"falseabc"

'abc'.padStart(8, null);        //"nullnabc"

'abc'.padStart(8, []);        //"abc"

'abc'.padStart(8, {});        //"[objeabc"

'abc'.padStart(15, false);    //"falsefalsefaabc"

 

 padEnd()

和上面的基本都是一样的用法。

唯一不同的点是padStart()是从字符串的前面开始补全, padEnd()是从字符串的后面开始补全

'abc'.padEnd(8, false);        //"abcfalse"

'abc'.padEnd(8, null);        //"abcnulln"

'abc'.padEnd(8, []);           //"abc"

'abc'.padEnd(8, {});            //"abc[obje"

 案例:

每次还要手动计算字符串的长度这样无疑是不好的方法,有解决方法看下面。

// 原本字符串
var str = "abc";
console.log(str.padStart(5,'0'))
//00abc


// 要填充的字符串
var padstr = "xxx";
console.log(str.padStart(padstr.length + str.length,padstr));
//xxxabc;

兼容性:

上面的方法都是es6新增的在IE中是完全不支持的,如果想兼容IE请自行百度,我还没搞懂

<think>好的,用户让我介绍一下ES6以上新增的属性高阶函数。首先,我需要回忆一下ES6之后的主要版本,比如ES7(ES2016)、ES8(ES2017),一直到最近的ES14(ES2023),然后分别整理每个版本中新增的特性。 用户可能已经了解ES6的特性,比如箭头函数、模板字符串、解构赋值等,所以现在需要聚焦在ES6之后的版本。首先,我需要分版本列举新增的属性方法,比如数组方法、对象方法字符串方法,以及新的语法特性如async/await、可选链操作符等。 然后,关于高阶函数,ES6之后是否有新增的高阶函数呢?比如数组的flatMap是在ES10引入的,可能属于高阶函数。需要确认哪些数组方法属于高阶函数,例如map、filter、reduce这些是ES5就有的,但像flatMap是后来加入的,应该包括进去。 接下来,要组织内容结构,可能需要先分版本介绍新增属性,再专门列出高阶函数部分。要注意使用中文,并且按照用户的要求,行内数学表达式用$...$,但这里可能用不上数学公式,所以主要关注代码示例的正确格式,比如使用反引号包裹代码块。 需要检查每个特性的正确性,比如可选链操作符是ES2020引入的,空值合并运算符也是同一版本。Promise.anyWeakRef是ES2021的。数组的flatflatMap是ES2019的。这些都需要准确对应到正确的ES版本。 另外,用户提到“高阶函数”,可能需要明确高阶函数的定义,即接收函数作为参数或返回函数的函数。因此,在数组方法中,像flatMap虽然处理数组,但它接收一个映射函数,属于高阶函数。此外,Promise相关的方法如then、catch也是高阶函数,但可能用户更关注数组的高阶函数。 还要注意不要遗漏重要的特性,比如ES6的模块导入导出虽然不是方法,但属于重要特性,不过用户可能更关注属性高阶函数,所以可能不需要深入模块系统。 最后,确保回答结构清晰,分点列出,帮助用户逐步理解。可能需要使用代码示例来说明用法,比如展示flatMap的使用方式,或者可选链操作符的例子。同时,需要提醒用户这些特性在不同环境下的兼容性,可能需要使用Babel等工具进行转译。 总结步骤: 1. 分ES版本介绍新增属性与方法,从ES7到ES14。 2. 单独列出新增的高阶函数,特别是数组相关的方法。 3. 每个特性给出简要说明示例代码。 4. 确保术语准确,版本对应正确。 5. 检查是否有遗漏的重要特性,如异步迭代、对象扩展等。 6. 最后总结,并提醒兼容性问题。 现在开始组织内容,确保符合用户的要求,结构清晰,语言简洁。</think>以下为ES6ES2015)之后新增的重要特性与高阶函数详解,按版本分类说明: --- ### 一、ES7(ES2016新增 1. **`Array.prototype.includes`** 检查数组是否包含指定元素,返回布尔值 ```javascript [1, 2, 3].includes(2); // true ``` 2. **指数运算符`**`** 简化幂运算 ```javascript 2 ** 3; // 8(等同于Math.pow(2,3)) ``` --- ### 二、ES8(ES2017)新增 1. **`async/await`** 异步操作语法糖,用同步方式写异步代码 ```javascript async function fetchData() { const res = await fetch('api/data'); return res.json(); } ``` 2. **`Object.values()`/`Object.entries()`** 获取对象值/键值对数组 ```javascript Object.values({a:1, b:2}); // [1,2] Object.entries({a:1, b:2}); // [['a',1], ['b',2]] ``` 3. **字符串填充`padStart()`/`padEnd()`** 按指定长度填充字符串 ```javascript '5'.padStart(3, '0'); // '005' ``` --- ### 三、ES9(ES2018)新增 1. **对象扩展运算符`...`** 合并/复制对象 ```javascript const merged = {...obj1, ...obj2}; ``` 2. **`Promise.prototype.finally`** Promise无论成功失败都执行 ```javascript fetch(url) .then(res => res.json()) .finally(() => stopLoading()); ``` --- ### 四、ES10(ES2019)新增 1. **`Array.flat()/flatMap()`** 数组扁平化与映射后扁平化 ```javascript [1, [2,3]].flat(); // [1,2,3] [1,2].flatMap(x => [x*2]); // [2,4] ``` 2. **`Object.fromEntries()`** 键值对数组转对象 ```javascript Object.fromEntries([['a',1], ['b',2]]); // {a:1, b:2} ``` --- ### 五、ES2020(ES11)新增 1. **可选链操作符`?.`** 安全访问嵌套属性 ```javascript user?.address?.city; // 不会因undefined报错 ``` 2. **空值合并运算符`??`** 更严谨的默认值设置 ```javascript const value = input ?? 'default'; ``` --- ### 六、高阶函数新增 1. **`Array.prototype.flatMap`(ES10)** 先映射后扁平化,比`map()+flat()`更高效 ```javascript const arr = [1,2]; arr.flatMap(x => [x, x*2]); // [1,2,2,4] ``` 2. **`Promise.allSettled`(ES2020)** 等待所有Promise完成(无论成功/失败) ```javascript Promise.allSettled([promise1, promise2]) .then(results => {/*处理结果数组*/}); ``` --- ### 七、其他重要特性 - **动态导入`import()`(ES2020)** 按需加载模块 ```javascript const module = await import('./module.js'); ``` - **BigInt类型(ES2020)** 支持超大整数运算 ```javascript const bigNum = 9007199254740991n; ``` --- ### 总结建议 1. **兼容性处理**:使用Babel等工具转译新特性 2. **优先应用场景**:可选链、空值合并、`flatMap`可显著简化代码逻辑 3. **性能注意**:`flat(Infinity)`慎用于极深嵌套数组
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值