ES6——扩展

3 篇文章 0 订阅

一、字符串的扩展

1、模板字符串和标签模板 `xxx`的用法,hin方便哦。

// 模版字符串
'asdffdsa'
"asdfasdf"

`asdfasdffsa`

const xiaoming = {
	name: 'xiaoming',
	age: 14,
	say1: function() {
		console.log('我叫' + this.name.toUpperCase() + ', 我今年' + this.age + '岁!');
	},
	say2: function() {
		console.log(`我叫${ `Mr.${ this.name.toUpperCase() }` }, 我今年${ this.age }岁!`);
	}
}

xiaoming.say1();
xiaoming.say2();






const getImoocCourseList = function() {
	// ajax
	return {
		status: true,
		msg: '获取成功',
		data: [{
			id: 1,
			title: 'Vue 入门',
			date: 'xxxx-01-09'
		}, {
			id: 2,
			title: 'ES6 入门',
			date: 'xxxx-01-10'
		}, {
			id: 3,
			title: 'React入门',
			date: 'xxxx-01-11'
		}]
	}
};

const { data: listData, status, msg } = getImoocCourseList();

function foo(val) {
    return val.replace('xxxx', 'xoxo');
}

if (status) {
    let arr = [];

    listData.forEach(function({ date, title }) {

        // arr.push(
        // 	'<li>\
        // 		<span>' + title + '</span>' +
        // 		'<span>' + date + '</span>' +
        // 	'</li>'
        // );

        arr.push(
            `
				<li>
					<span>${ `课程名: ${ title }` }</span>
					<span>${ foo(date) }</span>
				</li>
			`
        );

    });

    let ul = document.createElement('ul');
    ul.innerHTML = arr.join('');

    document.body.appendChild(ul);

} else {
    alert(msg);
}

2、部分新方法 padStart padEnd repeat startsWith endsWith includes

// 部分新方法

// padStart padEnd

{
	let str = 'i';

	let str1 = str.padStart(5, 'mooc');
	console.log(str1);

	let str2 = str.padEnd(5, 'mooc');
	console.log(str2);
}

// repeat
{
	   

	function repeat(str, num) {
		return new Array(num + 1).join(str);
	}
	console.log(repeat('s', 3));
}

// startsWith endsWith
{
	const str = 'A promise is a promsie';

	console.log(str.startsWith('B'));
	console.log(str.startsWith('A pro'));

	console.log(str.endsWith('promsie'));
	console.log(str.endsWith('A'));
}

// includes
{
	const str = 'A promise is a promise';

	// if (str.indexOf('promise') !== -1) {
	if (~str.indexOf('promise')) {
		console.log('存在1');
	}

	if (str.includes('a promise')) {
		console.log('存在2');
	}
}

3、for-of的用法

let str = 'PROMISE';

/***************************************************************/
// ES6之前遍历字符串的方式
// 使用for循环

for (var i = 0, len = str.length; i < len; i ++) {
	console.log(str[i]);
	console.log(str.charAt(i));
}


/***************************************************************/
// 转成数组后遍历
var oStr = Array.prototype.slice.call(str);
var oStr = str.split('');

const oStr = [...str];
const [...oStr] = str;

oStr.forEach(function(word) {
	console.log(word);
});

console.log(oStr);


// 有时候遍历是为了操作字符串
// 对全是英文的字符串中的大写字符加密 A -> 100  B -> 99。。。
const map = {A: '100', B: '99', C: '98', D: '97', E: '96', F: '95', G: '94', H: '93', I: '92', J: '91', K: '90', L: '89', M: '88', N: '87', O: '86', P: '85', Q: '84', R: '83', S: '82', T: '81', U: '80', V: '79',W: '78',X: '77',Y: '76', Z: '75'};
const words = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ';

oStr.forEach(function(word, index) {
	if (words.includes(word)) oStr[index] = map[word];
});

console.log(oStr.join(''));

/***************************************************************/
// 使用for-of遍历字符串
for (let word of str) {
	console.log(word);
}

let newStr = '';
for (let word of str) {
	if (words.includes(word)) newStr += map[word];
}
console.log(newStr)

/***************************************************************/
// ? \u1f436 unicode码(点)。emoji

console.log('\u1f436');
console.log('\u{1f436}');

