ES6常用方法汇总

ES6

ES6:是一个泛指,指的是es2015以及后续的迭代版本。完善Javascript功能。

let const var

let

let 特点:
1. 块级作用域
2.不存在变量提升
3.暂时性死区:
    只要块级作用域存在let命令,变量所绑定的区域,不再受外部的影响。
块级作用域
if(true){
  let a = 10;
  var b = 1;
}

a // ReferenceError: a is not defined.
b // 1

for循环的计数器,就很合适使用let命令。
i只在循环体内部使用,外部使用会报错。

for (let i = 0; i < 10; i++) {
  // ...
}

console.log(i);// ReferenceError: i is not defined
暂时性死区
var tmp = 123;

if (true) {
  tmp = 'abc'; // ReferenceError
  let tmp;
}
// 上面代码中,存在全局变量tmp,但是块级作用域内let又声明了一个局部变量tmp,
// 导致后者绑定这个块级作用域,所以在let声明变量前,对tmp赋值会报错。

const

const的特点:
1.声明的是一个常量,且必须赋值,且后续值不能更改【可提升优性能,不再检测该数据】
2.块级作用域--参考let
3.不存在变量提升--参考let

使用场景:

声明的常量值不会发生变化,jsvascript引擎不需要实时监测,因此const关键字声明的常量效率高。
值不需要变化,就使用const关键字。
const PI = 3.1415;
PI // 3.1415

PI = 3;
// TypeError: Assignment to constant variable.

const本质

const实际上保证的,并不是变量的值不得改动,而是变量指向的那个内存地址所保存的数据不得改动。
对于简单类型的数据(数值、字符串、布尔值),值就保存在变量指向的那个内存地址,因此等同于常量。
但对于复合类型的数据(主要是对象和数组),变量指向的内存地址,保存的只是一个指向实际数据的指针,const只能保证这个指针是固定的(即总是指向另一个固定的地址),至于它指向的数据结构是不是可变的,就完全不能控制了。
因此,将一个对象声明为常量必须非常小心。

let const var的区别

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-TeoAuw85-1675264831470)(images/5.jpg)]

经典面试题

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-kfIMfwIq-1675264831470)(images/2.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-sXMOobiy-1675264831471)(images/3.jpg)]

结构赋值

ES6 允许按照一定模式,从数组和对象中提取值,对变量进行赋值,这被称为解构
分为数组和对象

数组的结构

let [a, b, c] = [1, 2, 3];

let [foo, [[bar], baz]] = [1, [[2], 3]];
foo // 1
bar // 2
baz // 3

let [ , , third] = ["foo", "bar", "baz"];
third // "baz"

let [x, , y] = [1, 2, 3];
x // 1
y // 3

let [head, ...tail] = [1, 2, 3, 4];
head // 1
tail // [2, 3, 4]

let [x, y, ...z] = ['a'];
x // "a"
y // undefined
z // []


对象的结构

变量必须与属性同名,才能取到正确的值
取不到值的话为undefined

let { bar, foo } = { foo: 'aaa', bar: 'bbb' };
foo // "aaa"
bar // "bbb"

let { baz } = { foo: 'aaa', bar: 'bbb' };
baz // undefined

如果变量名与属性名不一致,必须写成下面这样

let { foo: baz } = { foo: 'aaa', bar: 'bbb' };
baz // "aaa"

箭头函数

this关键字:丢失自己的this,指向箭头函数定义位置的this
 function fn(){
    console.log('fn内部的this',this);
         return ()=>{
                console.log('箭头函数内部的this',this)
            }
        }       
  fn()()//必须执行才会打印

箭头函数面试题

var age = 100
var obj = {
    age:20,
    say:()=>{
        console.log(this,age) //打印结果:100 ----对象不能产生作用域
    }
}
obj.say()

模版字符串 ${sayHello()} ``,${}

模版字符串中可以调用函数

剩余参数

将接受到的不定量的参数放置到一个数组中–剩余参数

    const sum=(name,...args)=>{
        console.log('接收的参数',name,args); //name:'张三',   arg:[20,30]
        let totalMoney=0
        args.forEach(item=>{
            total+=item
        })
        return totalMoney
    }
    console.log(sum('张三',10,20,30))

扩展运算符 …展开–可用于合并数组

let arr1=[1,2,3]
let arr2=[4,5,6]
let newArr = [...arr1,...arr2]

Array扩展方法

