查漏补缺 - ES6

这篇具有很好参考价值的文章主要介绍了查漏补缺 - ES6。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

js 在 2015年发布了新版本,被称为 es6,之后每年更新一个版本。自 es7 之后,就直接用年份命名了

版本 年份
es6 2015
es7 2016
es2017 2017
es2018 2018

1,let 和 const

1,会产生块级作用域。

if (true) {
  const a = 1
}
console.log(a) // ReferenceError: a is not defined

下面如果用 var 会打印3个2。

for (let i = 0; i < 3; i++) {
  setTimeout(function() {
    console.log(i)
  }, 1000)
}

2,如何理解 const 定义的变量不可被修改?

指这个变量不能被修改

  • 重新赋值,和修改这个对象的属性值是没有关系的。
const obj = {}

obj = 1 // TypeError: Assignment to constant variable.

obj.a = 1 // ok
  • 自增
const a = 1
a++ // TypeError: Assignment to constant variable.

2,数组

1,for…of 用于遍历可迭代对象,也包括伪数组,比如 argumentsNodeList(querySelectAll 获取的)

2,判断是不是数组,Array.isArray()

3,解构数组

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

const [a, b] = arr; // 1 2
const [, , a, b] = arr; // 3 4
const [a, , b, c] = arr; // 1 3 4
const [a, b, ...c] = arr; // 1 2 [ 3, 4, 5 ]

4,数组去重

const arr = [1, 3, 4, 3, 6];
const newArr = [...new Set(arr)]; // [ 1, 3, 4, 6 ]

5,打平数组

参数为遍历的层级。

const arr1 = [1, 2, [3, 4]];
arr1.flat();
// [1, 2, 3, 4]

const arr2 = [1, 2, [3, 4, [5, 6]]];
arr2.flat();
// [1, 2, 3, 4, [5, 6]]

const arr3 = [1, 2, [3, 4, [5, 6]]];
arr3.flat(2);
// [1, 2, 3, 4, 5, 6]

const arr4 = [1, 2, [3, 4, [5, 6, [7, 8, [9, 10]]]]];
arr4.flat(Infinity);
// [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

6,创建指定 length 的数组

Array(10).fill(0)

3,对象

1,Object.is()

MDN - Object.is(),判断2个值是否相同,和 === 唯一的区别是:

Object.is(-0, +0) // false
Object.is(NaN, NaN) // true

-0 === +0 // true
NaN === NaN // false

Array.prototype.includes() 使用的就是 Object.is() 的规则。

2,属性描述符

js 使用属性描述符,来描述对象中的每个成员。vue2 通过此特性实现响应式核心原理。

const obj = {
  name: '下雪天的夏风',
  age: 18
};

在 js 内部被描述为

{
  // 属性 name 的描述符
  name: {
    value: '下雪天的夏风',
    configurable: true, // 该属性的描述符是否可以被重新定义
    enumerable: true, // 该属性是否允许被遍历,会影响for-in循环
    writable: true // 该属性是否允许被修改
  },
  // 属性 age 的描述符,同理。
  age: {
    value: '18',
    configurable: true,
    enumerable: true,
    writable: true
  },
}

有 API 可以操作属性描述符

const obj = {
  name: '下雪天的夏风',
  age: 18
};

// 修改属性描述符
Object.defineProperty(obj, "name", {
  value: "新值",
  writable: false,
  enumerable: false,
  configurable: true,
});

// 获取属性描述符
Object.getOwnPropertyDescriptor(obj, "name");

// 输出
{
  value: '下雪天的夏风',
  writable: false,
  enumerable: false,
  configurable: true
}

1,属性描述符 writable: false 时,修改无效,但不报错。

2,当通过 Object.defineProperty 设置 configurable: false 后,就不能再次修改属性描述符了,会报错。

gettersetter

const obj = {};

let init;

Object.defineProperty(obj, "a", {
  get() { // 读取属性 a 时,得到的是该方法的返回值
    return init;
  },
  set(val) { // 设置属性 a 时,会把值传入 val,调用该方法
	init = val
  }
});