// Unicode是一项标准 包括字符集、编码方案等
// 他是为了解决传统的字符编码方案的局限而产生的,为每种语言中的每个字符设定了统一并且唯一的二进制编码,以满足跨语言、跨平台进行文本转换、处理的要求。

// codePointAt 获取字符串中对应字符的一个码点
'?'.codePointAt(0);

// at 根据下标取字符
'?abc'.at(0)     ?

二、正则扩展

const regexp1 = /^a/g;

const regexp2 = new RegExp('^a', 'g');
const regexp3 = new RegExp(/a/g);
const regexp4 = new RegExp(/a/);

console.log('aabbcc'.match(regexp1));
console.log('babbcc'.match(regexp1));
console.log('aabbccaabbaa'.match(regexp3));
console.log('aabbccaabbaa'.match(regexp4));

// 构造函数的变化

const regexp5 = new RegExp(/a/giuy, 'ig');
// uy修饰符

// u.  unicode

console.log(/^\ud83d/.test('\ud83d\udc36'))
console.log(/^\ud83d/u.test('\ud83d\udc36'))

// '\ud83d\udc36'

// y 粘连修饰符   sticky

const r1 = /imooc/g;
const r2 = /imooc/y;

const str = 'imoocimooc-imooc';

console.log(r1.exec(str));
console.log(r1.exec(str));
console.log(r1.exec(str));
console.log(r1.exec(str));

console.log('-----------------');

console.log(r2.exec(str));
console.log(r2.exec(str));
console.log(r2.exec(str));

三、数值扩展

// 新的进制表示法

016  =>  14

0o  0O    octonary
0b  0B    binary

console.log(0o16);
console.log(0b1111);
 
// 新的方法与安全数
// ---------------------------------------------------

// Number.parseInt Number.parseFloat

console.log(window.parseInt('1.23'));
console.log(parseFloat('1.23'));

console.log(Number.parseInt(1.23));
console.log(Number.parseFloat(1.23));

// ---------------------------------------------------

// Number.isNaN Number.isFinite

// isNaN
console.log(Number.isNaN(NaN));
console.log(Number.isNaN(-NaN));
console.log(Number.isNaN(1));
console.log(Number.isNaN('1'));
console.log(Number.isNaN(true));

function isNaN(value) {
	return value !== value;
}

console.log(isNaN(NaN));
console.log(isNaN(-NaN));
console.log(isNaN(1));
console.log(isNaN('1'));
console.log(isNaN(true));

// isFinite
console.log(Number.isFinite(Infinity));
console.log(Number.isFinite(2 / 0));
console.log(Number.isFinite(2 / 4));
console.log(Number.isFinite(1234));
console.log(Number.isFinite('1234'));
console.log(Number.isFinite(true));
console.log(Number.isFinite(NaN));

// ---------------------------------------------------

Number.MAX_SAFE_INTEGER Number.MIN_SAFE_INTEGER
Number.isSafeInteger();

console.log(Number.MAX_SAFE_INTEGER);
console.log(Number.MIN_SAFE_INTEGER);

console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER - 1));
console.log(Number.isSafeInteger(Number.MAX_SAFE_INTEGER + 1));

// ---------------------------------------------------

// 幂运算

let a = (2 ** 10) ** 0;
console.log(a);

// Math

四、函数扩展

// 函数参数的默认值

function add(a, b = 999 + b, c = 1) {
	console.log(a, b);
}

add(1);

function People({ name, age = 38 } = {name: 1}) {
	console.log(name, age);
};

People({ name: 3 });
// 结合扩展运算符(剩余参数...)

function sum(...args) {
	// let args = Array.prototype.slice.call(arguments);
	// let args = [...arguments];
	// let [...args] = arguments;
	console.log(args);
}

sum(1, 2, 321, 4354, 'fdafsd');


function op(type, b, ...nums) {
	console.log(type);
	console.log(nums);
}

op('sum', 1, 23, 454, 3, 67, 234);

function sum(...numbers) {
	return numbers.reduce(function(a, b) {
		return a + b;
	}, 0);
}

console.log(sum(1, 2, 3, 4));

箭头函数

// 箭头函数

const add1 = (a, b) => {
	a += 1;
	return a + b;
};