Array.from()–将伪数组转换成真数组

// 1. 伪元素 2. 可迭代对象
let json ={
	    '0':'11',
	    '1':'22',
	    '2':'33',
	    length:3
	}
	let arr = Array.from(json);
	console.log(arr); // ["11", "22", "33"]	

Array.of()
将一组值转换为数组

Array.of(3, 11, 8) // [3,11,8]
Array.of(3) // [3]
Array.of(3).length // 1

实例方法

find
findIndex
includes

find

数组实例的方法
用于找到第一个符合条件的数组成员
参数是一个回调函数,数组中的每一个成员依次执行该回调函数,找到返回该成员
未找到,返回undefined
find可以接受三个参数
[1, 4, -5, 10].find((n) => n < 0)
// -5

[1, 5, 10, 15].find(function(value, index, arr) {
  return value > 9;
}) // 10

findIndex

与find类似
返回第一个符合条件的数组成员的位置,如果所有成员都不符合条件,则返回-1。
[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

includes 替代indexOf(晦涩难懂)

[1, 2, 3].includes(2)     // true
[1, 2, 3].includes(4)     // false
[1, 2, NaN].includes(NaN) // true

该方法的第二个参数表示搜索的起始位置,默认为0。
如果第二个参数为负数,则表示倒数的位置,如果这时它大于数组长度(比如第二个参数为-4,但数组长度为3),则会重置为从0开始。

[1, 2, 3].includes(3, 3);  // false
[1, 2, 3].includes(3, -1); // true

字符串新增方法

repeat:将原字符串重复n次

'x'.repeat(3) // "xxx"
'hello'.repeat(2) // "hellohello"

includes,startWith ,endsWith

let s = 'Hello world!';

s.startsWith('Hello') // true
s.endsWith('!') // true
s.includes('o') // true

新增对象方法

Object.is

它用来比较两个值是否严格相等,与严格比较运算符(===)的行为基本一致。
不同之处只有两个:一是+0不等于-0,二是NaN等于自身。

Object.is('foo', 'foo')
// true
Object.is({}, {})
// false

Object.assign()方法用于对象的合并

Object.assign()方法实行的是浅拷贝,而不是深拷贝。也就是说,如果源对象某个属性的值是对象,那么目标对象拷贝得到的是这个对象的引用。

const target = { a: 1 };
const source1 = { b: 2 };
const source2 = { c: 3 };

Object.assign(target, source1, source2);///
target // {a:1, b:2, c:3}

Object.keys()方法,返回一个数组

var obj = { foo: 'bar', baz: 42 };
Object.keys(obj)
// ["foo", "baz"]

Object.values()方法返回一个数组


const obj = { foo: 'bar', baz: 42 };
Object.values(obj)
// ["bar", 42]

Object.entries()方法返回一个数组

const obj = { foo: 'bar', baz: 42 };
Object.entries(obj)
// [ ["foo", "bar"], ["baz", 42] ]

运算符的扩展

指数运算符
链判断运算符
Null判断运算符

// ES2020 引入了一个新的 Null 判断运算符??。它的行为类似||,但是只有运算符左侧的值为null或undefined时,才会返回右侧的值。

逻辑赋值运算符



Set数据结构 Map数据结构

set是新增的数据结构,类似数组
数组中的成员具有唯一性
本身是一个构造函数,用来生成 Set 数据结构。
接受的参数:数组
const s = new Set();//创建

[2, 3, 5, 4, 5, 2, 2].forEach(x => s.add(x));

for (let i of s) {
  console.log(i);
}
// 2 3 5 4
const arr= new Set(['a','b','c'])
// 去除数组的重复成员
[...new Set(array)]

//去除字符串里面的重复字符。
[...new Set('ababbc')].join('')
// "abc"

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-5BJVyNSp-1675264831471)(images/1.jpg)]
[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zxtYHS3Q-1675264831471)(images/4.jpg)]

symbol

表示独一无二的值
let s = Symbol();
typeof s
// "symbol"

函数参数默认值

function log(x, y = 'World') {
  console.log(x, y);
}

log('Hello') // Hello World
log('Hello', 'China') // Hello China
log('Hello', '') // Hello

module模块化

在 ES6 之前,社区制定了一些模块加载方案,最主要的有 CommonJS 和 AMD 两种。前者用于服务器,后者用于浏览器。