3,常用API

const obj = { name: "名字", age: "年龄" };
console.log(Object.keys(obj)); // [ 'name', 'age' ]
console.log(Object.values(obj)); // [ '名字', '年龄' ]
console.log(Object.entries(obj)); // [ [ 'name', '名字' ], [ 'age', '年龄' ] ]

还有一个,正好和 Object.entries() 相反。

const obj = Object.fromEntries([
  ["name", "名字"],
  ["age", "年龄"],
]); // { name: '名字', age: '年龄' }

4,得到除某个属性之外的新对象。

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

const { a, ...newObj } = obj; // newObj { b: 2, c: 3 }

//或
const newObj = {...obj}
delete newObj.a

·

4,函数

1,箭头函数

特点

  1. 不能使用new调用
  2. 没有原型,即没有prototype属性
  3. 没有arugments
  4. 没有this

关于原型

普通函数:

查漏补缺 - ES6,interview,js,es6,javascript,前端

箭头函数:

查漏补缺 - ES6,interview,js,es6,javascript,前端

关于 arugments :

function fun() {
  const fun2 = () => {
    console.log(arguments);
  };
  fun2(1, 2);
}
fun(3, 4); // [Arguments] { '0': 3, '1': 4 }

在箭头函数中,可以使用剩余参数代替 arguments

const fun = (a, ...args) => {
  console.log(a, args); // 1 [ 2, 3, 4 ]
  console.log(Array.isArray(args)); // true
};
fun(1, 2, 3, 4);

2,默认参数

const fun = (a, b = 1) => {
  console.log(a, b);
};
fun(1, undefined); // 1 1

3,解构传参

const fun = (config = { page: 1, limit: 10 }) => {
  console.log(config); // { page: 1 }  { page: 2, limit: 10 }
};

// 这样才能使用默认值
const fun = ({ page = 1, limit = 10 } = {}) => {
  console.log(page, limit); // 1 10 和 2 10
};

fun({ page: 1 });

fun({
  page: 2,
  limit: 10,
});

4,类语法

基础写法:

// 旧的写法
function User(firstName, lastName){
  this.firstName = firstName;
  this.lastName = lastName;
  this.fullName = `${firstName} ${lastName}`;
}
User.isUser = function(u){
  return u && u.fullName
}
User.prototype.sayHello = function(){
  console.log(`姓名:${this.fullName}`);
}

// es6 等效写法
class User{
  constructor(firstName, lastName){
    this.firstName = firstName;
    this.lastName = lastName;
    this.fullName = `${firstName} ${lastName}`;
  }
  
  static isUser(u){
  	 return u && u.fullName
  }
  
  sayHello(){
    console.log(`姓名:${this.fullName}`);
  }
}

继承关系

function Animal(type, name){
  this.type = type;
  this.name = name;
}

Animal.prototype.intro = function(){
  console.log(`I am ${this.type}, my name is ${this.name}`)
}

function Dog(name){
  Animal.call(this, '狗', name);
}

Dog.prototype = Object.create(Animal.prototype); // 设置继承关系

// 新的方式

class Animal{
  constructor(type, name){
    this.type = type;
    this.name = name;
  }
  
  intro(){
    console.log(`I am ${this.type}, my name is ${this.name}`)
  }
}

class Dog extends Animal{
  constructor(name){
    super('狗', name); // 调用父级构造函数
  }
}

以上。文章来源地址https://www.toymoban.com/news/detail-705596.html