const add2 = function(a, b) {
	a += 1;
	return a + b;
}

console.log(add1(2, 2));
console.log(add2(2, 2));

const pop = arr => void arr.pop();

console.log(pop([1, 2, 3]));

const log = () => {
	console.log(arguments);
};

log(1, 2, 3);



const xiaoming = {
	name: '小明',
	say1: function() {
		console.log(this);
	},
	say2: () => {
		console.log(this);
	}
}

xiaoming.say1();
xiaoming.say2();
 


const xiaoming = {
	name: 'xiaoming',
	age: null,
	getAge: function() {
		let _this = this;
		// ...ajax
		setTimeout(function() {
			_this.age = 14;
			console.log(_this);
		}, 1000);

	}
}; 

xiaoming.getAge();
  
const xiaoming = {
	name: 'xiaoming',
	age: null,
	getAge: function() {


		// ...ajax
		setTimeout(() => {
			this.age = 14;
			console.log(this);
		}, 1000);

	}
};

xiaoming.getAge();

五、对象扩展

// 简洁表示法

const getUserInfo = (id = 1) => {
	// AJAX ....

	const name = 'xiaoming';
	const age = 10;

	return {
		name: name,
		age: age,
		say: function() {
			console.log(this.name + this.age);
		}
	};
}; 

const xiaoming = getUserInfo();

// ------------------------------------------

const getUserInfo = (id = 1) => {
	// AJAX ....

	const name = 'xiaoming';
	const age = 10;

	return {
		name,
		age,
		say() {
			console.log(this.name + this.age);
		}
	};
};

const xiaoming = getUserInfo();

// ------------------------------------------

// 属性名表达式

const obj = {
	a: 1,
	$abc: 2,
	'FDASFHGFgfdsgsd$#$%^&*%$#': 3
};

const key = 'age';

const xiaoming = {
	name: 'xiaoming',
	[`${key}123`]: 14
};
// 扩展运算符

// 复制对象 - 浅拷贝

const obj1 = {
	a: 1,
	b: 2,
	d: {
		aa: 1,
		bb: 2
	}
};

const obj2 = {
	c: 3,
	a: 9
};

const cObj1 = { ...obj1 };

console.log(cObj1.d.aa);

cObj1.d.aa = 999;

console.log(cObj1.d.aa);
console.log(obj1.d.aa);

// 合并对象

const newObj = {
	...obj2,
	...obj1
};

newObj.d.aa = 22;

console.log(obj1);

// -----------------------------------

// 部分新的方法和属性

// Object.is
// ===
// +0 -0
// NaN

console.log(Object.is(+0, -0));
console.log(+0 === -0);
console.log(Object.is(NaN, NaN));
console.log(NaN === NaN);

console.log(Object.is(true, false));
console.log(Object.is(true, true));

// --------------------------------------------------

// Object.assign

const obj = Object.assign({a: 1}, {b: 2}, {c: 3}, {d: 4, e: 5});

const obj = {
	a: 1,
	b: {
		c: 2
	}
};

let newObj = Object.assign({a: 3}, obj);

console.log(newObj.b.c);

newObj.b.c = 100;

console.log(obj.b.c);

// --------------------------------------------------

const obj = {
	a: 1,
	b: 2,
	c: 3,
	d: 4
};

// Object.keys

console.log(Object.keys(obj));

// // Object.values

console.log(Object.values(obj));

// // Object.entries

console.log(Object.entries(obj));

// for - of

for (let [k, v] of Object.entries(obj)) {
	console.log(k, v);
}

// --------------------------------------------------

// __proto__

// console.log({a: 1});

// --------------------------------------------------

// Object.setPrototypeOf

const obj1 = {
	a: 1
};

const obj2 = {
	b: 1
}

const obj = Object.create(obj1);

console.log(obj.__proto__);

Object.setPrototypeOf(obj, obj2);

console.log(obj.__proto__);

// --------------------------------------------------

Object.getPrototypeOf

const obj1 = {a: 1};

const obj = Object.create(obj1);

console.log(obj.__proto__);
console.log(Object.getPrototypeOf(obj));
console.log(obj.__proto__ === Object.getPrototypeOf(obj));

// --------------------------------------------------

// super

const obj = {name: 'xiaoming'};

