字符串的新增方法
includes()
// 判断字符串中是否含有某些字符// 1.基本用法// console.log('abc'.includes('a'));// console.log('abc'.includes('ab'));// console.log('abc'.includes('bc'));// console.log('abc'.includes('ac')); // false// 2.第二个参数// 表示开始搜索的位置,默认是 0// console.log('abc'.includes('a'));// console.log('abc'.includes('a', 0));// console.log('abc'.includes('a', 1)); // false// 3.应用// https://www.imooc.com/course/list// https://www.imooc.com/course/list?c=fe&sort=pop&name=valuelet url = 'https://www.imooc.com/course/list?';const addURLParam = (url, name, value) => {url += url.includes('?') ? '&' : '?';url += `${name}=${value}`;return url;};url = addURLParam(url, 'c', 'fe');console.log(url);url = addURLParam(url, 'sort', 'pop');console.log(url);
padStart() 和 padEnd()
// 补全字符串长度// 1.基本用法// console.log('x'.padStart(5, 'ab'));// console.log('x'.padEnd(5, 'ab'));// console.log('x'.padEnd(4, 'ab'));// 2.注意事项// 原字符串的长度,等于或大于最大长度,不会消减原字符串,字符串补全不生效,返回原字符串// console.log('xxx'.padStart(2, 'ab'));// console.log('xxx'.padEnd(2, 'ab'));// 用来补全的字符串与原字符串长度之和超过了最大长度,截去超出位数的补全字符串,原字符串不动// console.log('abc'.padStart(10, '0123456789'));// console.log('abc'.padEnd(10, '0123456789'));// 如果省略第二个参数,默认使用空格补全长度// console.log('x'.padStart(4));// console.log('x'.padEnd(4));// 3.应用// 显示日期格式// 2020// 10// 10// 2020-10-10// 2020-01-01// console.log('10'.padStart(2, 0));// console.log('1'.padStart(2, 0));
trimStart() 和 trimEnd()
// 清除字符串的首或尾空格,中间的空格不会清除// 1.基本用法// const s = ' a b c ';// console.log(s);// // console.log(s.trimStart());// // console.log(s.trimLeft());// // console.log(s.trimEnd());// // console.log(s.trimRight());// console.log(s.trim());// 2.应用const usernameInput = document.getElementById('username');const btn = document.getElementById('btn');btn.addEventListener('click',() => {console.log(usernameInput.value);// 验证console.log(usernameInput.value.trim());if (usernameInput.value.trim() !== '') {// 可以提交console.log('可以提交');} else {// 不能提交console.log('不能提交');}// 手动提交},false);
数组的新增方法
includes()
// 1.基本用法// 判断数组中是否含有某个成员// console.log([1, 2, 3].includes('2')); // false// console.log([1, 2, 3].includes(2));// 第二个参数表示搜索的起始位置,默认值是 0// console.log([1, 2, 3].includes(2, 2));// 基本遵循严格相等(===),但是对于 NaN 的判断与 === 不同,includes 认为 NaN === NaN// console.log(NaN === NaN);// console.log([1, 2, NaN].includes(NaN));// 2.应用// 去重// [1, 2, 1];const arr = [];for (const item of [1, 2, 1]) {if (!arr.includes(item)) {arr.push(item);}}console.log(arr);
Array.from()
// 将其他数据类型转换成数组// 1.基本用法// console.log(Array.from('str'));// 2.哪些可以通过 Array.from() 转换成数组// 2.1.所有可遍历的// 数组、字符串、Set、Map、NodeList、arguments// console.log(Array.from(new Set([1, 2, 1])));// console.log([...new Set([1, 2, 1])]);// 2.2.拥有 length 属性的任意对象// const obj = {// '0': 'a',// '1': 'b',// name: 'Alex',// length: 3// };// console.log(Array.from(obj));// console.log([...obj]); // ×// 3.第二个参数// 作用类似于数组的 map 方法,用来对每个元素进行处理,将处理后的值放入返回的数组// console.log(// [1, 2].map(value => {// return value * 2;// })// );// console.log(Array.from('12', value => value * 2));// console.log(Array.from('12').map(value => value * 2));// 4.第三个参数Array.from('12',value => {console.log(this);},document);Array.from('12',function () {console.log(this);},document);
find() 和 findIndex()
// find():找到满足条件的一个立即返回// findIndex():找到满足条件的一个,立即返回其索引// 1.基本用法// console.log(// [1, 5, 10, 15].find((value, index, arr) => {// // console.log(value, index, arr);// console.log(this);// return value > 9;// }, document)// );// [1, 5, 10, 15].find(function (value, index, arr) {// // console.log(value, index, arr);// console.log(this);// return value > 9;// }, document);// console.log(// [1, 5, 10, 15].findIndex((value, index, arr) => {// // console.log(value, index, arr);// return value > 9;// }, document)// );// 2.应用// const students = [// {// name: '张三',// sex: '男',// age: 16// },// {// name: '李四',// sex: '女',// age: 22// },// {// name: '王二麻子',// sex: '男',// age: 32// }// ];// console.log(students.find(value => value.sex === '女'));// console.log(students.findIndex(value => value.sex === '女'));
对象的新增方法
Object.assign()
// 用来合并对象// 1.基本用法// Object.assign(目标对象, 源对象1,源对象2,...): 目标对象// const apple = {// color: '红色',// shape: '圆形',// taste: '甜'// };// const pen = {// color: '黑色',// shape: '圆柱形',// use: '写字'// };// console.log(Object.assign(apple, pen));// Object.assign 直接合并到了第一个参数中,返回的就是合并后的对象// console.log(apple);// console.log(Object.assign(apple, pen) === apple);// 可以合并多个对象// console.log(Object.assign({}, apple, pen));// console.log(apple);// console.log({ ...apple, ...pen });// 2.注意事项// 2.1.基本数据类型作为源对象// 与对象的展开类似,先转换成对象,再合并// console.log(Object.assign({}, undefined));// console.log(Object.assign({}, null));// console.log(Object.assign({}, 1));// console.log(Object.assign({}, true));// console.log(Object.assign({}, 'str'));// 2.2.同名属性的替换// 后面的直接覆盖前面的// const apple = {// color: ['红色', '黄色'],// shape: '圆形',// taste: '甜'// };// const pen = {// color: ['黑色', '银色'],// shape: '圆柱形',// use: '写字'// };// console.log(Object.assign({}, apple, pen));// 3.应用// 合并默认参数和用户参数const logUser = userOptions => {const DEFAULTS = {username: 'ZhangSan',age: 0,sex: 'male'};const options = Object.assign({}, DEFAULTS, userOptions);// const options = Object.assign({}, DEFAULTS, undefined);console.log(options);};logUser();// logUser({});// logUser({ username: 'Alex' });
Object.keys()、Object.values() 和 Object.entries()
// 1.基本用法// const person = {// name: 'Alex',// age: 18// };// console.log(Object.keys(person));// console.log(Object.values(person));// console.log(Object.entries(person));// 2.与数组类似方法的区别// console.log([1, 2].keys());// console.log([1, 2].values());// console.log([1, 2].entries());// console.log(person.keys);// 数组的 keys()、values()、entries() 等方法是实例方法,返回的都是 Iterator// 对象的 Object.keys()、Object.values()、Object.entries() 等方法是构造函数方法,返回的是数组// 3.使用 for...of 循环遍历对象const person = {name: 'Alex',age: 18};// for (const key of Object.keys(person)) {// console.log(key);// }// for (const value of Object.values(person)) {// console.log(value);// }// for (const entries of Object.entries(person)) {// console.log(entries);// }// for (const [key, value] of Object.entries(person)) {// console.log(key, value);// }// Object.keys()/values()/entires() 并不能保证顺序一定是你看到的样子,这一点和 for in 是一样的