import * as xxx from ‘xxx’: 会将若干export导出的内容组合成一个对象返回;
import xxx from ‘xxx’:只会导出这个默认的对象作为一个对象
模块化语法
① export 命令:用于规定模块的对外接口
② import 命令:用于输入其他模块提供的功能
export暴露方式3种
  1. 分别暴露
	// 1. 分别暴露, m1.js, m1.js
	export let school = 'gc';

	export function teach() {
    	console.log("m1--我们可以教给你很多东西!");
	};

  1. 统一暴露
	// 2. 统一暴露, m2.js
	let school = 'gc';

	function findJob() {
    	console.log("m2---我们可以帮助你找工作!!");
	};

	export {school, findJob};

  1. 默认暴露
	// 3. 默认暴露, m3.js
	export default {
    	school: 'ATLUCA',
    	change: function(){
        	console.log("m3---我们可以改变你!!");
    	}
	}

import 的导入方式
  1. 通用的导入方式
	// 1. 通用的导入方式
	// 引入 m1.js 模块内容
	import * as _m1 from "js/m1.js";
	_m1.teach();
	// 引入 m2.js 模块内容
	import * as _m2 from "js/m2.js";
	_m2.findJob();
	console.log(_m2.school);

  1. 结构赋值方式
	// 2. 解构赋值形式
	// 引入 m1.js 模块内容
	import {school, teach} from "js/m1.js";
	console.log(school);

  1. 简便形式,只针对于默认暴露
	// 3. 简便形式, 只针对于默认暴露
	import _m3 from "js/m3.js";
	console.log(_m3);

常用数组方法:

检测是否为数组:
1. arr.instanceOf Array()
2. Array.isArray(arr)

push  pop
unshift shift
获取数组索引:indexOf 
数组中是否包含:includes

数组转换字符串: 1. toString   2. join('-')
数组合并:concat
数组截取:slice
数组删除:splice
数组排序:sort
数组翻转:reverse

es5新增数组遍历:
forEach map some every filter reduce

将伪数组转换为真数组:Array.from
将一组值转换为数组:Array.of
Array.isArray()

includes
find:找到数组中符合特定条件的数值
arr.find(function(value, index, arr) {
  return value > 9;
}) // 10
findIndex:与find类似
[1, 5, 10, 15].findIndex(function(value, index, arr) {
  return value > 9;
}) // 2

数组排序
数组翻转:
数组去重复:new Set(['1','2','5','2'])
求数组中的最大值
数组截取
将数组转换成字符串

常用字符串方法:

字符串不可变,一般指的是里面的值不可变,虽然看上去可以改变内容,但是里面的值变了,内存中新开辟了一个内存空间。
一般不要大量拼接字符串,

根据字符返回位置:indexOf
判断用户按下了哪个键:charCodeAt(index)
获取指定位置的字符:str[index],charAt(index)

字符串截取:substr(start, length)  slice(start,end) 都是索引号,但是end取不到
替换字符串:replace
字符串转换数组:split()


toUpperCase 转换大写
toLowerCase 转换小写

es6新增:
includes,startWith ,endsWith  repeat

字符串练习

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-zbpD7VZl-1675264831471)(images/6.jpg)]
解答:

1. str.length
2.str[0]  或 str.charAt(0)
3.str.includes() 或 str.indexOf()
4. str.replace('g',22)
5. str.substr(1,5)

*** 找出字符串中出现次数最多的字符和出现的次数 ***

// 参考--Javascript笔记 183

对象常用方法


Object.is()
Object.entries 

Object.keys 
Object.values 

Object.assign(target, source1, source2);//用于对象的合并,浅拷贝

Object.create() 
Object.defineProperty()

上述牵扯到深浅拷贝

扩展运算符:...
Object.assign:浅拷贝

for…of与for…in
for…in :用来遍历对象

for(let k in obj){
	console.log(k) //键 
	console.log(obj[k]) //值
}

for…of
它是ES6中新增加的语法,用来循环获取一对键值对中的值

// 1.循环一个数组
let arr = ['China', 'America', 'Korea']
for(let o of arr){
	console.log(o) //China,America,Korea
}
// 2.循环一个字符串
let str = 'love'
for (let o of str) {
    console.log(o) // l,o,v,e
}
// 3.循环一个Map
// 4.循环一个Set
// 5.循环一个obj--报错

其他:
Promise

async/await

扩展运算符…

函数默认参数

es6数组方法

forEach map some every filter

for…of与for…in

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值