到了这里,关于查漏补缺 - ES6的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【ES6】JavaScript中的Symbol

    Symbol是JavaScript中的一种特殊的、不可变的、不可枚举的数据类型。它通常用于表示一个唯一的标识符,可以作为对象的属性键,确保对象的属性键的唯一性和不可变性。 Symbol.for()是Symbol的一个方法,它用于创建一个已经注册的Symbol对象。当使用Symbol.for()创建Symbol对象时,会

    2024年02月10日
    浏览(27)
  • JavaScript版本ES5/ES6及后续版本

    Brendan Eich在短短10天内创建了JavaScript的第一个版本。它被称为摩卡,但已经具备了现代JavaScript的许多基本特性! 为了吸引Java开发人员,Mocha先是更改为LiveScript,然后又更改为JavaScript然而,JavaScript与Java几乎没有任何关系; 微软推出了IE,从网景复制JavaScript,并称之为JScript; 由

    2024年02月13日
    浏览(29)
  • JavaScript:ES6中类与继承

    在JavaScript编程中,ES6引入了一种更现代、更清晰的方式来定义对象和实现继承,那就是通过类和继承机制。本文将以通俗易懂的方式解释ES6中类与继承的概念,帮助你更好地理解和应用这些特性。 1. 类的创建与使用 类是一种模板,用于创建对象。在ES6中,我们可以使用 cl

    2024年02月13日
    浏览(26)
  • 【Javascript】ES6新增之类的认识

    在现代编程语言中,类是面向对象编程范式中的核心概念之一。 与函数类似,类本质上是一种特殊的函数,它允许我们将数据和操作封装在一起,以创建具有共同行为和状态的对象。 在类的世界里,我们有类表达式和类声明,它们各自具有自己的特性和用途。 ✨ 类本质上是

    2024年02月13日
    浏览(25)
  • JavaScript之ES6高级语法(一)

    本文是我在学习过程中记录学习的点点滴滴,目的是为了学完之后巩固一下顺便也和大家分享一下,日后忘记了也可以方便快速的复习。 今天学习的主要是关于ES6新语法知识的理解和应用 栈负责存放简单数据类型,堆负责存放复杂数据类型,但是复杂数据类型会把内容存在

    2024年02月09日
    浏览(34)
  • 前端-ES6

    let 和 const 为了解决var的作用域的问题,而且var 有变量提升,会出现全局污染的问题 let 块状作用域,并且不能重复声明 const 一般用于声明常量,一旦被声明无法修改,但是const 可以声明一个对象,对象内部的属性是可以修改的 建议: 在默认的情况下用const, 而只有你知道

    2024年02月12日
    浏览(26)
  • 15 JavaScript ES6中的箭头函数

    15 JavaScript ES6中的箭头函数 什么是箭头函数 ES6中允许使用=来定义函数。箭头函数相当于匿名函数,并简化了函数定义。 基本语法 箭头函数在语法上比普通函数简洁多。箭头函数就是采用箭头=来定义函数,省去function。 函数的参数放在=前面的括号中,函数体跟在=后的

    2024年02月12日
    浏览(36)
  • 【ES6】 JavaScript 中的Object.assign

    Object.assign() 是 JavaScript 中的一个方法,它用于复制源对象的所有可枚举属性到目标对象。该方法会返回目标对象。 这是其基本用法: 在这个例子中,source 对象的所有可枚举属性都被复制到了 target 对象。 需要注意的是,Object.assign() 是浅复制(shallow copy),意味着如果源对

    2024年02月10日
    浏览(32)
  • JavaScript学习笔记01(包含ES6语法)

    Js 最初被创建的目的是“使网页更生动”。 Js 写出来的程序被称为 脚本 ,Js 是一门脚本语言。 被直接写在网页的 HTML 中,在页面加载的时候自动执行 脚本被以纯文本的形式提供和执行,不需要特殊的准备或编译即可运行(JIN compiler) Js 不仅可以在浏览器中执行,也可以在

    2024年02月16日
    浏览(38)
  • JavaScript、TypeScript、ES5、ES6之间的联系和区别

    ECMAScript:  一个由 ECMA International 进行标准化,TC39 委员会进行监督的语言。通常用于指代标准本身。 JavaScript:  ECMAScript 标准的各种实现的最常用称呼。这个术语并不局限于某个特定版本的 ECMAScript 规范,并且可能被用于任何不同程度的任意版本的 ECMAScript 的实现。 ECMAS

    2024年02月13日
    浏览(28)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包