const cObj = {
	say() {
		console.log(`My name is ${super.name}`);
	}
}

Object.setPrototypeOf(cObj, obj);

cObj.say();

六、数组扩展 

// 结合扩展运算符使用

function foo(a, b, c) {
	console.log(a);
	console.log(b);
	console.log(c);
}

foo(...[1, 3, 2]);

const user = ['小明', 14, ['吃饭', '打游戏'], '我没有女朋友'];

function say(name, age, hobby, desc) {
	console.log(`我叫${ name }, 我今年${ age } 岁, 我喜欢${ hobby.join('和') }, ${ desc }`);
}

say(user[0], user[1], user[2], user[3]);

say(...user);

apply

say.apply(null, user);

const arr = [1, 2, 233, 3, 4, 5];

// Math.max();

console.log(Math.max(...arr));
console.log(Math.max.apply(null, arr));

console.log(Math.min(...arr));
console.log(Math.min.apply(null, arr));

// --------------------------------------------

const arr1 = [1, 2, 3, 4];
const arr2 = [4, 2, 2, 1];
const arr3 = [2.2, '123', false];

const cArr1 = [1, 2, 3, ...arr3];

const cArr2 = [...arr1];
const [...cArr3] = arr3;

const cArr4 = [...arr1, ...arr2, ...arr3];


function *g() {
	console.log(1);
	yield 'hi~';
	console.log(2);
	yield 'imooc~';
}

// const arr = [...g()];

const gg = g();

gg.next();

setTimeout(function() {
	gg.next();
}, 1000);

let set = new Set([1, 2, 2, 3]);

console.log([...set]);
// 新的方法

// ----------------------------------------
// Array.from

const obj = {
	0: 1,
	1: '22',
	2: false,
	length: 2
};

console.log(Array.from(obj, item => item * 2));

Array.prototype.slice.call();
[].slice.call();
[...]

// ----------------------------------------
// Array.of

console.log(Array.of(1, 2, '123', false));

// ----------------------------------------
// Array#fill

let arr = new Array(10).fill(0, 0, 3);

console.log([1, 2, 3].fill(0));

// ----------------------------------------
// Array.includes

var arr = [1, 2, 3, 4];
console.log(arr.includes(1));
console.log(arr.includes(55));

// ----------------------------------------
// keys

const arr = [1, 2, 3, 444];

console.log(arr.keys());
for (let i of arr.keys()) {
	console.log(i);
}

// values
for (let v of arr.values()) {
	console.log(v);
}

// entries
for (let [i, v] of arr.entries()) {
	console.log(i, v);
}

// ----------------------------------------
// find 根据条件(回调) 按顺序遍历数组 当回调返回true时 就返回当前遍历到的值
const res = [1, 7, 6, 3].find((value, index, arr) => value % 2 === 0);

console.log(res);

// ----------------------------------------
// findIndex 根据条件(回调) 按顺序遍历数组 当回调返回true时 就返回当前遍历到的下标
const res = [1, 7, 6, 3, NaN].findIndex((value, index, arr) => Number.isNaN(value));

console.log(res);

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
Array.from和Array.of都是数组的静态方法,用于创建新的数组。 Array.from用于将一个类数组对象或可迭代对象转换为真正的数组。它接受一个可迭代的对象作为第一个参数,可选的第二个参数是一个映射函数,用于对数组中的每个元素进行处理。它还可以接受第三个参数作为映射函数中的this值。返回一个新的数组。例如,Array.from([1, 2, 3])将返回一个包含1、2、3的数组。 Array.of用于将参数转换为一个数组,而不管参数的类型。它接受任意个参数,并且按顺序将参数作为数组的元素。返回一个新的数组。例如,Array.of(1, 2, 3)将返回一个包含1、2、3的数组。 因此,Array.from和Array.of的主要区别在于参数的接受方式和用途。Array.from用于将类数组对象或可迭代对象转换为数组,而Array.of用于将一组参数转换为数组。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [es6——模板字符串 数组扩展(Array.form和Array.of) 对象的扩展](https://blog.csdn.net/lucky541788/article/details/82708415)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* *3* [数组方法(Array.form,Array.of 和 Array.isArray)](https://blog.csdn.net/weixin_45368324/article/details/105432600)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值